WIP creacion de cuenta.
* creacion de cuenta completado * manda a home despues de haber guardado la sesion
This commit is contained in:
parent
1da51e223e
commit
e1235896bb
@ -63,4 +63,9 @@ class AuthRepositoryImpl @Inject constructor(
|
||||
emit(userIdSetting.getUserId())
|
||||
}
|
||||
|
||||
override suspend fun setToken(sessionDto: AuthTokenDto) {
|
||||
tokenStorage.storeToken(sessionDto)
|
||||
userIdSetting.setUserId(sessionDto.userId)
|
||||
}
|
||||
|
||||
}
|
||||
@ -9,5 +9,6 @@ interface AuthRepository {
|
||||
fun logout(): Flow<Boolean>
|
||||
fun getCurrentToken(): AuthTokenDto?
|
||||
fun getUserId(): Flow<Int?>
|
||||
suspend fun setToken(sessionDto: AuthTokenDto)
|
||||
|
||||
}
|
||||
@ -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(
|
||||
|
||||
@ -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())))
|
||||
}
|
||||
|
||||
@ -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?
|
||||
)
|
||||
@ -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?
|
||||
)
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user