From 5c3e7bcdee624abe6311125a4349fe4e5de837d4 Mon Sep 17 00:00:00 2001 From: Nymos Date: Wed, 19 Feb 2025 11:57:45 +0300 Subject: [PATCH] Integrate shared preferences Half-done user info receiving --- .../com/nto/data/repository/DataRepository.kt | 3 +++ .../nto/data/repository/DataRepositoryImpl.kt | 23 ++++++++++++++++--- .../nto/domain/repository/DomainRepository.kt | 3 +++ .../domain/repository/DomainRepositoryImpl.kt | 12 ++++++++++ .../com/nto/domain/usecase/LoginUseCase.kt | 1 + .../com/nto/domain/usecase/ProfileUseCase.kt | 10 ++++++++ .../screens/profileScreen/ProfileViewModel.kt | 16 ++++++++++++- 7 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 domain/src/main/java/com/nto/domain/usecase/ProfileUseCase.kt diff --git a/data/src/main/java/com/nto/data/repository/DataRepository.kt b/data/src/main/java/com/nto/data/repository/DataRepository.kt index b6cfa73..886f807 100644 --- a/data/src/main/java/com/nto/data/repository/DataRepository.kt +++ b/data/src/main/java/com/nto/data/repository/DataRepository.kt @@ -4,4 +4,7 @@ import com.nto.data.models.LoginResult interface DataRepository { suspend fun auth(login: String, password: String): LoginResult + suspend fun saveToken(token: String) + suspend fun getToken(): String + suspend fun getInfo() } \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt index f324921..0d66378 100644 --- a/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt +++ b/data/src/main/java/com/nto/data/repository/DataRepositoryImpl.kt @@ -1,17 +1,34 @@ package com.nto.data.repository +import android.content.Context +import android.content.Context.MODE_PRIVATE import com.nto.data.models.LoginResult import com.nto.data.utils.Provider +import dagger.hilt.android.qualifiers.ApplicationContext import okhttp3.Credentials import javax.inject.Inject -class DataRepositoryImpl @Inject constructor() : DataRepository { +class DataRepositoryImpl @Inject constructor(@ApplicationContext private val context: Context) : + DataRepository { override suspend fun auth(login: String, password: String): LoginResult { + val token = Credentials.basic(login, password) val result = Provider.provideRetrofit().auth( - Credentials.basic(login, password) + token ).execute() - + if (result.isSuccessful) saveToken(token) return LoginResult(result.isSuccessful, result.message()) } + override suspend fun saveToken(token: String) { + context.getSharedPreferences("auth", MODE_PRIVATE).edit().putString("token", token).apply() + } + + override suspend fun getToken(): String { + return context.getSharedPreferences("auth", MODE_PRIVATE).getString("token", "")!! + } + + override suspend fun getInfo(){ + + } + } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt index ce85d79..6198c4a 100644 --- a/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepository.kt @@ -4,4 +4,7 @@ import com.nto.data.models.LoginResult interface DomainRepository { suspend fun auth(email: String, password: String): LoginResult + suspend fun saveToken(token: String) + suspend fun getToken(): String + suspend fun getInfo() } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt index 62bfef4..42dbbe9 100644 --- a/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt +++ b/domain/src/main/java/com/nto/domain/repository/DomainRepositoryImpl.kt @@ -17,4 +17,16 @@ class DomainRepositoryImpl @Inject constructor(private val dataRepositoryImpl: D LoginResult(false, "IO exception was thrown: ${e.message}") } } + + override suspend fun saveToken(token: String) { + dataRepositoryImpl.saveToken(token) + } + + override suspend fun getToken(): String { + return dataRepositoryImpl.getToken() + } + + override suspend fun getInfo(){ + val result = dataRepositoryImpl.getInfo() + } } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt b/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt index 41aa8de..37d4244 100644 --- a/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt +++ b/domain/src/main/java/com/nto/domain/usecase/LoginUseCase.kt @@ -12,4 +12,5 @@ class LoginUseCase @Inject constructor(private val domainRepositoryImpl: DomainR suspend fun auth(email: String, password: String): LoginResult { return domainRepositoryImpl.auth(email, password) } + } \ No newline at end of file diff --git a/domain/src/main/java/com/nto/domain/usecase/ProfileUseCase.kt b/domain/src/main/java/com/nto/domain/usecase/ProfileUseCase.kt new file mode 100644 index 0000000..1895e1c --- /dev/null +++ b/domain/src/main/java/com/nto/domain/usecase/ProfileUseCase.kt @@ -0,0 +1,10 @@ +package com.nto.domain.usecase + +import com.nto.domain.repository.DomainRepositoryImpl +import javax.inject.Inject + +class ProfileUseCase @Inject constructor(private val domainRepositoryImpl: DomainRepositoryImpl) { + suspend fun getInfo(){ + domainRepositoryImpl.getInfo() + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt index cc7a270..384b7d2 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt @@ -1,21 +1,31 @@ package com.nto.presentation.screens.profileScreen import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import androidx.navigation.NavController import com.nto.data.utils.Destinations +import com.nto.domain.usecase.ProfileUseCase import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class ProfileViewModel @Inject constructor() : ViewModel() { +class ProfileViewModel @Inject constructor(private val useCase: ProfileUseCase) : ViewModel() { private val _state = MutableStateFlow(ProfileState()) val state: StateFlow get() = _state.asStateFlow() + fun updateInfo(){ + viewModelScope.launch(Dispatchers.IO) { + val result = useCase.getInfo() + } + } + fun admin(navController: NavController) { //TODO } @@ -31,4 +41,8 @@ class ProfileViewModel @Inject constructor() : ViewModel() { fun option(navController: NavController) { navController.navigate(Destinations.Options.toString()) } + + init { + + } } \ No newline at end of file