Skip to content

Commit

Permalink
Email OTP:WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
chege4179 committed Mar 24, 2024
1 parent 27be303 commit 227b779
Show file tree
Hide file tree
Showing 48 changed files with 1,524 additions and 278 deletions.
15 changes: 1 addition & 14 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 16 additions & 16 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -93,18 +93,18 @@ dependencies {

implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.compose.ui:ui:1.6.0")
implementation("androidx.compose.ui:ui-tooling-preview:1.6.0")
implementation("androidx.compose.ui:ui:1.6.3")
implementation("androidx.compose.ui:ui-tooling-preview:1.6.3")
implementation("androidx.activity:activity-compose:1.8.2")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.0")
debugImplementation("androidx.compose.ui:ui-tooling:1.6.0")
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.3")
debugImplementation("androidx.compose.ui:ui-tooling:1.6.3")

implementation("androidx.compose.material:material-icons-extended:1.6.0")
implementation("androidx.compose.material3:material3:1.2.0-rc01")
implementation("androidx.compose.material3:material3-window-size-class:1.2.0-rc01")
implementation("androidx.compose.material:material-icons-extended:1.6.3")
implementation("androidx.compose.material3:material3:1.2.1")
implementation("androidx.compose.material3:material3-window-size-class:1.2.1")

implementation("androidx.metrics:metrics-performance:1.0.0-beta01")
// retrofit
Expand All @@ -129,12 +129,12 @@ dependencies {
implementation ("com.google.dagger:hilt-android:2.50")
ksp ("com.google.dagger:hilt-compiler:2.50")

implementation ("androidx.hilt:hilt-navigation-compose:1.1.0")
implementation ("androidx.navigation:navigation-compose:2.7.6")
implementation ("androidx.hilt:hilt-navigation-compose:1.2.0")
implementation ("androidx.navigation:navigation-compose:2.7.7")

ksp("androidx.hilt:hilt-compiler:1.1.0")
implementation("androidx.hilt:hilt-work:1.1.0")
implementation("androidx.hilt:hilt-common:1.1.0")
ksp("androidx.hilt:hilt-compiler:1.2.0")
implementation("androidx.hilt:hilt-work:1.2.0")
implementation("androidx.hilt:hilt-common:1.2.0")

// room
implementation("androidx.room:room-runtime:2.6.1")
Expand All @@ -147,7 +147,7 @@ dependencies {
implementation("androidx.paging:paging-runtime-ktx:3.2.1")

// coil
implementation("io.coil-kt:coil-compose:2.5.0")
implementation("io.coil-kt:coil-compose:2.6.0")
implementation ("com.google.accompanist:accompanist-permissions:0.33.2-alpha")

// datastore (core and preferences)
Expand All @@ -166,7 +166,7 @@ dependencies {

implementation("androidx.profileinstaller:profileinstaller:1.3.1")

implementation(platform("com.google.firebase:firebase-bom:32.7.0"))
implementation(platform("com.google.firebase:firebase-bom:32.7.4"))
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-messaging-ktx")
Expand All @@ -186,9 +186,9 @@ dependencies {

implementation("androidx.core:core-splashscreen:1.0.1")

testImplementation("io.mockk:mockk:1.13.8")
testImplementation("io.mockk:mockk:1.13.9")
testImplementation("org.robolectric:robolectric:4.11.1")
androidTestImplementation("io.mockk:mockk-android:1.13.8")
androidTestImplementation("io.mockk:mockk-android:1.13.9")

}

Expand Down
33 changes: 33 additions & 0 deletions app/src/main/java/com/peterchege/blogger/core/api/BloggerApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ import com.peterchege.blogger.core.api.responses.responses.LikeCommentResponse
import com.peterchege.blogger.core.api.responses.responses.LikeResponse
import com.peterchege.blogger.core.api.responses.responses.LoginResponse
import com.peterchege.blogger.core.api.responses.responses.LogoutResponse
import com.peterchege.blogger.core.api.responses.responses.OtpTriggerResponse
import com.peterchege.blogger.core.api.responses.responses.OtpValidateResponse
import com.peterchege.blogger.core.api.responses.responses.PostResponse
import com.peterchege.blogger.core.api.responses.responses.ProfileResponse
import com.peterchege.blogger.core.api.responses.responses.ResetPasswordResponse
import com.peterchege.blogger.core.api.responses.responses.SearchPostResponse
import com.peterchege.blogger.core.api.responses.responses.SearchUserResponse
import com.peterchege.blogger.core.api.responses.responses.SignUpResponse
Expand Down Expand Up @@ -184,5 +187,35 @@ interface BloggerApi {
):Response<LikeCommentResponse>


@POST("/auth/triggerVerifyEmailOtp")
suspend fun triggerVerifyEmailOtp(
@Body body: OtpTriggerBody
):Response<OtpTriggerResponse>


@POST("/auth/triggerPasswordResetOtp")
suspend fun triggerPasswordResetOtp(
@Body body: OtpTriggerBody
):Response<OtpTriggerResponse>


@POST("/auth/validatePasswordResetOtp")
suspend fun validatePasswordResetOtp(
@Body body: ValidateOtpBody
):Response<OtpValidateResponse>


@POST("/auth/validateVerifyEmailOtp")
suspend fun validateVerifyEmailOtp(
@Body body: ValidateOtpBody
):Response<OtpValidateResponse>


@POST("/auth/resetPassword")
suspend fun resetPassword(
@Body body: ResetPasswordBody
):Response<ResetPasswordResponse>


}

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.peterchege.blogger.core.api.requests

import kotlinx.serialization.Serializable


@Serializable
data class OtpTriggerBody(
val email:String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.peterchege.blogger.core.api.requests

import kotlinx.serialization.Serializable


@Serializable
data class ResetPasswordBody(
val email:String,
val newPassword:String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.peterchege.blogger.core.api.requests

import kotlinx.serialization.Serializable

@Serializable
data class ValidateOtpBody(
val email:String,
val otpPassword:String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ data class User(
val createdAt:String,
val updatedAt:String,
val deviceTokens:List<DeviceToken>,
val isEmailVerified:Boolean,

@SerialName(value = "_count")
val count: UserCount,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.peterchege.blogger.core.api.responses.responses

import kotlinx.serialization.Serializable


@Serializable
data class OtpTriggerResponse(
val msg:String,
val success:Boolean
)


@Serializable
data class OtpValidateResponse(
val msg:String,
val success:Boolean
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.peterchege.blogger.core.api.responses.responses

import kotlinx.serialization.Serializable


@Serializable
data class ResetPasswordResponse(
val msg:String,
val success:Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ object UserInfoSerializer : Serializer<User?> {
deviceTokens = emptyList(),
createdAt = "",
updatedAt = "",
count = UserCount(0,0,0)
count = UserCount(0,0,0),
isEmailVerified = false

)
).encodeToByteArray()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ package com.peterchege.blogger.core.di
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import com.peterchege.blogger.core.analytics.analytics.AnalyticsHelper
import com.peterchege.blogger.core.analytics.analytics.FirebaseAnalyticsHelper
import com.peterchege.blogger.core.firebase.analytics.AnalyticsHelper
import com.peterchege.blogger.core.firebase.analytics.FirebaseAnalyticsHelper
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down
13 changes: 6 additions & 7 deletions app/src/main/java/com/peterchege/blogger/core/di/BloggerApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,30 @@ import android.app.Application
import android.app.NotificationChannel
import android.app.NotificationManager
import android.os.Build
import androidx.hilt.work.HiltWorkerFactory
import androidx.work.Configuration
import androidx.work.WorkManager
import com.peterchege.blogger.BuildConfig
import com.peterchege.blogger.core.analytics.crashlytics.CrashlyticsTree
import com.peterchege.blogger.core.firebase.config.RemoteFeatureToggle
import com.peterchege.blogger.core.firebase.crashlytics.CrashlyticsTree
import com.peterchege.blogger.core.util.Constants
import com.peterchege.blogger.core.util.ProfileVerifierLogger
import com.peterchege.blogger.core.work.WorkConstants
import com.peterchege.blogger.core.work.WorkInitializer
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber
import javax.inject.Inject


@HiltAndroidApp
class BloggerApp :Application(){
@Inject
lateinit var remoteFeatureToggle: RemoteFeatureToggle

// @Inject
// lateinit var workerFactory: HiltWorkerFactory

@Inject
lateinit var profileVerifierLogger: ProfileVerifierLogger

override fun onCreate() {
super.onCreate()
remoteFeatureToggle.sync()
remoteFeatureToggle.checkForUpdates()
initTimber()
setUpNotificationChannel()
profileVerifierLogger()
Expand Down
30 changes: 30 additions & 0 deletions app/src/main/java/com/peterchege/blogger/core/di/FirebaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.peterchege.blogger.core.di

import com.google.firebase.ktx.Firebase
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.ktx.remoteConfig
import com.peterchege.blogger.core.firebase.config.RemoteConfigConfig
import com.peterchege.blogger.core.firebase.config.RemoteFeatureToggle
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object FirebaseModule {

@Provides
@Singleton
fun provideRemoteFeatureToggle(): RemoteFeatureToggle =
RemoteFeatureToggle(Firebase.remoteConfig)

@Provides
@Singleton
fun provideFirebaseRemoteConfig(): FirebaseRemoteConfig = RemoteConfigConfig.setup()




}
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,28 @@ import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFact
import com.peterchege.blogger.core.api.BloggerApi
import com.peterchege.blogger.core.api.interceptor.AuthInterceptor
import com.peterchege.blogger.core.datastore.preferences.DefaultAuthTokenProvider
import com.peterchege.blogger.core.firebase.config.RemoteFeatureToggle
import com.peterchege.blogger.core.util.Constants
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import timber.log.Timber
import java.util.concurrent.TimeUnit
import javax.inject.Singleton


@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
val TAG = NetworkModule::class.java.simpleName

@Provides
@Singleton
Expand Down Expand Up @@ -79,7 +83,10 @@ object NetworkModule {
fun provideUserApi(
client: OkHttpClient,
networkJson: Json,
remoteFeatureToggle: RemoteFeatureToggle,
): BloggerApi {
val URL = runBlocking { remoteFeatureToggle.getString("BASE_URL") }
Timber.tag(TAG).w("Remote feature config BASE URL ${URL}")
return Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.client(client)
Expand Down
Loading

0 comments on commit 227b779

Please sign in to comment.