You've already forked RekomenciMobile
feat: check fill profile on startup app
This commit is contained in:
Generated
+4
-4
@@ -22,10 +22,10 @@
|
|||||||
<InsightsFilterSettings>
|
<InsightsFilterSettings>
|
||||||
<option name="connection">
|
<option name="connection">
|
||||||
<ConnectionSetting>
|
<ConnectionSetting>
|
||||||
<option name="appId" value="PLACEHOLDER" />
|
<option name="appId" value="com.prodhack.moscow2025" />
|
||||||
<option name="mobileSdkAppId" value="" />
|
<option name="mobileSdkAppId" value="1:846499996834:android:3f1b450bd2c804dff523fb" />
|
||||||
<option name="projectId" value="" />
|
<option name="projectId" value="prodmoscow2025" />
|
||||||
<option name="projectNumber" value="" />
|
<option name="projectNumber" value="846499996834" />
|
||||||
</ConnectionSetting>
|
</ConnectionSetting>
|
||||||
</option>
|
</option>
|
||||||
<option name="signal" value="SIGNAL_UNSPECIFIED" />
|
<option name="signal" value="SIGNAL_UNSPECIFIED" />
|
||||||
|
|||||||
+22
-4
@@ -1,14 +1,32 @@
|
|||||||
package com.prodhack.moscow2025.domain.usecase.auth
|
package com.prodhack.moscow2025.domain.usecase.auth
|
||||||
|
|
||||||
import com.prodhack.moscow2025.domain.interfaces.AuthRepository
|
import com.prodhack.moscow2025.domain.interfaces.AuthRepository
|
||||||
|
import com.prodhack.moscow2025.domain.interfaces.UserRepository
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import org.koin.core.annotation.Single
|
import org.koin.core.annotation.Single
|
||||||
|
|
||||||
|
enum class SessionState {
|
||||||
|
NotAuthorized,
|
||||||
|
NotFilledProfile,
|
||||||
|
FilledAndAuthorized
|
||||||
|
}
|
||||||
|
|
||||||
@Single
|
@Single
|
||||||
class CheckSessionUseCase(
|
class CheckSessionUseCase(
|
||||||
private val authRepository: AuthRepository
|
private val authRepository: AuthRepository,
|
||||||
|
private val userRepository: UserRepository
|
||||||
) {
|
) {
|
||||||
suspend operator fun invoke(): Boolean {
|
/**
|
||||||
return authRepository.fetchLoginState().firstOrNull() == true
|
* return session state with
|
||||||
}
|
*/
|
||||||
|
suspend operator fun invoke(): SessionState =
|
||||||
|
if (authRepository.fetchLoginState().firstOrNull() == true) {
|
||||||
|
if (userRepository.fetchProfile().getOrNull()?.firstName.isNullOrBlank()) {
|
||||||
|
SessionState.NotFilledProfile
|
||||||
|
} else {
|
||||||
|
SessionState.FilledAndAuthorized
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SessionState.NotAuthorized
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,22 +8,15 @@ import android.util.Log
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import com.google.firebase.messaging.FirebaseMessaging
|
import com.google.firebase.messaging.FirebaseMessaging
|
||||||
import com.prodhack.moscow2025.domain.usecase.auth.CheckSessionUseCase
|
import com.prodhack.moscow2025.domain.usecase.auth.CheckSessionUseCase
|
||||||
|
import com.prodhack.moscow2025.domain.usecase.auth.SessionState
|
||||||
import com.prodhack.moscow2025.presentation.navigation.AppDestination
|
import com.prodhack.moscow2025.presentation.navigation.AppDestination
|
||||||
import com.prodhack.moscow2025.presentation.navigation.TTasksApp
|
import com.prodhack.moscow2025.presentation.navigation.TTasksApp
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -48,13 +41,17 @@ class MainActivity : ComponentActivity() {
|
|||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
val isAuthorized = try {
|
val sessionState = try {
|
||||||
checkSessionUseCase()
|
checkSessionUseCase()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
false
|
SessionState.NotAuthorized
|
||||||
}
|
}
|
||||||
sessionDestinationState.value =
|
sessionDestinationState.value =
|
||||||
if (isAuthorized) AppDestination.Main else AppDestination.Login
|
when (sessionState) {
|
||||||
|
SessionState.NotAuthorized -> AppDestination.Login
|
||||||
|
SessionState.NotFilledProfile -> AppDestination.FillProfile
|
||||||
|
SessionState.FilledAndAuthorized -> AppDestination.Main
|
||||||
|
}
|
||||||
|
|
||||||
stateLoaded = true
|
stateLoaded = true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user