From e1235896bb381d3c73019ea58776182df8d10770 Mon Sep 17 00:00:00 2001 From: Erik Everardo Date: Sun, 19 Nov 2023 01:19:23 -0600 Subject: [PATCH] WIP creacion de cuenta. * creacion de cuenta completado * manda a home despues de haber guardado la sesion --- .../isolaatti/auth/data/AuthRepositoryImpl.kt | 5 ++ .../isolaatti/auth/domain/AuthRepository.kt | 1 + .../com/isolaatti/sign_up/data/SignUpApi.kt | 3 +- .../sign_up/data/SignUpRepositoryImpl.kt | 3 +- .../data/dto/SignUpWithCodeResultDto.kt | 8 +++ .../sign_up/domain/entity/SignUpResult.kt | 11 ++++- .../presentation/MakeAccountViewModel.kt | 19 ++++++- .../sign_up/ui/MakeAccountFragment.kt | 49 +++++++++++++++++-- 8 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/isolaatti/sign_up/data/dto/SignUpWithCodeResultDto.kt diff --git a/app/src/main/java/com/isolaatti/auth/data/AuthRepositoryImpl.kt b/app/src/main/java/com/isolaatti/auth/data/AuthRepositoryImpl.kt index a1d8754..51114cf 100644 --- a/app/src/main/java/com/isolaatti/auth/data/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/isolaatti/auth/data/AuthRepositoryImpl.kt @@ -63,4 +63,9 @@ class AuthRepositoryImpl @Inject constructor( emit(userIdSetting.getUserId()) } + override suspend fun setToken(sessionDto: AuthTokenDto) { + tokenStorage.storeToken(sessionDto) + userIdSetting.setUserId(sessionDto.userId) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/auth/domain/AuthRepository.kt b/app/src/main/java/com/isolaatti/auth/domain/AuthRepository.kt index c7a3e37..cf6db3b 100644 --- a/app/src/main/java/com/isolaatti/auth/domain/AuthRepository.kt +++ b/app/src/main/java/com/isolaatti/auth/domain/AuthRepository.kt @@ -9,5 +9,6 @@ interface AuthRepository { fun logout(): Flow fun getCurrentToken(): AuthTokenDto? fun getUserId(): Flow + suspend fun setToken(sessionDto: AuthTokenDto) } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/sign_up/data/SignUpApi.kt b/app/src/main/java/com/isolaatti/sign_up/data/SignUpApi.kt index 87cc538..a8dc7c2 100644 --- a/app/src/main/java/com/isolaatti/sign_up/data/SignUpApi.kt +++ b/app/src/main/java/com/isolaatti/sign_up/data/SignUpApi.kt @@ -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 + ): Call @GET("usernames/check") fun checkNameAvailability( diff --git a/app/src/main/java/com/isolaatti/sign_up/data/SignUpRepositoryImpl.kt b/app/src/main/java/com/isolaatti/sign_up/data/SignUpRepositoryImpl.kt index 097dac6..88e8aa3 100644 --- a/app/src/main/java/com/isolaatti/sign_up/data/SignUpRepositoryImpl.kt +++ b/app/src/main/java/com/isolaatti/sign_up/data/SignUpRepositoryImpl.kt @@ -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()))) } diff --git a/app/src/main/java/com/isolaatti/sign_up/data/dto/SignUpWithCodeResultDto.kt b/app/src/main/java/com/isolaatti/sign_up/data/dto/SignUpWithCodeResultDto.kt new file mode 100644 index 0000000..5db0422 --- /dev/null +++ b/app/src/main/java/com/isolaatti/sign_up/data/dto/SignUpWithCodeResultDto.kt @@ -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? +) \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/sign_up/domain/entity/SignUpResult.kt b/app/src/main/java/com/isolaatti/sign_up/domain/entity/SignUpResult.kt index a77d0e3..4fa59c2 100644 --- a/app/src/main/java/com/isolaatti/sign_up/domain/entity/SignUpResult.kt +++ b/app/src/main/java/com/isolaatti/sign_up/domain/entity/SignUpResult.kt @@ -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 -} \ No newline at end of file +} + +data class SignUpResult( + val resultCode: SignUpResultCode, + val session: AuthTokenDto? +) \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/sign_up/presentation/MakeAccountViewModel.kt b/app/src/main/java/com/isolaatti/sign_up/presentation/MakeAccountViewModel.kt index 76f86b6..9f94394 100644 --- a/app/src/main/java/com/isolaatti/sign_up/presentation/MakeAccountViewModel.kt +++ b/app/src/main/java/com/isolaatti/sign_up/presentation/MakeAccountViewModel.kt @@ -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 = MutableLiveData(false) val passwordIsValid: MutableLiveData = MutableLiveData() var usernameIsValid: MutableLiveData = MutableLiveData() val displayNameIsValid: MutableLiveData = MutableLiveData() val signUpResult: MutableLiveData?> = MutableLiveData() + val sessionSaved: MutableLiveData = 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) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/sign_up/ui/MakeAccountFragment.kt b/app/src/main/java/com/isolaatti/sign_up/ui/MakeAccountFragment.kt index 9a1f6d3..76916d0 100644 --- a/app/src/main/java/com/isolaatti/sign_up/ui/MakeAccountFragment.kt +++ b/app/src/main/java/com/isolaatti/sign_up/ui/MakeAccountFragment.kt @@ -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) + } } \ No newline at end of file