From 363da8fde10deb9296ab0eda1cee04b37f0f1611 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 7 Dec 2023 03:56:21 +0900 Subject: [PATCH] =?UTF-8?q?[MOD/#19]=20enqueue=EB=A1=9C=20=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=20=ED=96=88=EB=8D=98=20=EA=B2=83=EC=9D=84=20=EC=BD=94?= =?UTF-8?q?=EB=A3=A8=ED=8B=B4=20suspend=EB=A1=9C=20=EB=8C=80=EC=B2=B4=20-?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=84=B1=EA=B3=B5,=20response?= =?UTF-8?q?=20=EB=B0=9B=EC=95=84=EC=98=A4=EB=8A=94=20=EA=B1=B4=20=EB=AA=BB?= =?UTF-8?q?=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/service/AuthService.kt | 2 +- .../presentation/auth/LoginActivity.kt | 36 ++++++----- .../presentation/auth/LoginViewModel.kt | 62 +++++++------------ 3 files changed, 45 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/data/service/AuthService.kt b/app/src/main/java/org/sopt/dosopttemplate/data/service/AuthService.kt index 6da6fd0..9f2f7cd 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/data/service/AuthService.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/data/service/AuthService.kt @@ -16,7 +16,7 @@ interface AuthService { // 로그인 @POST("api/v1/members/sign-in") - fun login( + suspend fun login( @Body request: RequestLoginDto, ): Call } diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginActivity.kt index 0894d71..3328716 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginActivity.kt @@ -8,12 +8,15 @@ import android.view.MotionEvent import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity +import org.sopt.dosopttemplate.R import org.sopt.dosopttemplate.data.User import org.sopt.dosopttemplate.databinding.ActivityLoginBinding import org.sopt.dosopttemplate.di.UserSharedPreferences import org.sopt.dosopttemplate.presentation.main.BnvActivity import org.sopt.dosopttemplate.util.BackPressedUtil +import org.sopt.dosopttemplate.util.UiState import org.sopt.dosopttemplate.util.hideKeyboard +import org.sopt.dosopttemplate.util.showShortSnackBar class LoginActivity : AppCompatActivity() { private lateinit var binding: ActivityLoginBinding @@ -48,26 +51,31 @@ class LoginActivity : AppCompatActivity() { val inputId = binding.etSignupId.text.toString() val inputPw = binding.etSignupPw.text.toString() - loginViewModel.loginUser(inputId, inputPw, this) + loginViewModel.loginUser(inputId, inputPw) loginViewModel.loginResult.observe( this, - ) { loginSuccessful -> - if (loginSuccessful) { - // showShortToast("getString(R.string.login_success)") - - if (binding.cbLoginAutologin.isChecked) { - signUpUser?.let { - loginViewModel.saveUserForAutoLogin(this, it) + ) { uiState -> + when (uiState) { + is UiState.Success -> { + if (binding.cbLoginAutologin.isChecked) { + signUpUser?.let { + loginViewModel.saveUserForAutoLogin(this, it) + } } + val intent = Intent(this, BnvActivity::class.java) + intent.putExtra("signUpUser", signUpUser) + startActivity(intent) + finish() + } + + is UiState.Failure -> { + //showShortSnackBar(binding.root, "로그인 성공, 유저 아이디 : ${loginViewModel.}") } - val intent = Intent(this, BnvActivity::class.java) - intent.putExtra("signUpUser", signUpUser) - startActivity(intent) - finish() - } else { - // showShortSnackBar(binding.root, getString(R.string.login_fail)) + is UiState.Loading -> { + showShortSnackBar(binding.root, "로딩중") + } } } } diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginViewModel.kt index b0f3e92..47f6ba3 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginViewModel.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/auth/LoginViewModel.kt @@ -1,56 +1,38 @@ package org.sopt.dosopttemplate.presentation.auth import android.content.Context -import android.widget.Toast import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.launch import org.sopt.dosopttemplate.data.User -import org.sopt.dosopttemplate.data.remote.ServicePool.authService +import org.sopt.dosopttemplate.data.remote.ServicePool import org.sopt.dosopttemplate.data.remote.request.RequestLoginDto import org.sopt.dosopttemplate.data.remote.response.ResponseLoginDto import org.sopt.dosopttemplate.di.UserSharedPreferences +import org.sopt.dosopttemplate.util.UiState import retrofit2.Call -import retrofit2.Response class LoginViewModel : ViewModel() { - private val _loginResult = MutableLiveData() - val loginResult: LiveData get() = _loginResult - - fun loginUser(inputId: String, inputPw: String, context: Context) { -// _loginResult.value = -// signUpUser != null && signUpUser.userId == inputId && signUpUser.userPw == inputPw - - authService.login(RequestLoginDto(inputId, inputPw)) - .enqueue(object : retrofit2.Callback { - override fun onResponse( - call: Call, - response: Response, - ) { - if (response.isSuccessful) { - val data: ResponseLoginDto = - response.body() ?: ResponseLoginDto(-1, "null", "null") - val userId = data.id - - Toast.makeText( - context, - "로그인이 성공하였고 유저의 ID는 $userId 입니둥", - Toast.LENGTH_SHORT, - ).show() - _loginResult.value = true - } - } - - override fun onFailure(call: Call, t: Throwable) { - Toast.makeText( - context, - "ㅜ ㅜ 서버 에러 발생 ㅜ ㅜ", - Toast.LENGTH_SHORT, - ).show() - - _loginResult.value = false - } - }) + private val _loginResult = MutableLiveData>() + val loginResult: LiveData> get() = _loginResult + + fun loginUser(inputId: String, inputPw: String) = viewModelScope.launch { + _loginResult.value = UiState.Loading + lateinit var getUserInfo: Call + + runCatching { + ServicePool.authService.login( + RequestLoginDto(inputId, inputPw), + ) + }.onSuccess { + // getUserInfo = it + }.onFailure { + _loginResult.value = UiState.Failure(it.message.toString()) + } + + _loginResult.value = UiState.Success(true) } fun saveUserForAutoLogin(context: Context, signUpUser: User) {