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()) 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 logout(): Flow<Boolean>
fun getCurrentToken(): AuthTokenDto? fun getCurrentToken(): AuthTokenDto?
fun getUserId(): Flow<Int?> 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.NameAvailabilityDto
import com.isolaatti.sign_up.data.dto.ResultDto import com.isolaatti.sign_up.data.dto.ResultDto
import com.isolaatti.sign_up.data.dto.SignUpWithCodeDto import com.isolaatti.sign_up.data.dto.SignUpWithCodeDto
import com.isolaatti.sign_up.data.dto.SignUpWithCodeResultDto
import retrofit2.Call import retrofit2.Call
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.GET import retrofit2.http.GET
@ -33,7 +34,7 @@ interface SignUpApi {
@Header("clientId") apiClientId: String, @Header("clientId") apiClientId: String,
@Header("clientSecret") apiSecret: String, @Header("clientSecret") apiSecret: String,
@Body dto: SignUpWithCodeDto @Body dto: SignUpWithCodeDto
): Call<ResultDto> ): Call<SignUpWithCodeResultDto>
@GET("usernames/check") @GET("usernames/check")
fun checkNameAvailability( 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.SignUpRepository
import com.isolaatti.sign_up.domain.entity.GetCodeResult import com.isolaatti.sign_up.domain.entity.GetCodeResult
import com.isolaatti.sign_up.domain.entity.SignUpResult import com.isolaatti.sign_up.domain.entity.SignUpResult
import com.isolaatti.sign_up.domain.entity.SignUpResultCode
import com.isolaatti.utils.Resource import com.isolaatti.utils.Resource
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
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) SignUpWithCodeDto(username, password, displayName, code)
).awaitResponse() ).awaitResponse()
if(response.isSuccessful){ 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 { } else {
emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) 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 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 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.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope 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.SignUpRepository
import com.isolaatti.sign_up.domain.entity.SignUpResult import com.isolaatti.sign_up.domain.entity.SignUpResult
import com.isolaatti.utils.Resource import com.isolaatti.utils.Resource
@ -13,16 +14,21 @@ import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @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 formIsValid: MutableLiveData<Boolean> = MutableLiveData(false)
val passwordIsValid: MutableLiveData<Boolean> = MutableLiveData() val passwordIsValid: MutableLiveData<Boolean> = MutableLiveData()
var usernameIsValid: MutableLiveData<Boolean> = MutableLiveData() var usernameIsValid: MutableLiveData<Boolean> = MutableLiveData()
val displayNameIsValid: MutableLiveData<Boolean> = MutableLiveData() val displayNameIsValid: MutableLiveData<Boolean> = MutableLiveData()
val signUpResult: MutableLiveData<Resource<SignUpResult>?> = MutableLiveData() val signUpResult: MutableLiveData<Resource<SignUpResult>?> = MutableLiveData()
val sessionSaved: MutableLiveData<Boolean?> = MutableLiveData()
var code: String? = null var code: String? = null
private fun validateForm() { private fun validateForm() {
@ -78,4 +84,13 @@ class MakeAccountViewModel @Inject constructor(private val signUpRepository: Sig
}.flowOn(Dispatchers.IO).launchIn(this) }.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 package com.isolaatti.sign_up.ui
import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -14,6 +16,8 @@ import androidx.lifecycle.lifecycleScope
import com.isolaatti.BuildConfig import com.isolaatti.BuildConfig
import com.isolaatti.R import com.isolaatti.R
import com.isolaatti.databinding.FragmentMakeAccountBinding 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.MakeAccountViewModel
import com.isolaatti.sign_up.presentation.SignUpViewModel import com.isolaatti.sign_up.presentation.SignUpViewModel
import com.isolaatti.utils.Resource 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.Error -> {}
is Resource.Loading -> {} is Resource.Loading -> {}
is Resource.Success -> { 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 -> {} 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)
}
}