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())
|
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 logout(): Flow<Boolean>
|
||||||
fun getCurrentToken(): AuthTokenDto?
|
fun getCurrentToken(): AuthTokenDto?
|
||||||
fun getUserId(): Flow<Int?>
|
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.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(
|
||||||
|
|||||||
@ -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())))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
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?
|
||||||
|
)
|
||||||
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user