From 3941db4fece87de7a596dbdd256e28118a6042e0 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 14 Sep 2023 14:40:07 +0900 Subject: [PATCH 01/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=9C=EB=B2=84=20=ED=86=B5=EC=8B=A0=20dto=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/model/request/RequestLogin.kt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt diff --git a/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt new file mode 100644 index 00000000..323874e3 --- /dev/null +++ b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt @@ -0,0 +1,6 @@ +package com.sopt.geonppang.data.model.request + +data class RequestLogin( + val email: String, + val password: String, +) From 53dfaa0fbf48bb22679d93c612b6dc480a1bb860 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 14 Sep 2023 14:40:50 +0900 Subject: [PATCH 02/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=9C=EB=B2=84=20=ED=86=B5=EC=8B=A0=20POST=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/sopt/geonppang/data/service/AuthService.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt index 387f3e8f..649a4348 100644 --- a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt +++ b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt @@ -4,6 +4,7 @@ import com.sopt.geonppang.data.model.request.RequestSignup import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseSignup import com.sopt.geonppang.data.model.response.ResponseWithdraw +import retrofit2.Response import retrofit2.http.Body import retrofit2.http.DELETE import retrofit2.http.Header @@ -21,4 +22,7 @@ interface AuthService { @POST("auth/logout") suspend fun logout(): ResponseLogout + + @POST("auth/login") + suspend fun login() : Response } From 3e74262a04f95a24e22395c46043c678cbd0e67b Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 14 Sep 2023 15:40:44 +0900 Subject: [PATCH 03/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20datasource,?= =?UTF-8?q?=20repository,=20reposiotryImpl=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/datasource/remote/AuthDataSource.kt | 2 ++ .../com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt | 4 ++++ .../com/sopt/geonppang/domain/repository/AuthRepository.kt | 2 ++ 3 files changed, 8 insertions(+) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt index bda92e33..7852fc4f 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt @@ -3,6 +3,7 @@ package com.sopt.geonppang.data.datasource.remote import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw import com.sopt.geonppang.data.service.AuthService +import retrofit2.Response import javax.inject.Inject class AuthDataSource @Inject constructor( @@ -10,4 +11,5 @@ class AuthDataSource @Inject constructor( ) { suspend fun withdraw(): ResponseWithdraw = authService.withdraw() suspend fun logout(): ResponseLogout = authService.logout() + suspend fun login() : Response = authService.login() } diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index 85b1682d..42e54b4a 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -4,6 +4,7 @@ import com.sopt.geonppang.data.datasource.remote.AuthDataSource import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw import com.sopt.geonppang.domain.repository.AuthRepository +import retrofit2.Response import javax.inject.Inject class AuthRepositoryImpl @Inject constructor( @@ -14,4 +15,7 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun logout(): Result = runCatching { authDataSource.logout() } + + override suspend fun login(): Result> = + runCatching { authDataSource.login() } } diff --git a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt index 1c384853..133aa6da 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt @@ -2,8 +2,10 @@ package com.sopt.geonppang.domain.repository import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw +import retrofit2.Response interface AuthRepository { suspend fun withdraw(): Result suspend fun logout(): Result + suspend fun login() : Result> } From f3ff73c293304eea5ae3fab07185cfd010e62889 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Thu, 14 Sep 2023 16:25:17 +0900 Subject: [PATCH 04/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20Body=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/datasource/remote/AuthDataSource.kt | 3 ++- .../com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt | 5 +++-- .../main/java/com/sopt/geonppang/data/service/AuthService.kt | 5 ++++- .../com/sopt/geonppang/domain/repository/AuthRepository.kt | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt index 7852fc4f..eb4bcaa4 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt @@ -1,5 +1,6 @@ package com.sopt.geonppang.data.datasource.remote +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw import com.sopt.geonppang.data.service.AuthService @@ -11,5 +12,5 @@ class AuthDataSource @Inject constructor( ) { suspend fun withdraw(): ResponseWithdraw = authService.withdraw() suspend fun logout(): ResponseLogout = authService.logout() - suspend fun login() : Response = authService.login() + suspend fun login(requestLogin: RequestLogin) : Response = authService.login(requestLogin) } diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index 42e54b4a..419c2496 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -1,6 +1,7 @@ package com.sopt.geonppang.data.repository import com.sopt.geonppang.data.datasource.remote.AuthDataSource +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw import com.sopt.geonppang.domain.repository.AuthRepository @@ -16,6 +17,6 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun logout(): Result = runCatching { authDataSource.logout() } - override suspend fun login(): Result> = - runCatching { authDataSource.login() } + override suspend fun login(responseLogin: RequestLogin): Result> = + runCatching { authDataSource.login(responseLogin) } } diff --git a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt index 649a4348..4866cfd7 100644 --- a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt +++ b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt @@ -1,5 +1,6 @@ package com.sopt.geonppang.data.service +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.request.RequestSignup import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseSignup @@ -24,5 +25,7 @@ interface AuthService { suspend fun logout(): ResponseLogout @POST("auth/login") - suspend fun login() : Response + suspend fun login( + @Body requestLogin: RequestLogin + ) : Response } diff --git a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt index 133aa6da..6060a54b 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt @@ -1,5 +1,6 @@ package com.sopt.geonppang.domain.repository +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseWithdraw import retrofit2.Response @@ -7,5 +8,5 @@ import retrofit2.Response interface AuthRepository { suspend fun withdraw(): Result suspend fun logout(): Result - suspend fun login() : Result> + suspend fun login(requestLogin: RequestLogin) : Result> } From 5d1e378ccfee6993a38a5ca13a59f7765813ea3f Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:04:46 +0900 Subject: [PATCH 05/27] =?UTF-8?q?[refactor]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=A4=ED=8C=A8=20=EB=B0=94=ED=85=80=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EB=B2=84=ED=8A=BC=20=EC=95=84=EC=9D=B4=EB=94=94=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/dialog_bottom_login_fail.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/dialog_bottom_login_fail.xml b/app/src/main/res/layout/dialog_bottom_login_fail.xml index a468d97c..db7566bb 100644 --- a/app/src/main/res/layout/dialog_bottom_login_fail.xml +++ b/app/src/main/res/layout/dialog_bottom_login_fail.xml @@ -49,7 +49,7 @@ app:layout_constraintTop_toBottomOf="@id/iv_review_writing_success" /> Date: Fri, 15 Sep 2023 02:05:43 +0900 Subject: [PATCH 06/27] =?UTF-8?q?[refactor]=20#141=20authViewModel=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth/AuthViewModel.kt | 28 ++++++++++--------- app/src/main/res/layout/activity_signup.xml | 24 ++++++++-------- .../res/layout/activity_signup_nickname.xml | 8 +++--- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt index 1bc13a8c..0505bc48 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt @@ -6,27 +6,29 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.map import com.sopt.geonppang.data.datasource.local.GPDataStore +import com.sopt.geonppang.domain.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class AuthViewModel @Inject constructor(private val gpDataStore: GPDataStore) : ViewModel() { - val email = MutableLiveData("") - val password = MutableLiveData("") - val password_check = MutableLiveData("") - val nickname = MutableLiveData("") +class AuthViewModel @Inject constructor( +) : ViewModel() { + val inputEmail = MutableLiveData("") + val inputPassword = MutableLiveData("") + val inputPasswordCheck = MutableLiveData("") + val inputNickname = MutableLiveData("") - val isValidEmail: LiveData = email.map { email -> + val isValidEmail: LiveData = inputEmail.map { email -> email.matches(Regex(EMAIL_PATTERN)) /*조건에 만족하는 이메일인지 확인*/ } - val isValidNickname: LiveData = nickname.map { nickname -> + val isValidNickname: LiveData = inputNickname.map { nickname -> nickname.matches(Regex(NICKNAME_PATTERN)) /*조건에 맞는 닉네임인지 확인*/ } - val isValidPassword: LiveData = password.map { password -> + val isValidPassword: LiveData = inputPassword.map { password -> password.matches(Regex(PASSWORD_PATTERN)) /*조건에 맞는 비밀번호인지 확인*/ } @@ -41,22 +43,22 @@ class AuthViewModel @Inject constructor(private val gpDataStore: GPDataStore) : /*다음 버튼 활성화 -> 중복확인이 true 이면 활성화 되어야 함*/ val completeEmail = MediatorLiveData().apply { - addSource(email) { value = checkEmailCondition() } + addSource(inputEmail) { value = checkEmailCondition() } } /*비밀번호 다음 버튼 활성화*/ val completePassword = MediatorLiveData().apply { - addSource(password) { value = isPasswordDoubleCheck() } - addSource(password_check) { value = isPasswordDoubleCheck() } + addSource(inputPassword) { value = isPasswordDoubleCheck() } + addSource(inputPasswordCheck) { value = isPasswordDoubleCheck() } } /*다음 버튼 활성화 -> 중복 확인이 되면 활성화 되어야 함*/ val completeNickname = MediatorLiveData().apply { - addSource(nickname) { value = checkNicknameCondition() } + addSource(inputNickname) { value = checkNicknameCondition() } } private fun isPasswordDoubleCheck(): Boolean { - return password.value.toString() == password_check.value.toString() && !password.value.isNullOrBlank() && !password_check.value.isNullOrBlank() + return inputPassword.value.toString() == inputPasswordCheck.value.toString() && !inputPassword.value.isNullOrBlank() && !inputPasswordCheck.value.isNullOrBlank() } private fun checkEmailCondition(): Boolean { diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml index 4b01981b..31ced5b2 100644 --- a/app/src/main/res/layout/activity_signup.xml +++ b/app/src/main/res/layout/activity_signup.xml @@ -52,7 +52,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="36dp" - android:background="@{!viewModel.email.empty & !viewModel.isValidEmail()? @drawable/background_need_change_status : @drawable/background_normal_status }" + android:background="@{!viewModel.inputEmail.empty & !viewModel.isValidEmail()? @drawable/background_need_change_status : @drawable/background_normal_status }" android:orientation="vertical" app:layout_constraintEnd_toEndOf="@id/tv_input_phrase" app:layout_constraintStart_toStartOf="@id/tv_input_phrase" @@ -70,7 +70,7 @@ android:layout_marginTop="16dp" android:text="@string/tv_email" android:textAppearance="@style/TextAppearance.BodyB2" - android:textColor="@{!viewModel.email.empty & !viewModel.isValidEmail() ? @color/error : @color/gray_400}" + android:textColor="@{!viewModel.inputEmail.empty & !viewModel.isValidEmail() ? @color/error : @color/gray_400}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -85,7 +85,7 @@ android:hint="@string/email_hint" android:inputType="textEmailAddress" android:paddingVertical="5dp" - android:text="@={viewModel.email}" + android:text="@={viewModel.inputEmail}" android:textAppearance="@style/TextAppearance.Headline" android:textColorHint="@color/gray_300" app:layout_constraintBottom_toBottomOf="parent" @@ -117,7 +117,7 @@ + android:textColor="@{!viewModel.inputPassword.empty & !viewModel.isValidPassword() ? @color/error : @color/gray_400}" /> @@ -177,7 +177,7 @@ + android:textColor="@{!viewModel.inputPasswordCheck.empty & !viewModel.completePassword ? @color/error : @color/gray_400}" /> @@ -237,7 +237,7 @@ + android:textColor="@{!viewModel.inputNickname.empty & !viewModel.isValidNickname() ? @color/error : @color/gray_400}" /> @@ -103,7 +103,7 @@ Date: Fri, 15 Sep 2023 02:06:20 +0900 Subject: [PATCH 07/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=A4=ED=8C=A8=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=ED=94=84=EB=9E=98=EA=B7=B8=EB=A8=BC=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/LoginFailBottomDialogFragment.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt new file mode 100644 index 00000000..13a12f48 --- /dev/null +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt @@ -0,0 +1,24 @@ +package com.sopt.geonppang.presentation.login + +import android.os.Bundle +import android.view.View +import com.sopt.geonppang.R +import com.sopt.geonppang.databinding.DialogBottomLoginFailBinding +import com.sopt.geonppang.util.binding.BindingBottomSheetDialogFragment + +class LoginFailBottomDialogFragment : BindingBottomSheetDialogFragment( + R.layout.dialog_bottom_login_fail) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.lifecycleOwner = this.viewLifecycleOwner + + addListeners() + } + + private fun addListeners() { + binding.btnLoginFailConfirm.setOnClickListener { + dismiss() + requireActivity().finish() + } + } +} \ No newline at end of file From 8cd03fd274b5fbbb1a93f858f4847b374c46173a Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:16:48 +0900 Subject: [PATCH 08/27] =?UTF-8?q?[refactor]=20#141=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=95=A1=ED=8B=B0=EB=B9=84=ED=8B=B0=20=EB=B0=94?= =?UTF-8?q?=ED=85=80=EC=8B=9C=ED=8A=B8=20=EB=9E=98=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/auth/SignUpNicknameActivity.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt index 25d85dd1..bb7942d2 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt @@ -28,8 +28,7 @@ class SignUpNicknameActivity : } binding.btnDoubleCheck.setOnClickListener { - val bottomSheetDialog = SignUpNicknameBottomSheetDialog() - bottomSheetDialog.show(supportFragmentManager, bottomSheetDialog.tag) + showNicknameSuccessDialog() } binding.imgBackArrow.setOnClickListener { @@ -38,12 +37,17 @@ class SignUpNicknameActivity : binding.btnNext.setOnClickListener { val intent = Intent(this, WelcomeActivity::class.java) - intent.putExtra(NICKNAME, viewModel.nickname.value) + intent.putExtra(NICKNAME, viewModel.inputNickname.value) startActivity(intent) } } + private fun showNicknameSuccessDialog() { + SignUpNicknameBottomSheetDialog().show(supportFragmentManager, NICKNAME_AVAILIABLE) + } + companion object { + const val NICKNAME_AVAILIABLE = "nicknameAvailiable" const val NICKNAME = "nickName" } } From 65eeba63c7d520d6b25fe0323ed56712d988469e Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:17:22 +0900 Subject: [PATCH 09/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EC=BB=AC?= =?UTF-8?q?=EC=97=90=20isLogin=20=EB=B3=80=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/datasource/local/GPDataStore.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt index 5150f5d6..90be1ff5 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt @@ -30,8 +30,13 @@ class GPDataStore @Inject constructor(@ApplicationContext context: Context) { set(value) = dataStore.edit { putString(NICKNAME, value) } get() = dataStore.getString(NICKNAME, "") ?: "" + var isLogin: Boolean + set(value) = dataStore.edit { putBoolean(IS_LOGIN, value) } + get() = dataStore.getBoolean(IS_LOGIN, false) + companion object { const val FILE_NAME = "GunppangSharedPreferences" const val NICKNAME = "nickname" + const val IS_LOGIN = "Islogin" } } From 7964d4222b474e98ae5b23f5a1af69db06a0347e Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:17:49 +0900 Subject: [PATCH 10/27] =?UTF-8?q?[mod]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=9A=94=EC=B2=AD=20dto=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/model/request/RequestLogin.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt index 323874e3..f28daff9 100644 --- a/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt +++ b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt @@ -1,6 +1,6 @@ package com.sopt.geonppang.data.model.request data class RequestLogin( - val email: String, - val password: String, + val email: String?, + val password: String?, ) From 6d29270d8142706a563d873e6e1aa0f363efc094 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:22:21 +0900 Subject: [PATCH 11/27] =?UTF-8?q?[feat]=20#141=20=EC=9E=90=EC=B2=B4?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=B7=B0=EB=AA=A8=EB=8D=B8,=20?= =?UTF-8?q?=EC=95=A1=ED=8B=B0=EB=B9=84=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/login/LogInViewModel.kt | 29 ++++++++++++++- .../presentation/login/LoginActivity.kt | 36 +++++++++++++++++++ app/src/main/res/layout/activity_login.xml | 1 + 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt index 36b78e28..28f08ed9 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt @@ -2,11 +2,38 @@ package com.sopt.geonppang.presentation.login import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.sopt.geonppang.data.datasource.local.GPDataStore +import com.sopt.geonppang.data.model.request.RequestLogin +import com.sopt.geonppang.domain.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import timber.log.Timber import javax.inject.Inject @HiltViewModel -class LogInViewModel @Inject constructor() : ViewModel() { +class LogInViewModel @Inject constructor( + private val authRepository: AuthRepository, + val gpDataStore: GPDataStore +) : ViewModel() { val loginEmail = MutableLiveData("") val loginPassword = MutableLiveData("") + private val _loginState = MutableStateFlow(null) + val loginState get() = _loginState.asStateFlow() + + fun login() { + viewModelScope.launch { + authRepository.login(RequestLogin(loginEmail.value, loginPassword.value)) + .onSuccess { + gpDataStore.isLogin = true + _loginState.value = true + //TODO 응답 코드 200 반환 받기 구현 예정 + }.onFailure { throwable -> + _loginState.value = false + Timber.tag("로그인 실패").e(throwable.message) + } + } + } } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index 0b2dc583..b823f570 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -3,12 +3,17 @@ package com.sopt.geonppang.presentation.login import android.content.Intent import android.os.Bundle import androidx.activity.viewModels +import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.lifecycleScope import com.sopt.geonppang.R import com.sopt.geonppang.databinding.ActivityLoginBinding +import com.sopt.geonppang.presentation.MainActivity import com.sopt.geonppang.presentation.auth.SignUpActivity import com.sopt.geonppang.util.binding.BindingActivity import com.sopt.geonppang.util.extension.hideKeyboard import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach @AndroidEntryPoint class LoginActivity : @@ -20,6 +25,7 @@ class LoginActivity : binding.lifecycleOwner = this addListener() + collectData() } private fun addListener() { @@ -34,7 +40,37 @@ class LoginActivity : } } + private fun collectData() { + viewModel.loginState.flowWithLifecycle(lifecycle).onEach { loginState -> + when (loginState) { + true -> { + moveToHome() + } + + false -> { + showLoginFailDialog() + } + + else -> {} + } + }.launchIn(lifecycleScope) + } + + private fun showLoginFailDialog() { + LoginFailBottomDialogFragment().show(supportFragmentManager, LOGIN_FAIL) + } + + + private fun moveToHome() { + startActivity(Intent(this, MainActivity::class.java)) + finish() + } + private fun moveToSignup() { startActivity(Intent(this, SignUpActivity::class.java)) } + + companion object { + const val LOGIN_FAIL = "loginFail" + } } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index abea69f2..43e0445f 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -162,6 +162,7 @@ android:layout_marginBottom="24dp" android:backgroundTint="@{viewModel.loginPassword.length() > 0 ? @color/main_2 : @color/gray_200}" android:enabled="@{viewModel.loginPassword.length() > 0}" + android:onClick="@{() -> viewModel.login()}" android:paddingVertical="18dp" android:text="@string/login_text_phrase" android:textAppearance="@style/TextAppearance.BodyM1" From 99c69e16ca6a484221f229085f40ab4f5f843fcc Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Fri, 15 Sep 2023 02:30:38 +0900 Subject: [PATCH 12/27] =?UTF-8?q?[chore]=20#141=20klint=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/domain/repository/AuthRepository.kt | 2 +- .../com/sopt/geonppang/presentation/auth/AuthViewModel.kt | 2 -- .../com/sopt/geonppang/presentation/login/LogInViewModel.kt | 2 +- .../com/sopt/geonppang/presentation/login/LoginActivity.kt | 1 - .../presentation/login/LoginFailBottomDialogFragment.kt | 6 +++--- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt index 6060a54b..bd13f3ff 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt @@ -8,5 +8,5 @@ import retrofit2.Response interface AuthRepository { suspend fun withdraw(): Result suspend fun logout(): Result - suspend fun login(requestLogin: RequestLogin) : Result> + suspend fun login(requestLogin: RequestLogin): Result> } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt index 0505bc48..6fedb38f 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt @@ -5,8 +5,6 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.map -import com.sopt.geonppang.data.datasource.local.GPDataStore -import com.sopt.geonppang.domain.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt index 28f08ed9..76c9ea54 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt @@ -29,7 +29,7 @@ class LogInViewModel @Inject constructor( .onSuccess { gpDataStore.isLogin = true _loginState.value = true - //TODO 응답 코드 200 반환 받기 구현 예정 + // TODO 응답 코드 200 반환 받기 구현 예정 }.onFailure { throwable -> _loginState.value = false Timber.tag("로그인 실패").e(throwable.message) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index b823f570..eabcaf35 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -60,7 +60,6 @@ class LoginActivity : LoginFailBottomDialogFragment().show(supportFragmentManager, LOGIN_FAIL) } - private fun moveToHome() { startActivity(Intent(this, MainActivity::class.java)) finish() diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt index 13a12f48..384013fe 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt @@ -6,8 +6,8 @@ import com.sopt.geonppang.R import com.sopt.geonppang.databinding.DialogBottomLoginFailBinding import com.sopt.geonppang.util.binding.BindingBottomSheetDialogFragment -class LoginFailBottomDialogFragment : BindingBottomSheetDialogFragment( - R.layout.dialog_bottom_login_fail) { +class LoginFailBottomDialogFragment : + BindingBottomSheetDialogFragment(R.layout.dialog_bottom_login_fail) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.lifecycleOwner = this.viewLifecycleOwner @@ -21,4 +21,4 @@ class LoginFailBottomDialogFragment : BindingBottomSheetDialogFragment Date: Fri, 15 Sep 2023 02:34:20 +0900 Subject: [PATCH 13/27] =?UTF-8?q?[chore]=20#141=20klint=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/datasource/remote/AuthDataSource.kt | 2 +- .../main/java/com/sopt/geonppang/data/service/AuthService.kt | 2 +- .../java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt index eb4bcaa4..56c055a7 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt @@ -12,5 +12,5 @@ class AuthDataSource @Inject constructor( ) { suspend fun withdraw(): ResponseWithdraw = authService.withdraw() suspend fun logout(): ResponseLogout = authService.logout() - suspend fun login(requestLogin: RequestLogin) : Response = authService.login(requestLogin) + suspend fun login(requestLogin: RequestLogin): Response = authService.login(requestLogin) } diff --git a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt index 4866cfd7..97421131 100644 --- a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt +++ b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt @@ -27,5 +27,5 @@ interface AuthService { @POST("auth/login") suspend fun login( @Body requestLogin: RequestLogin - ) : Response + ): Response } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt index 6fedb38f..b21d861f 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/auth/AuthViewModel.kt @@ -9,8 +9,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class AuthViewModel @Inject constructor( -) : ViewModel() { +class AuthViewModel @Inject constructor() : ViewModel() { val inputEmail = MutableLiveData("") val inputPassword = MutableLiveData("") val inputPasswordCheck = MutableLiveData("") From 20b0622dee68d5ce815b8dfaaedc713ce22adcb7 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Sun, 17 Sep 2023 20:28:23 +0900 Subject: [PATCH 14/27] =?UTF-8?q?[del]=20#141=20=EB=94=94=EB=B2=A8?= =?UTF-8?q?=EB=A1=AD=EC=97=90=EC=84=9C=20=EC=82=AD=EC=A0=9C=EB=90=9C=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datasource/local/GPDataStore.kt | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt deleted file mode 100644 index 90be1ff5..00000000 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/local/GPDataStore.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.sopt.geonppang.data.datasource.local - -import android.content.Context -import android.content.SharedPreferences -import androidx.core.content.edit -import androidx.security.crypto.EncryptedSharedPreferences -import androidx.security.crypto.MasterKey -import com.sopt.geonppang.BuildConfig -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -class GPDataStore @Inject constructor(@ApplicationContext context: Context) { - private val masterKey = MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS) - .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) - .build() - - private val dataStore: SharedPreferences = - if (BuildConfig.DEBUG) context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE) - else EncryptedSharedPreferences.create( - context, - FILE_NAME, - masterKey, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM - ) - - var userNickname: String - set(value) = dataStore.edit { putString(NICKNAME, value) } - get() = dataStore.getString(NICKNAME, "") ?: "" - - var isLogin: Boolean - set(value) = dataStore.edit { putBoolean(IS_LOGIN, value) } - get() = dataStore.getBoolean(IS_LOGIN, false) - - companion object { - const val FILE_NAME = "GunppangSharedPreferences" - const val NICKNAME = "nickname" - const val IS_LOGIN = "Islogin" - } -} From b95f879840063edbbb3e7cf12210c893114b2e8b Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Sun, 17 Sep 2023 20:29:05 +0900 Subject: [PATCH 15/27] =?UTF-8?q?[mod]=20#141=20ResponseLogin=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../geonppang/data/datasource/remote/AuthDataSource.kt | 3 ++- .../geonppang/data/model/response/ResponseLogin.kt | 10 ++++++++++ .../geonppang/data/repository/AuthRepositoryImpl.kt | 7 ++++++- .../com/sopt/geonppang/data/service/AuthService.kt | 4 +++- .../sopt/geonppang/domain/repository/AuthRepository.kt | 3 ++- 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt index cbcc9b97..d1aae6f3 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt @@ -3,6 +3,7 @@ package com.sopt.geonppang.data.datasource.remote import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup import com.sopt.geonppang.data.model.request.RequestLogin +import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting import com.sopt.geonppang.data.model.response.ResponseSignup @@ -24,5 +25,5 @@ class AuthDataSource @Inject constructor( suspend fun logout(): ResponseLogout = authService.logout() suspend fun settingNickname(nickname: RequestNicknameSetting): ResponseNickNameSetting = authService.settingNickName(nickname) - suspend fun login(requestLogin: RequestLogin): Response = authService.login(requestLogin) + suspend fun login(requestLogin: RequestLogin): ResponseLogin = authService.login(requestLogin) } diff --git a/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt new file mode 100644 index 00000000..984446e2 --- /dev/null +++ b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt @@ -0,0 +1,10 @@ +package com.sopt.geonppang.data.model.response + +import kotlinx.serialization.Serializable + +@Serializable +data class ResponseLogin( + val code: String, + val message: String, + val data: String, +) diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index 2f2c4b37..bfa3c527 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -4,6 +4,7 @@ import com.sopt.geonppang.data.datasource.remote.AuthDataSource import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup +import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting import com.sopt.geonppang.data.model.response.ResponseSignup @@ -27,6 +28,10 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun logout(): Result = runCatching { authDataSource.logout() } - override suspend fun login(responseLogin: RequestLogin): Result> = + override suspend fun settingNickname(nickName: RequestNicknameSetting): Result { + TODO("Not yet implemented") + } + + override suspend fun login(responseLogin: RequestLogin): Result = runCatching { authDataSource.login(responseLogin) } } diff --git a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt index 8d1b1d03..8ad05281 100644 --- a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt +++ b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt @@ -1,7 +1,9 @@ package com.sopt.geonppang.data.service import com.sopt.geonppang.data.model.request.RequestLogin +import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup +import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting import com.sopt.geonppang.data.model.response.ResponseSignup @@ -28,7 +30,7 @@ interface AuthService { @POST("auth/login") suspend fun login( @Body requestLogin: RequestLogin - ): Response + ): ResponseLogin @POST("member/nickname") suspend fun settingNickName( diff --git a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt index 678e9fe6..e0b4bb64 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt @@ -3,6 +3,7 @@ package com.sopt.geonppang.domain.repository import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup import com.sopt.geonppang.data.model.request.RequestLogin +import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting import com.sopt.geonppang.data.model.response.ResponseSignup @@ -18,5 +19,5 @@ interface AuthRepository { suspend fun withdraw(): Result suspend fun logout(): Result suspend fun settingNickname(nickName: RequestNicknameSetting): Result - suspend fun login(requestLogin: RequestLogin): Result> + suspend fun login(requestLogin: RequestLogin): Result } From 242ab7616a7189328d012410c41570134d99b3c7 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:34:48 +0900 Subject: [PATCH 16/27] =?UTF-8?q?[chore]=20#141=20merge=20develop=20?= =?UTF-8?q?=EC=97=90=20=EB=B9=A0=EC=A7=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../geonppang/presentation/auth/SignUpNicknameActivity.kt | 2 ++ app/src/main/res/layout/activity_signup_nickname.xml | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt index 39088857..532aff87 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/auth/SignUpNicknameActivity.kt @@ -90,5 +90,7 @@ class SignUpNicknameActivity : companion object { const val NICKNAME = "nickName" + const val EMAIL = "email" + const val PASSWORD = "password" } } diff --git a/app/src/main/res/layout/activity_signup_nickname.xml b/app/src/main/res/layout/activity_signup_nickname.xml index 7c13be8a..cb90f2e5 100644 --- a/app/src/main/res/layout/activity_signup_nickname.xml +++ b/app/src/main/res/layout/activity_signup_nickname.xml @@ -67,7 +67,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="40dp" - android:background="@{!viewModel.inputNickname.empty & !viewModel.isValidNickname()? @drawable/background_need_change_status : @drawable/background_normal_status }" + android:background="@{!viewModel.nickname.empty & !viewModel.isValidNickname()? @drawable/background_need_change_status : @drawable/background_normal_status }" android:orientation="vertical" app:layout_constraintEnd_toEndOf="@id/gl_end" app:layout_constraintStart_toStartOf="@id/gl_start" @@ -81,7 +81,7 @@ android:layout_marginTop="16dp" android:text="@string/tv_nickname" android:textAppearance="@style/TextAppearance.Subhead" - android:textColor="@{!viewModel.inputNickname.empty & !viewModel.isValidNickname() ? @color/error : @color/gray_400}" /> + android:textColor="@{!viewModel.nickname.empty & !viewModel.isValidNickname() ? @color/error : @color/gray_400}" /> @@ -103,7 +103,7 @@ Date: Mon, 18 Sep 2023 21:36:46 +0900 Subject: [PATCH 17/27] =?UTF-8?q?[mod]=20#141=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EB=8D=B0=EC=9D=B4=ED=84=B0Response<>=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/datasource/remote/AuthDataSource.kt | 4 ++-- .../com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt | 2 +- .../main/java/com/sopt/geonppang/data/service/AuthService.kt | 2 +- .../com/sopt/geonppang/domain/repository/AuthRepository.kt | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt index d1aae6f3..c627b181 100644 --- a/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt +++ b/app/src/main/java/com/sopt/geonppang/data/datasource/remote/AuthDataSource.kt @@ -1,8 +1,8 @@ package com.sopt.geonppang.data.datasource.remote +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup -import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting @@ -25,5 +25,5 @@ class AuthDataSource @Inject constructor( suspend fun logout(): ResponseLogout = authService.logout() suspend fun settingNickname(nickname: RequestNicknameSetting): ResponseNickNameSetting = authService.settingNickName(nickname) - suspend fun login(requestLogin: RequestLogin): ResponseLogin = authService.login(requestLogin) + suspend fun login(requestLogin: RequestLogin): Response = authService.login(requestLogin) } diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index bfa3c527..fbd0020f 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -32,6 +32,6 @@ class AuthRepositoryImpl @Inject constructor( TODO("Not yet implemented") } - override suspend fun login(responseLogin: RequestLogin): Result = + override suspend fun login(responseLogin: RequestLogin): Result> = runCatching { authDataSource.login(responseLogin) } } diff --git a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt index 8ad05281..9cfdd68a 100644 --- a/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt +++ b/app/src/main/java/com/sopt/geonppang/data/service/AuthService.kt @@ -30,7 +30,7 @@ interface AuthService { @POST("auth/login") suspend fun login( @Body requestLogin: RequestLogin - ): ResponseLogin + ): Response @POST("member/nickname") suspend fun settingNickName( diff --git a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt index e0b4bb64..d1054e4b 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/repository/AuthRepository.kt @@ -1,8 +1,8 @@ package com.sopt.geonppang.domain.repository +import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.request.RequestNicknameSetting import com.sopt.geonppang.data.model.request.RequestSignup -import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.data.model.response.ResponseLogin import com.sopt.geonppang.data.model.response.ResponseLogout import com.sopt.geonppang.data.model.response.ResponseNickNameSetting @@ -19,5 +19,5 @@ interface AuthRepository { suspend fun withdraw(): Result suspend fun logout(): Result suspend fun settingNickname(nickName: RequestNicknameSetting): Result - suspend fun login(requestLogin: RequestLogin): Result + suspend fun login(requestLogin: RequestLogin): Result> } From 376e95ab5907b0ff2d4952108d1d1317014e01be Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:37:07 +0900 Subject: [PATCH 18/27] =?UTF-8?q?[mod]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=A4=ED=8C=A8=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/login/LoginFailBottomDialogFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt index 384013fe..9f9fe4bd 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginFailBottomDialogFragment.kt @@ -18,7 +18,6 @@ class LoginFailBottomDialogFragment : private fun addListeners() { binding.btnLoginFailConfirm.setOnClickListener { dismiss() - requireActivity().finish() } } } From 1573f914ac0f32d7e412381603e9da5efd7b281d Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:38:40 +0900 Subject: [PATCH 19/27] =?UTF-8?q?[mod]=20#141=20=EC=9D=91=EB=8B=B5,=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20@SerializedName=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/model/request/RequestLogin.kt | 6 ++++++ .../com/sopt/geonppang/data/model/response/ResponseLogin.kt | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt index f28daff9..5c9ca57d 100644 --- a/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt +++ b/app/src/main/java/com/sopt/geonppang/data/model/request/RequestLogin.kt @@ -1,6 +1,12 @@ package com.sopt.geonppang.data.model.request +import com.google.gson.annotations.SerializedName +import kotlinx.serialization.Serializable + +@Serializable data class RequestLogin( + @SerializedName("email") val email: String?, + @SerializedName("password") val password: String?, ) diff --git a/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt index 984446e2..a35894f4 100644 --- a/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt +++ b/app/src/main/java/com/sopt/geonppang/data/model/response/ResponseLogin.kt @@ -1,10 +1,14 @@ package com.sopt.geonppang.data.model.response +import com.google.gson.annotations.SerializedName import kotlinx.serialization.Serializable @Serializable data class ResponseLogin( + @SerializedName("code") val code: String, + @SerializedName("message") val message: String, - val data: String, + @SerializedName("data") + val data: String?, ) From a78f9eb1cad7748a6feb4ec4f5fb6c53c6854ff0 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:39:41 +0900 Subject: [PATCH 20/27] =?UTF-8?q?[feat]=20#141=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=95=A1=ED=8B=B0=EB=B9=84=ED=8B=B0,=20=EB=B7=B0?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=EC=84=9C=EB=B2=84=20=EC=97=B0=EB=8F=99=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/login/LogInViewModel.kt | 44 ++++++++++++++----- .../presentation/login/LoginActivity.kt | 16 ++++++- app/src/main/res/layout/activity_login.xml | 6 +-- 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt index 76c9ea54..543a8661 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt @@ -1,9 +1,10 @@ package com.sopt.geonppang.presentation.login +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.sopt.geonppang.data.datasource.local.GPDataStore +import com.sopt.geonppang.data.datasource.local.GPDataSource import com.sopt.geonppang.data.model.request.RequestLogin import com.sopt.geonppang.domain.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel @@ -16,24 +17,47 @@ import javax.inject.Inject @HiltViewModel class LogInViewModel @Inject constructor( private val authRepository: AuthRepository, - val gpDataStore: GPDataStore + private val gpDataSource: GPDataSource ) : ViewModel() { - val loginEmail = MutableLiveData("") - val loginPassword = MutableLiveData("") + val loginEmail = MutableStateFlow("") + val loginPassword = MutableStateFlow("") private val _loginState = MutableStateFlow(null) val loginState get() = _loginState.asStateFlow() + fun initLogin(){ + _loginState.value = null + } + fun login() { viewModelScope.launch { authRepository.login(RequestLogin(loginEmail.value, loginPassword.value)) - .onSuccess { - gpDataStore.isLogin = true - _loginState.value = true - // TODO 응답 코드 200 반환 받기 구현 예정 + .onSuccess { loginResponse -> + Log.e("로그인 상태 확인","${loginResponse}") + val responseHeader = loginResponse.headers() + val accessToken = responseHeader[AUTHORIZATION].toString() + if (loginResponse.code() == 200) { + Log.e("로그인 성공", "${loginResponse.code()}") + gpDataSource.accessToken = BEARER_PREFIX + accessToken + gpDataSource.isLogin = true + _loginState.value = true + } + if (loginResponse.code() == 400){ + Log.e("로그인 실패", "${loginResponse.code()}") + _loginState.value = false + } + if(loginResponse.code()==500){ + Log.e("서버 오류","${loginResponse.code()}") + } }.onFailure { throwable -> - _loginState.value = false - Timber.tag("로그인 실패").e(throwable.message) + Timber.tag("로그인 실패 on Failure").e(throwable.message) } } } + + companion object { + const val AUTHORIZATION = "Authorization" + const val AUTHORIZATION_REFRESH = "Authorization-refresh" + const val BEARER_PREFIX = "Bearer " + + } } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index eabcaf35..6e619daf 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -2,13 +2,15 @@ package com.sopt.geonppang.presentation.login import android.content.Intent import android.os.Bundle +import android.util.Log import androidx.activity.viewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import com.sopt.geonppang.R +import com.sopt.geonppang.data.datasource.local.GPDataSource import com.sopt.geonppang.databinding.ActivityLoginBinding -import com.sopt.geonppang.presentation.MainActivity import com.sopt.geonppang.presentation.auth.SignUpActivity +import com.sopt.geonppang.presentation.home.HomeFragment import com.sopt.geonppang.util.binding.BindingActivity import com.sopt.geonppang.util.extension.hideKeyboard import dagger.hilt.android.AndroidEntryPoint @@ -24,6 +26,7 @@ class LoginActivity : binding.viewModel = viewModel binding.lifecycleOwner = this + //autoLogin() addListener() collectData() } @@ -45,10 +48,13 @@ class LoginActivity : when (loginState) { true -> { moveToHome() + Log.e("로그인 성공시", "{${loginState}}") } false -> { + Log.e("로그인 실패시", "{${loginState}}") showLoginFailDialog() + viewModel.initLogin() } else -> {} @@ -61,7 +67,7 @@ class LoginActivity : } private fun moveToHome() { - startActivity(Intent(this, MainActivity::class.java)) + startActivity(Intent(this, HomeFragment::class.java)) finish() } @@ -69,6 +75,12 @@ class LoginActivity : startActivity(Intent(this, SignUpActivity::class.java)) } + private fun autoLogin() { + val gpDataSource = GPDataSource(this) + if (gpDataSource.isLogin) + moveToHome() + } + companion object { const val LOGIN_FAIL = "loginFail" } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 43e0445f..8aa2a864 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -160,13 +160,13 @@ android:layout_marginHorizontal="24dp" android:layout_marginTop="@dimen/spacing20" android:layout_marginBottom="24dp" - android:backgroundTint="@{viewModel.loginPassword.length() > 0 ? @color/main_2 : @color/gray_200}" - android:enabled="@{viewModel.loginPassword.length() > 0}" + android:backgroundTint="@{viewModel.loginPassword.length > 0 ? @color/main_2 : @color/gray_200}" + android:enabled="@{viewModel.loginPassword.length > 0}" android:onClick="@{() -> viewModel.login()}" android:paddingVertical="18dp" android:text="@string/login_text_phrase" android:textAppearance="@style/TextAppearance.BodyM1" - android:textColor="@{viewModel.loginPassword.length() > 0 ? @color/white : @color/gray_400}" + android:textColor="@{viewModel.loginPassword.length > 0 ? @color/white : @color/gray_400}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From c3dc2a656980449492eaf9b2d7d1bda0dd5604a4 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:40:02 +0900 Subject: [PATCH 21/27] [chore] #141 merge develop --- app/src/main/res/layout/activity_signup.xml | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml index 31ced5b2..4b01981b 100644 --- a/app/src/main/res/layout/activity_signup.xml +++ b/app/src/main/res/layout/activity_signup.xml @@ -52,7 +52,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="36dp" - android:background="@{!viewModel.inputEmail.empty & !viewModel.isValidEmail()? @drawable/background_need_change_status : @drawable/background_normal_status }" + android:background="@{!viewModel.email.empty & !viewModel.isValidEmail()? @drawable/background_need_change_status : @drawable/background_normal_status }" android:orientation="vertical" app:layout_constraintEnd_toEndOf="@id/tv_input_phrase" app:layout_constraintStart_toStartOf="@id/tv_input_phrase" @@ -70,7 +70,7 @@ android:layout_marginTop="16dp" android:text="@string/tv_email" android:textAppearance="@style/TextAppearance.BodyB2" - android:textColor="@{!viewModel.inputEmail.empty & !viewModel.isValidEmail() ? @color/error : @color/gray_400}" + android:textColor="@{!viewModel.email.empty & !viewModel.isValidEmail() ? @color/error : @color/gray_400}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -85,7 +85,7 @@ android:hint="@string/email_hint" android:inputType="textEmailAddress" android:paddingVertical="5dp" - android:text="@={viewModel.inputEmail}" + android:text="@={viewModel.email}" android:textAppearance="@style/TextAppearance.Headline" android:textColorHint="@color/gray_300" app:layout_constraintBottom_toBottomOf="parent" @@ -117,7 +117,7 @@ + android:textColor="@{!viewModel.password.empty & !viewModel.isValidPassword() ? @color/error : @color/gray_400}" /> @@ -177,7 +177,7 @@ + android:textColor="@{!viewModel.password_check.empty & !viewModel.completePassword ? @color/error : @color/gray_400}" /> @@ -237,7 +237,7 @@ Date: Mon, 18 Sep 2023 21:48:46 +0900 Subject: [PATCH 22/27] =?UTF-8?q?[chore]=20#141=20klint=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/login/LogInViewModel.kt | 18 +++++++----------- .../presentation/login/LoginActivity.kt | 6 +++--- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt index 543a8661..b39f7b98 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt @@ -1,7 +1,5 @@ package com.sopt.geonppang.presentation.login -import android.util.Log -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopt.geonppang.data.datasource.local.GPDataSource @@ -24,7 +22,7 @@ class LogInViewModel @Inject constructor( private val _loginState = MutableStateFlow(null) val loginState get() = _loginState.asStateFlow() - fun initLogin(){ + fun initLogin() { _loginState.value = null } @@ -32,21 +30,21 @@ class LogInViewModel @Inject constructor( viewModelScope.launch { authRepository.login(RequestLogin(loginEmail.value, loginPassword.value)) .onSuccess { loginResponse -> - Log.e("로그인 상태 확인","${loginResponse}") + // Log.e("로그인 상태 확인","${loginResponse}") val responseHeader = loginResponse.headers() val accessToken = responseHeader[AUTHORIZATION].toString() if (loginResponse.code() == 200) { - Log.e("로그인 성공", "${loginResponse.code()}") + // Log.e("로그인 성공", "${loginResponse.code()}") gpDataSource.accessToken = BEARER_PREFIX + accessToken gpDataSource.isLogin = true _loginState.value = true } - if (loginResponse.code() == 400){ - Log.e("로그인 실패", "${loginResponse.code()}") + if (loginResponse.code() == 400) { + // Log.e("로그인 실패", "${loginResponse.code()}") _loginState.value = false } - if(loginResponse.code()==500){ - Log.e("서버 오류","${loginResponse.code()}") + if (loginResponse.code() == 500) { + // Log.e("서버 오류", "${loginResponse.code()}") } }.onFailure { throwable -> Timber.tag("로그인 실패 on Failure").e(throwable.message) @@ -56,8 +54,6 @@ class LogInViewModel @Inject constructor( companion object { const val AUTHORIZATION = "Authorization" - const val AUTHORIZATION_REFRESH = "Authorization-refresh" const val BEARER_PREFIX = "Bearer " - } } diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index 6e619daf..8c0d426f 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -26,7 +26,7 @@ class LoginActivity : binding.viewModel = viewModel binding.lifecycleOwner = this - //autoLogin() + // autoLogin() addListener() collectData() } @@ -48,11 +48,11 @@ class LoginActivity : when (loginState) { true -> { moveToHome() - Log.e("로그인 성공시", "{${loginState}}") + // Log.e("로그인 성공시", "{${loginState}}") } false -> { - Log.e("로그인 실패시", "{${loginState}}") + // Log.e("로그인 실패시", "{${loginState}}") showLoginFailDialog() viewModel.initLogin() } From c673d0933b59b167294a123b07524adda12d4c02 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Mon, 18 Sep 2023 21:50:42 +0900 Subject: [PATCH 23/27] =?UTF-8?q?[chore]=20#141=20klint=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/geonppang/presentation/login/LoginActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index 8c0d426f..d3415f37 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -2,7 +2,6 @@ package com.sopt.geonppang.presentation.login import android.content.Intent import android.os.Bundle -import android.util.Log import androidx.activity.viewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope From 7553fd017e868f6b7165c06f49d0507fd14333be Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Tue, 19 Sep 2023 20:23:13 +0900 Subject: [PATCH 24/27] =?UTF-8?q?[feat]=20#141=20=EC=9E=90=EC=B2=B4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C,=20=EC=9E=90=EB=8F=99=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/presentation/login/LoginActivity.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt index d3415f37..a6a026e7 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LoginActivity.kt @@ -25,7 +25,7 @@ class LoginActivity : binding.viewModel = viewModel binding.lifecycleOwner = this - // autoLogin() + autoLogin() addListener() collectData() } @@ -47,11 +47,9 @@ class LoginActivity : when (loginState) { true -> { moveToHome() - // Log.e("로그인 성공시", "{${loginState}}") } false -> { - // Log.e("로그인 실패시", "{${loginState}}") showLoginFailDialog() viewModel.initLogin() } From 6054f83791f11083a1948f469945966f6ad5059c Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Wed, 20 Sep 2023 01:41:06 +0900 Subject: [PATCH 25/27] =?UTF-8?q?[chore]=20#141=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=90=9C=20=ED=95=AD=EB=B3=B5=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/geonppang/data/repository/AuthRepositoryImpl.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index fbd0020f..24d997f3 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -28,9 +28,9 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun logout(): Result = runCatching { authDataSource.logout() } - override suspend fun settingNickname(nickName: RequestNicknameSetting): Result { - TODO("Not yet implemented") - } + override suspend fun settingNickname(nickName: RequestNicknameSetting): Result = + runCatching { authDataSource.settingNickname(nickName) } + override suspend fun login(responseLogin: RequestLogin): Result> = runCatching { authDataSource.login(responseLogin) } From 1cfede4c95bb6f0493fb55b9831f0ad625470bdf Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Wed, 20 Sep 2023 01:43:39 +0900 Subject: [PATCH 26/27] =?UTF-8?q?[chore]=20#141=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/presentation/login/LogInViewModel.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt index b39f7b98..c1084f13 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/login/LogInViewModel.kt @@ -30,21 +30,18 @@ class LogInViewModel @Inject constructor( viewModelScope.launch { authRepository.login(RequestLogin(loginEmail.value, loginPassword.value)) .onSuccess { loginResponse -> - // Log.e("로그인 상태 확인","${loginResponse}") val responseHeader = loginResponse.headers() val accessToken = responseHeader[AUTHORIZATION].toString() if (loginResponse.code() == 200) { - // Log.e("로그인 성공", "${loginResponse.code()}") gpDataSource.accessToken = BEARER_PREFIX + accessToken gpDataSource.isLogin = true _loginState.value = true } if (loginResponse.code() == 400) { - // Log.e("로그인 실패", "${loginResponse.code()}") _loginState.value = false } if (loginResponse.code() == 500) { - // Log.e("서버 오류", "${loginResponse.code()}") + Timber.tag("서버 오류") } }.onFailure { throwable -> Timber.tag("로그인 실패 on Failure").e(throwable.message) From d51c800c4d6f8a8cddd2e92877c6d1b1e4efeb04 Mon Sep 17 00:00:00 2001 From: jooyyoo Date: Wed, 20 Sep 2023 01:48:41 +0900 Subject: [PATCH 27/27] =?UTF-8?q?[chore]=20#141=20klint=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt index 24d997f3..76ccbb69 100644 --- a/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/sopt/geonppang/data/repository/AuthRepositoryImpl.kt @@ -31,7 +31,6 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun settingNickname(nickName: RequestNicknameSetting): Result = runCatching { authDataSource.settingNickname(nickName) } - override suspend fun login(responseLogin: RequestLogin): Result> = runCatching { authDataSource.login(responseLogin) } }