WIP creacion de cuenta.

* creacion de cuenta completado
* manda a home despues de haber guardado la sesion
This commit is contained in:
Erik Everardo 2023-11-19 01:19:23 -06:00
parent 1da51e223e
commit e1235896bb
8 changed files with 88 additions and 11 deletions

View File

@ -63,4 +63,9 @@ class AuthRepositoryImpl @Inject constructor(
emit(userIdSetting.getUserId())
}
override suspend fun setToken(sessionDto: AuthTokenDto) {
tokenStorage.storeToken(sessionDto)
userIdSetting.setUserId(sessionDto.userId)
}
}

View File

@ -9,5 +9,6 @@ interface AuthRepository {
fun logout(): Flow<Boolean>
fun getCurrentToken(): AuthTokenDto?
fun getUserId(): Flow<Int?>
suspend fun setToken(sessionDto: AuthTokenDto)
}

View File

@ -5,6 +5,7 @@ import com.isolaatti.sign_up.data.dto.DataDto
import com.isolaatti.sign_up.data.dto.NameAvailabilityDto
import com.isolaatti.sign_up.data.dto.ResultDto
import com.isolaatti.sign_up.data.dto.SignUpWithCodeDto
import com.isolaatti.sign_up.data.dto.SignUpWithCodeResultDto
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.GET
@ -33,7 +34,7 @@ interface SignUpApi {
@Header("clientId") apiClientId: String,
@Header("clientSecret") apiSecret: String,
@Body dto: SignUpWithCodeDto
): Call<ResultDto>
): Call<SignUpWithCodeResultDto>
@GET("usernames/check")
fun checkNameAvailability(

View File

@ -6,6 +6,7 @@ import com.isolaatti.sign_up.data.dto.SignUpWithCodeDto
import com.isolaatti.sign_up.domain.SignUpRepository
import com.isolaatti.sign_up.domain.entity.GetCodeResult
import com.isolaatti.sign_up.domain.entity.SignUpResult
import com.isolaatti.sign_up.domain.entity.SignUpResultCode
import com.isolaatti.utils.Resource
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
@ -57,7 +58,7 @@ class SignUpRepositoryImpl @Inject constructor(private val signUpApi: SignUpApi)
SignUpWithCodeDto(username, password, displayName, code)
).awaitResponse()
if(response.isSuccessful){
response.body()?.let { emit(Resource.Success(SignUpResult.valueOf(it.result)))}
response.body()?.let { emit(Resource.Success(SignUpResult(SignUpResultCode.valueOf(it.accountMakingResult), it.session)))}
} else {
emit(Resource.Error(Resource.Error.mapErrorCode(response.code())))
}

View File

@ -0,0 +1,8 @@
package com.isolaatti.sign_up.data.dto
import com.isolaatti.auth.data.remote.AuthTokenDto
data class SignUpWithCodeResultDto(
val accountMakingResult: String,
val session: AuthTokenDto?
)

View File

@ -1,5 +1,12 @@
package com.isolaatti.sign_up.domain.entity
enum class SignUpResult {
import com.isolaatti.auth.data.remote.AuthTokenDto
enum class SignUpResultCode {
EmailNotAvailable, ValidationProblems, Ok, Error, UsernameUnavailable
}
}
data class SignUpResult(
val resultCode: SignUpResultCode,
val session: AuthTokenDto?
)

View File

@ -3,7 +3,8 @@ package com.isolaatti.sign_up.presentation
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.isolaatti.sign_up.data.SignUpApi
import com.isolaatti.auth.data.remote.AuthTokenDto
import com.isolaatti.auth.domain.AuthRepository
import com.isolaatti.sign_up.domain.SignUpRepository
import com.isolaatti.sign_up.domain.entity.SignUpResult
import com.isolaatti.utils.Resource
@ -13,16 +14,21 @@ import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
@HiltViewModel
class MakeAccountViewModel @Inject constructor(private val signUpRepository: SignUpRepository) : ViewModel() {
class MakeAccountViewModel @Inject constructor(
private val signUpRepository: SignUpRepository,
private val authRepository: AuthRepository
) : ViewModel() {
val formIsValid: MutableLiveData<Boolean> = MutableLiveData(false)
val passwordIsValid: MutableLiveData<Boolean> = MutableLiveData()
var usernameIsValid: MutableLiveData<Boolean> = MutableLiveData()
val displayNameIsValid: MutableLiveData<Boolean> = MutableLiveData()
val signUpResult: MutableLiveData<Resource<SignUpResult>?> = MutableLiveData()
val sessionSaved: MutableLiveData<Boolean?> = MutableLiveData()
var code: String? = null
private fun validateForm() {
@ -78,4 +84,13 @@ class MakeAccountViewModel @Inject constructor(private val signUpRepository: Sig
}.flowOn(Dispatchers.IO).launchIn(this)
}
}
fun saveSession(sessionDto: AuthTokenDto) {
viewModelScope.launch {
withContext(Dispatchers.IO) {
authRepository.setToken(sessionDto)
sessionSaved.postValue(true)
}
}
}
}

View File

@ -1,7 +1,9 @@
package com.isolaatti.sign_up.ui
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -14,6 +16,8 @@ import androidx.lifecycle.lifecycleScope
import com.isolaatti.BuildConfig
import com.isolaatti.R
import com.isolaatti.databinding.FragmentMakeAccountBinding
import com.isolaatti.home.HomeActivity
import com.isolaatti.sign_up.domain.entity.SignUpResultCode
import com.isolaatti.sign_up.presentation.MakeAccountViewModel
import com.isolaatti.sign_up.presentation.SignUpViewModel
import com.isolaatti.utils.Resource
@ -101,19 +105,54 @@ class MakeAccountFragment : Fragment() {
}
}
viewModel.signUpResult.observe(viewLifecycleOwner) {
viewModel.signUpResult.observe(viewLifecycleOwner) { resource ->
when(it) {
when(resource) {
is Resource.Error -> {}
is Resource.Loading -> {}
is Resource.Success -> {
when(resource.data?.resultCode) {
SignUpResultCode.EmailNotAvailable -> {
showNotAvailableEmailMessage()
viewModel.signUpResult.value = null
}
SignUpResultCode.ValidationProblems -> {
showValidationProblemsMessage()
viewModel.signUpResult.value = null
}
SignUpResultCode.UsernameUnavailable -> {
showUnavailableMessage()
viewModel.signUpResult.value = null
}
SignUpResultCode.Ok -> {
resource.data.session?.let { viewModel.saveSession(it) }
viewModel.signUpResult.value = null
}
else -> showErrorMessage()
}
}
null -> {}
}
}
viewModel.signUpResult.value = null
viewModel.sessionSaved.observe(viewLifecycleOwner) {
Log.d("***", "sessionSaved")
if(it == true) {
goToHome()
viewModel.sessionSaved.value = null
}
}
}
private fun showNotAvailableEmailMessage() {}
private fun showValidationProblemsMessage() {}
private fun showErrorMessage() {}
private fun showUnavailableMessage() {}
private fun goToHome() {
val intent = Intent(requireContext(), HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}