feat: check fill profile on startup app

This commit is contained in:
MaximOksiuta
2025-11-21 18:54:38 +03:00
parent 44d7860883
commit aa16f6f63d
3 changed files with 34 additions and 19 deletions
+4 -4
View File
@@ -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" />
@@ -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
} }