main #6

Closed
student-20690 wants to merge 20 commits from (deleted):main into main
8 changed files with 48 additions and 11 deletions
Showing only changes of commit 474b282fbb - Show all commits

View File

@@ -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<Boolean> {
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: ВЕРНУТЬ СЕТЕВОЙ ЗАПРОС
}
}

View File

@@ -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<Preferences> by preferencesDataStore(name = "auth")
val AUTH_KEY = stringPreferencesKey(DS_AUTH_KEY)
object DataStoreDataSource {
fun authFlow(context : Context): Flow<String> = context.dataStore.data.map { preferences ->
fun authFlow(): Flow<String> {
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")
}
}
}

View File

@@ -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 {

View File

@@ -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

View File

@@ -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
}

View File

@@ -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))
}
},

View File

@@ -3,4 +3,5 @@ package ru.myitschool.work.ui.screen.auth
sealed interface AuthState {
object Loading: AuthState
object Data: AuthState
object LoggedIn: AuthState
}

View File

@@ -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 }
}
}
}
}
}
}
}