From 474b282fbbb6b792c2ee83f233e1c647b584bb99 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Nov 2025 09:12:16 +0300 Subject: [PATCH] auth base --- .../work/data/repo/AuthRepository.kt | 9 ++++++--- .../work/data/source/DataStoreDataSource.kt | 18 +++++++++++++----- .../ru/myitschool/work/ui/root/RootActivity.kt | 3 +++ .../work/ui/screen/NavigationGraph.kt | 2 ++ .../work/ui/screen/auth/AuthIntent.kt | 1 + .../work/ui/screen/auth/AuthScreen.kt | 7 +++++-- .../work/ui/screen/auth/AuthState.kt | 1 + .../work/ui/screen/auth/AuthViewModel.kt | 18 +++++++++++++++++- 8 files changed, 48 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt b/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt index febfcbb..555399d 100644 --- a/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt +++ b/app/src/main/java/ru/myitschool/work/data/repo/AuthRepository.kt @@ -6,13 +6,16 @@ import ru.myitschool.work.data.source.NetworkDataSource object AuthRepository { private var codeCache: String? = null - // TODO: разобраться с контекстом suspend fun checkAndSave(text: String): Result { - return NetworkDataSource.checkAuth(text).onSuccess { success -> + /* return NetworkDataSource.checkAuth(text).onSuccess { success -> if (success) { codeCache = text - createAuthCode(context = appContext, code = text) + createAuthCode(code = text) } } + } */ + codeCache = text + createAuthCode(code = text) + return Result.success(true) // TODO: ВЕРНУТЬ СЕТЕВОЙ ЗАПРОС } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/source/DataStoreDataSource.kt b/app/src/main/java/ru/myitschool/work/data/source/DataStoreDataSource.kt index 16bd7ee..aaa03ce 100644 --- a/app/src/main/java/ru/myitschool/work/data/source/DataStoreDataSource.kt +++ b/app/src/main/java/ru/myitschool/work/data/source/DataStoreDataSource.kt @@ -1,26 +1,34 @@ package ru.myitschool.work.data.source import android.content.Context +import android.util.Log +import androidx.compose.material3.rememberTimePickerState import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import ru.myitschool.work.App import ru.myitschool.work.core.OurConstants.DS_AUTH_KEY + val Context.dataStore: DataStore by preferencesDataStore(name = "auth") val AUTH_KEY = stringPreferencesKey(DS_AUTH_KEY) object DataStoreDataSource { - fun authFlow(context : Context): Flow = context.dataStore.data.map { preferences -> - (preferences[AUTH_KEY] ?: 0).toString() + fun authFlow(): Flow { + Log.d("AnnaKonda", "Code is checking") + return App.context.dataStore.data.map { preferences -> + (preferences[AUTH_KEY] ?: 0).toString() + } } - // TODO: разобраться с контекстом - suspend fun createAuthCode (context : Context, code : String) { - context.dataStore.updateData { + + suspend fun createAuthCode(code: String) { + App.context.dataStore.updateData { it.toMutablePreferences().also { preferences -> preferences[AUTH_KEY] = code + Log.d("AnnaKonda", "Code added to ds") } } } diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt index 54b156d..2efc340 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt @@ -8,12 +8,15 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.ui.Modifier +import ru.myitschool.work.App +import ru.myitschool.work.data.source.DataStoreDataSource.authFlow import ru.myitschool.work.ui.screen.AppNavHost import ru.myitschool.work.ui.theme.WorkTheme class RootActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + App.context = applicationContext enableEdgeToEdge() setContent { WorkTheme { diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt b/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt index 7890fab..e969861 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt @@ -11,10 +11,12 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import ru.myitschool.work.data.source.DataStoreDataSource.authFlow import ru.myitschool.work.ui.nav.AuthScreenDestination import ru.myitschool.work.ui.nav.BookScreenDestination import ru.myitschool.work.ui.nav.MainScreenDestination import ru.myitschool.work.ui.screen.auth.AuthScreen +import ru.myitschool.work.ui.screen.auth.AuthViewModel import ru.myitschool.work.ui.screen.book.BookScreen import ru.myitschool.work.ui.screen.main.MainScreen diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthIntent.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthIntent.kt index 74f200a..632f50d 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthIntent.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthIntent.kt @@ -3,4 +3,5 @@ package ru.myitschool.work.ui.screen.auth sealed interface AuthIntent { data class Send(val text: String): AuthIntent data class TextInput(val text: String): AuthIntent + object CheckLogIntent: AuthIntent } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt index 845e8ab..98fcc85 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt @@ -39,13 +39,13 @@ fun AuthScreen( navController: NavController ) { val state by viewModel.uiState.collectAsState() + viewModel.onIntent(AuthIntent.CheckLogIntent) LaunchedEffect(Unit) { viewModel.actionFlow.collect { navController.navigate(MainScreenDestination) } } - Column( modifier = Modifier .fillMaxSize() @@ -65,6 +65,9 @@ fun AuthScreen( modifier = Modifier.size(64.dp) ) } + is AuthState.LoggedIn -> { + navController.navigate(MainScreenDestination) + } } } } @@ -90,7 +93,7 @@ private fun Content( Button( modifier = Modifier.testTag(TestIds.Auth.SIGN_BUTTON).fillMaxWidth(), onClick = { - if (!inputText.isEmpty() || inputText.length == 4 || inputText.matches(Regex(SHABLON))){ + if (!inputText.isEmpty() && inputText.length == 4 && inputText.matches(Regex(SHABLON))){ viewModel.onIntent(AuthIntent.Send(inputText)) } }, diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthState.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthState.kt index a06ba76..7af8dda 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthState.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthState.kt @@ -3,4 +3,5 @@ package ru.myitschool.work.ui.screen.auth sealed interface AuthState { object Loading: AuthState object Data: AuthState + object LoggedIn: AuthState } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt index 4f5ea07..c99dda7 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt @@ -1,5 +1,6 @@ package ru.myitschool.work.ui.screen.auth +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers @@ -11,6 +12,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import ru.myitschool.work.data.repo.AuthRepository +import ru.myitschool.work.data.source.DataStoreDataSource.authFlow import ru.myitschool.work.domain.auth.CheckAndSaveAuthCodeUseCase class AuthViewModel : ViewModel() { @@ -28,7 +30,7 @@ class AuthViewModel : ViewModel() { _uiState.update { AuthState.Loading } checkAndSaveAuthCodeUseCase.invoke(intent.text).fold( onSuccess = { - // TODO: Поведение при успехе + _uiState.update { AuthState.LoggedIn } }, onFailure = { error -> error.printStackTrace() @@ -40,6 +42,20 @@ class AuthViewModel : ViewModel() { } } is AuthIntent.TextInput -> Unit + is AuthIntent.CheckLogIntent -> { + viewModelScope.launch { + _uiState.update { AuthState.Loading } + authFlow().collect { + Log.d("AnnaKonda", it) + if (it != "0"){ + _uiState.update { AuthState.LoggedIn } + } else { + _uiState.update { AuthState.Data } + } + } + } + } } } + } \ No newline at end of file