58 lines
1.9 KiB
Kotlin
58 lines
1.9 KiB
Kotlin
package auth.presentation
|
|
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.viewModelScope
|
|
import auth.domain.repository.AuthRepository
|
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
import kotlinx.coroutines.flow.MutableStateFlow
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
import kotlinx.coroutines.flow.asStateFlow
|
|
import kotlinx.coroutines.flow.update
|
|
import kotlinx.coroutines.launch
|
|
import javax.inject.Inject
|
|
|
|
data class AuthState(
|
|
val isLoading: Boolean = false,
|
|
val error: String? = null,
|
|
val isAuthenticated: Boolean = false
|
|
)
|
|
|
|
@HiltViewModel
|
|
class AuthViewModel @Inject constructor(
|
|
private val repository: AuthRepository
|
|
) : ViewModel() {
|
|
|
|
private val _state = MutableStateFlow(AuthState(isAuthenticated = repository.isAuthenticated()))
|
|
val state: StateFlow<AuthState> = _state.asStateFlow()
|
|
|
|
fun checkAuth() {
|
|
_state.update { it.copy(isAuthenticated = repository.isAuthenticated()) }
|
|
}
|
|
|
|
fun login(userName: String, password: String) {
|
|
viewModelScope.launch {
|
|
_state.update { it.copy(isLoading = true, error = null) }
|
|
repository.login(userName, password)
|
|
.onSuccess {
|
|
_state.update { it.copy(isLoading = false, isAuthenticated = true) }
|
|
}
|
|
.onFailure { e ->
|
|
_state.update { it.copy(isLoading = false, error = e.message) }
|
|
}
|
|
}
|
|
}
|
|
|
|
fun register(userName: String, password: String) {
|
|
viewModelScope.launch {
|
|
_state.update { it.copy(isLoading = true, error = null) }
|
|
repository.register(userName, password)
|
|
.onSuccess {
|
|
_state.update { it.copy(isLoading = false, isAuthenticated = true) }
|
|
}
|
|
.onFailure { e ->
|
|
_state.update { it.copy(isLoading = false, error = e.message) }
|
|
}
|
|
}
|
|
}
|
|
}
|