From 1a8ed54230ee6802a5a2ee1dae5156ceb9e14e5b Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:34:35 +0900 Subject: [PATCH 01/23] [FEATURE] #141 : CodeValidationDialog --- .idea/deploymentTargetDropDown.xml | 2 +- .../signup/validation/CodeValidationDialog.kt | 73 +++++++++++++++++++ feature/auth/src/main/res/values/strings.xml | 3 + 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 0c0c33838..2f0367c47 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -2,7 +2,7 @@ - + diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt new file mode 100644 index 000000000..2a096a3f2 --- /dev/null +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt @@ -0,0 +1,73 @@ +package com.wap.wapp.feature.auth.signup.validation + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import com.wap.designsystem.WappTheme +import com.wap.designsystem.component.WappButton +import com.wap.designsystem.component.WappTextField +import com.wap.wapp.feature.auth.R + +@Composable +internal fun CodeValidationDialog( + code: String, + setValidationCode: (String) -> Unit, + onConfirmRequest: () -> Unit, + onDismissRequest: () -> Unit, +) { + Dialog( + onDismissRequest = onDismissRequest, + ) { + Card(shape = RoundedCornerShape(10.dp)) { + Column( + modifier = Modifier + .fillMaxWidth() + .background(color = WappTheme.colors.black25) + .padding(10.dp), + ) { + Text( + text = stringResource(R.string.sign_up_dialog_title), + style = WappTheme.typography.titleBold, + color = WappTheme.colors.white, + textAlign = TextAlign.Center, + ) + + Text( + text = stringResource(R.string.sign_up_dialog_content), + style = WappTheme.typography.captionMedium, + color = WappTheme.colors.white, + textAlign = TextAlign.Center, + ) + + Spacer(modifier = Modifier.padding(vertical = 8.dp)) + + WappTextField( + value = code, + onValueChanged = setValidationCode, + label = R.string.code, + isError = false, + supportingText = "", + ) + + Spacer(modifier = Modifier.padding(vertical = 8.dp)) + + WappButton( + onClick = onConfirmRequest, + isEnabled = code.isNotBlank(), + modifier = Modifier.padding(horizontal = 32.dp), + ) + } + } + } +} diff --git a/feature/auth/src/main/res/values/strings.xml b/feature/auth/src/main/res/values/strings.xml index 4ae4b1039..99aac63b3 100644 --- a/feature/auth/src/main/res/values/strings.xml +++ b/feature/auth/src/main/res/values/strings.xml @@ -27,6 +27,9 @@ 입부년도 입력 회원님의 기수 정보를 알려드릴게요! Door Icon + 회원 코드를 입력하세요 + WAP 회원만 해당 내용을 확인할 수 있어요 + code 1학기 2학기 완료 From d6488b128a326ec53c5c2d1ee250f3fed4c68f52 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:43:19 +0900 Subject: [PATCH 02/23] [REFACTOR] #141 : StateFlow -> ReadOnlyStateFlow --- .../wap/wapp/feature/auth/signup/SignUpViewModel.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index bafb9840c..35b015a59 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -8,6 +8,8 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject @@ -17,19 +19,19 @@ class SignUpViewModel @Inject constructor( ) : ViewModel() { private val _signUpEventFlow = MutableSharedFlow() - val signUpEventFlow: SharedFlow get() = _signUpEventFlow + val signUpEventFlow: SharedFlow = _signUpEventFlow.asSharedFlow() private val _signUpName: MutableStateFlow = MutableStateFlow("") - val signUpName: StateFlow get() = _signUpName + val signUpName: StateFlow = _signUpName.asStateFlow() private val _signUpStudentId: MutableStateFlow = MutableStateFlow("") - val signUpStudentId: StateFlow get() = _signUpStudentId + val signUpStudentId: StateFlow = _signUpStudentId.asStateFlow() private val _signUpYear: MutableStateFlow = MutableStateFlow("") - val signUpYear: StateFlow get() = _signUpYear + val signUpYear: StateFlow = _signUpYear.asStateFlow() private val _signUpSemester: MutableStateFlow = MutableStateFlow(FIRST_SEMESTER) - val signUpSemester: StateFlow get() = _signUpSemester + val signUpSemester: StateFlow = _signUpSemester.asStateFlow() fun postUserProfile() = viewModelScope.launch { if (!isValidStudentId()) { From 546a0e075f723383f8ecb873c5f40a9d39f0f714 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:47:33 +0900 Subject: [PATCH 03/23] =?UTF-8?q?[FEATURE]=20#141=20:=20SignUpEvent=20Vali?= =?UTF-8?q?dationSuccess,=20SignUpSuccess=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt | 8 ++++++-- .../com/wap/wapp/feature/auth/signup/SignUpViewModel.kt | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index 1d4efd890..9898e6230 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -22,7 +22,10 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -68,12 +71,13 @@ internal fun SignUpScreen( val snackBarHostState = remember { SnackbarHostState() } val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current + var showCodeValidationDialog by remember { mutableStateOf(false) } LaunchedEffect(true) { viewModel.signUpEventFlow.collectLatest { when (it) { - is SignUpEvent.Success -> navigateToNotice() - + is SignUpEvent.SignUpSuccess -> navigateToNotice() + is SignUpEvent.ValidationSuccess -> {} is SignUpEvent.Failure -> snackBarHostState.showSnackbar(message = it.throwable.toSupportingText()) } diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 35b015a59..454dd8e33 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -46,7 +46,7 @@ class SignUpViewModel @Inject constructor( studentId = _signUpStudentId.value, registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", ).onSuccess { - _signUpEventFlow.emit(SignUpEvent.Success) + _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) }.onFailure { throwable -> _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) } @@ -63,7 +63,8 @@ class SignUpViewModel @Inject constructor( fun setSemester(semester: String) { _signUpSemester.value = semester } sealed class SignUpEvent { - data object Success : SignUpEvent() + data object ValidationSuccess : SignUpEvent() + data object SignUpSuccess : SignUpEvent() data class Failure(val throwable: Throwable) : SignUpEvent() } From 0fd72abfa583ecee213dfe05721a68c320d1a0bd Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:50:32 +0900 Subject: [PATCH 04/23] [FEATURE] #141 : validationUserInformation --- .../com/wap/wapp/feature/auth/signup/SignUpScreen.kt | 6 ++++-- .../wap/wapp/feature/auth/signup/SignUpViewModel.kt | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index 9898e6230..b8e20e500 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -77,7 +77,9 @@ internal fun SignUpScreen( viewModel.signUpEventFlow.collectLatest { when (it) { is SignUpEvent.SignUpSuccess -> navigateToNotice() - is SignUpEvent.ValidationSuccess -> {} + + is SignUpEvent.ValidationSuccess -> { showCodeValidationDialog = true } + is SignUpEvent.Failure -> snackBarHostState.showSnackbar(message = it.throwable.toSupportingText()) } @@ -193,7 +195,7 @@ internal fun SignUpScreen( Spacer(modifier = Modifier.weight(1f)) Button( - onClick = { viewModel.postUserProfile() }, + onClick = { viewModel.validationUserInformation() }, modifier = Modifier .fillMaxWidth() .height(48.dp), diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 454dd8e33..e97590061 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -33,6 +33,17 @@ class SignUpViewModel @Inject constructor( private val _signUpSemester: MutableStateFlow = MutableStateFlow(FIRST_SEMESTER) val signUpSemester: StateFlow = _signUpSemester.asStateFlow() + fun validationUserInformation() = viewModelScope.launch { + if (!isValidStudentId()) { + _signUpEventFlow.emit( + SignUpEvent.Failure(IllegalStateException("학번은 9자리로만 입력하실 수 있어요!")), + ) + return@launch + } + + _signUpEventFlow.emit(SignUpEvent.ValidationSuccess) + } + fun postUserProfile() = viewModelScope.launch { if (!isValidStudentId()) { _signUpEventFlow.emit( From 74409d902fdbfe0e8868d7de605cd47f8896e5e0 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:56:03 +0900 Subject: [PATCH 05/23] [FEATURE] #141 : SignUpDataSource --- .../network/source/auth/SignUpDataSource.kt | 5 +++++ .../source/auth/SignUpDataSourceImpl.kt | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt create mode 100644 core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt new file mode 100644 index 000000000..b0e6a71e8 --- /dev/null +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt @@ -0,0 +1,5 @@ +package com.wap.wapp.core.network.source.auth + +interface SignUpDataSource { + suspend fun validationWapCode(code: String): Result +} diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt new file mode 100644 index 000000000..eb32fa1b2 --- /dev/null +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt @@ -0,0 +1,19 @@ +package com.wap.wapp.core.network.source.auth + +import com.google.firebase.firestore.FirebaseFirestore +import com.wap.wapp.core.network.constant.CODES_COLLECTION +import com.wap.wapp.core.network.utils.await +import javax.inject.Inject + +class SignUpDataSourceImpl @Inject constructor( + private val firebaseFirestore: FirebaseFirestore, +) : SignUpDataSource { + override suspend fun validationWapCode(code: String): Result = runCatching { + val result = firebaseFirestore.collection(CODES_COLLECTION) + .whereEqualTo("user", code) + .get() + .await() + + result.isEmpty.not() + } +} From 518d18c323a92217c8862cea0ad5c8187f3658e9 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 01:58:07 +0900 Subject: [PATCH 06/23] [FEATURE] #141 : SignUpDataSource DI Module --- .../java/com/wap/wapp/core/network/di/NetworkModule.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt index b5ce3ec86..e6aeaab2b 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt @@ -6,6 +6,8 @@ import com.wap.wapp.core.network.source.attendancestatus.AttendanceStatusDataSou import com.wap.wapp.core.network.source.attendancestatus.AttendanceStatusDataSourceImpl import com.wap.wapp.core.network.source.auth.AuthDataSource import com.wap.wapp.core.network.source.auth.AuthDataSourceImpl +import com.wap.wapp.core.network.source.auth.SignUpDataSource +import com.wap.wapp.core.network.source.auth.SignUpDataSourceImpl import com.wap.wapp.core.network.source.event.EventDataSource import com.wap.wapp.core.network.source.event.EventDataSourceImpl import com.wap.wapp.core.network.source.management.ManagementDataSource @@ -73,4 +75,10 @@ abstract class NetworkModule { abstract fun bindsAttendanceStatusDataSource( attendanceStatueDataSourceImpl: AttendanceStatusDataSourceImpl, ): AttendanceStatusDataSource + + @Binds + @Singleton + abstract fun bindsSignUpDataSource( + signUpDataSourceImpl: SignUpDataSourceImpl, + ): SignUpDataSource } From da9ec5420381f8c26952d562cdcd8c3673c62150 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:01:45 +0900 Subject: [PATCH 07/23] [FEATURE] #141 : SignUpRepository --- .../main/java/com/wap/wapp/core/data/di/DataModule.kt | 8 ++++++++ .../core/data/repository/auth/SignUpRepository.kt | 5 +++++ .../core/data/repository/auth/SignUpRepositoryImpl.kt | 11 +++++++++++ 3 files changed, 24 insertions(+) create mode 100644 core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt create mode 100644 core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt diff --git a/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt b/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt index cdd681ece..0618b34ae 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt @@ -6,6 +6,8 @@ import com.wap.wapp.core.data.repository.attendancestatus.AttendanceStatusReposi import com.wap.wapp.core.data.repository.attendancestatus.AttendanceStatusRepositoryImpl import com.wap.wapp.core.data.repository.auth.AuthRepository import com.wap.wapp.core.data.repository.auth.AuthRepositoryImpl +import com.wap.wapp.core.data.repository.auth.SignUpRepository +import com.wap.wapp.core.data.repository.auth.SignUpRepositoryImpl import com.wap.wapp.core.data.repository.event.EventRepository import com.wap.wapp.core.data.repository.event.EventRepositoryImpl import com.wap.wapp.core.data.repository.management.ManagementRepository @@ -72,4 +74,10 @@ abstract class DataModule { abstract fun bindsAttendanceStatusRepository( attendanceStatusRepositoryImpl: AttendanceStatusRepositoryImpl, ): AttendanceStatusRepository + + @Binds + @Singleton + abstract fun bindsSignUpRepository( + signUpRepositoryImpl: SignUpRepositoryImpl, + ): SignUpRepository } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt new file mode 100644 index 000000000..110e43b8f --- /dev/null +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt @@ -0,0 +1,5 @@ +package com.wap.wapp.core.data.repository.auth + +interface SignUpRepository { + suspend fun validationWapCode(code: String): Result +} diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt new file mode 100644 index 000000000..a417a14c6 --- /dev/null +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt @@ -0,0 +1,11 @@ +package com.wap.wapp.core.data.repository.auth + +import com.wap.wapp.core.network.source.auth.SignUpDataSource +import javax.inject.Inject + +class SignUpRepositoryImpl @Inject constructor( + private val signUpDataSource: SignUpDataSource, +) : SignUpRepository { + override suspend fun validationWapCode(code: String): Result = + signUpDataSource.validationWapCode(code) +} From 0f0ba0b48bd2f614fcec117393035b3d6e0bb605 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:08:34 +0900 Subject: [PATCH 08/23] [FEATURE] #141 : ValidateWapMemberCodeUseCase --- .../auth/ValidateWapMemberCodeUseCase.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt diff --git a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt new file mode 100644 index 000000000..e3450ddbb --- /dev/null +++ b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt @@ -0,0 +1,21 @@ +package com.wap.wapp.core.domain.usecase.auth + +import com.wap.wapp.core.data.repository.auth.SignUpRepository +import com.wap.wapp.core.domain.model.CodeValidation +import javax.inject.Inject + +class ValidateWapMemberCodeUseCase @Inject constructor( + private val signUpRepository: SignUpRepository, +) { + suspend operator fun invoke(code: String): Result = runCatching { + signUpRepository.validationWapCode(code).fold( + onSuccess = { isValid -> + if (isValid) { + return@fold CodeValidation.VALID + } + CodeValidation.INVALID + }, + onFailure = { CodeValidation.INVALID }, + ) + } +} From 671c1a001484dd1ff1d9a8fc2f30f13d68cf5db3 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:10:34 +0900 Subject: [PATCH 09/23] [FEATURE] #141 : WapMemberCode StateFlow --- .../java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index e97590061..ee5f0bf48 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -2,6 +2,7 @@ package com.wap.wapp.feature.auth.signup import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.wap.wapp.core.domain.usecase.auth.ValidateWapMemberCodeUseCase import com.wap.wapp.core.domain.usecase.user.PostUserProfileUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow @@ -16,6 +17,7 @@ import javax.inject.Inject @HiltViewModel class SignUpViewModel @Inject constructor( private val postUserProfileUseCase: PostUserProfileUseCase, + private val validateWapMemberCodeUseCase: ValidateWapMemberCodeUseCase, ) : ViewModel() { private val _signUpEventFlow = MutableSharedFlow() @@ -33,6 +35,9 @@ class SignUpViewModel @Inject constructor( private val _signUpSemester: MutableStateFlow = MutableStateFlow(FIRST_SEMESTER) val signUpSemester: StateFlow = _signUpSemester.asStateFlow() + private val _wapMemberCode: MutableStateFlow = MutableStateFlow("") + val wapMemberCode: StateFlow = _wapMemberCode.asStateFlow() + fun validationUserInformation() = viewModelScope.launch { if (!isValidStudentId()) { _signUpEventFlow.emit( From 9e5a6fcaebcefbfee53e30c3e53069a54a723909 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:15:04 +0900 Subject: [PATCH 10/23] =?UTF-8?q?[FEATURE]=20#141=20:=20ValidateWapMemberC?= =?UTF-8?q?odeUseCase=20=EC=84=B1=EA=B3=B5=20=EC=8B=9C=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20post=20=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/auth/signup/SignUpViewModel.kt | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index ee5f0bf48..9ed02602a 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -57,12 +57,16 @@ class SignUpViewModel @Inject constructor( return@launch } - postUserProfileUseCase( - userName = _signUpName.value, - studentId = _signUpStudentId.value, - registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", - ).onSuccess { - _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) + validateWapMemberCodeUseCase(_wapMemberCode.value).onSuccess { + postUserProfileUseCase( + userName = _signUpName.value, + studentId = _signUpStudentId.value, + registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", + ).onSuccess { + _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) + }.onFailure { throwable -> + _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) + } }.onFailure { throwable -> _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) } @@ -70,13 +74,21 @@ class SignUpViewModel @Inject constructor( fun isValidStudentId(): Boolean = (_signUpStudentId.value.length == STUDENT_ID_LENGTH) - fun setName(name: String) { _signUpName.value = name } + fun setName(name: String) { + _signUpName.value = name + } - fun setStudentId(studentId: String) { _signUpStudentId.value = studentId } + fun setStudentId(studentId: String) { + _signUpStudentId.value = studentId + } - fun setYear(year: String) { _signUpYear.value = year } + fun setYear(year: String) { + _signUpYear.value = year + } - fun setSemester(semester: String) { _signUpSemester.value = semester } + fun setSemester(semester: String) { + _signUpSemester.value = semester + } sealed class SignUpEvent { data object ValidationSuccess : SignUpEvent() From 7cc802eca8691c74f3f72ddf69bd80f66d1a4e0f Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:19:08 +0900 Subject: [PATCH 11/23] =?UTF-8?q?[FEATURE]=20#141=20:=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EC=9E=85=EB=A0=A5=20=EC=84=B1=EA=B3=B5?= =?UTF-8?q?=20=EC=8B=9C,=20CodeValidationDialog=EA=B0=80=20=EB=9D=84?= =?UTF-8?q?=EC=9B=8C=EC=A7=80=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wapp/feature/auth/signup/SignUpScreen.kt | 15 ++++++++++++++- .../feature/auth/signup/SignUpViewModel.kt | 18 ++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index b8e20e500..0ab7ec7cc 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.wap.designsystem.WappTheme import com.wap.designsystem.component.WappSubTopBar import com.wap.designsystem.modifier.addFocusCleaner @@ -46,6 +47,7 @@ import com.wap.wapp.feature.auth.R.drawable.ic_card import com.wap.wapp.feature.auth.R.drawable.ic_door import com.wap.wapp.feature.auth.R.string import com.wap.wapp.feature.auth.signup.SignUpViewModel.SignUpEvent +import com.wap.wapp.feature.auth.signup.validation.CodeValidationDialog import kotlinx.coroutines.flow.collectLatest @Composable @@ -78,7 +80,9 @@ internal fun SignUpScreen( when (it) { is SignUpEvent.SignUpSuccess -> navigateToNotice() - is SignUpEvent.ValidationSuccess -> { showCodeValidationDialog = true } + is SignUpEvent.ValidationSuccess -> { + showCodeValidationDialog = true + } is SignUpEvent.Failure -> snackBarHostState.showSnackbar(message = it.throwable.toSupportingText()) @@ -98,6 +102,15 @@ internal fun SignUpScreen( .addFocusCleaner(focusManager) .padding(paddingValue), ) { + if (showCodeValidationDialog) { + CodeValidationDialog( + code = viewModel.wapMemberCode.collectAsStateWithLifecycle().value, + setValidationCode = viewModel::setWapMemberCode, + onConfirmRequest = { }, + onDismissRequest = { showCodeValidationDialog = false }, + ) + } + WappSubTopBar( modifier = Modifier .fillMaxWidth() diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 9ed02602a..f3927cabc 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -74,21 +74,15 @@ class SignUpViewModel @Inject constructor( fun isValidStudentId(): Boolean = (_signUpStudentId.value.length == STUDENT_ID_LENGTH) - fun setName(name: String) { - _signUpName.value = name - } + fun setName(name: String) { _signUpName.value = name } - fun setStudentId(studentId: String) { - _signUpStudentId.value = studentId - } + fun setStudentId(studentId: String) { _signUpStudentId.value = studentId } - fun setYear(year: String) { - _signUpYear.value = year - } + fun setYear(year: String) { _signUpYear.value = year } - fun setSemester(semester: String) { - _signUpSemester.value = semester - } + fun setSemester(semester: String) { _signUpSemester.value = semester } + + fun setWapMemberCode(code: String) { _wapMemberCode.value = code } sealed class SignUpEvent { data object ValidationSuccess : SignUpEvent() From 2f9be2be581272867b0305ce06ffdbae4ec4fc1a Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 02:26:36 +0900 Subject: [PATCH 12/23] =?UTF-8?q?[FEATURE]=20#141=20:=20=EC=B2=98=EC=9D=8C?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=99=94=EB=A9=B4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20BottomSheetContent=EB=A5=BC=20=ED=84=B0=EC=B9=98?= =?UTF-8?q?=ED=95=B4=EB=8F=84=20=ED=8F=AC=EC=BB=A4=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=9E=83=EA=B2=8C=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wap/wapp/feature/auth/signin/SignInContent.kt | 3 ++- .../main/java/com/wap/wapp/feature/auth/signin/SignInScreen.kt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInContent.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInContent.kt index d03e9fa1d..1ed34624f 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInContent.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInContent.kt @@ -32,12 +32,13 @@ import com.wap.wapp.feature.auth.R.string internal fun SignInContent( openSignInSheet: () -> Unit, navigateToNotice: () -> Unit, + modifier: Modifier = Modifier, ) { val scrollState = rememberScrollState() Column( verticalArrangement = Arrangement.Center, - modifier = Modifier + modifier = modifier .fillMaxSize() .padding(horizontal = 16.dp) .verticalScroll(scrollState), diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInScreen.kt index 107fc75ec..53c87c39b 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signin/SignInScreen.kt @@ -196,6 +196,7 @@ internal fun SignInScreen( } }, navigateToNotice = { navigateToNotice() }, + modifier = Modifier.addFocusCleaner(focusManager), ) } } From 95f7f2a665ddb51d07a1f1ac32b5507f03ee605a Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 03:17:20 +0900 Subject: [PATCH 13/23] =?UTF-8?q?[FEATURE]=20#141=20:=20WAP=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=20=EC=BD=94=EB=93=9C=20=EC=84=A4=EC=A0=95=20Dialog=20?= =?UTF-8?q?UI=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../signup/validation/CodeValidationDialog.kt | 81 +++++++++++-------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt index 2a096a3f2..b04bd3def 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt @@ -5,15 +5,18 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Card import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties import com.wap.designsystem.WappTheme import com.wap.designsystem.component.WappButton import com.wap.designsystem.component.WappTextField @@ -28,46 +31,54 @@ internal fun CodeValidationDialog( ) { Dialog( onDismissRequest = onDismissRequest, + properties = DialogProperties( + usePlatformDefaultWidth = false, + ), ) { - Card(shape = RoundedCornerShape(10.dp)) { - Column( - modifier = Modifier - .fillMaxWidth() - .background(color = WappTheme.colors.black25) - .padding(10.dp), - ) { - Text( - text = stringResource(R.string.sign_up_dialog_title), - style = WappTheme.typography.titleBold, - color = WappTheme.colors.white, - textAlign = TextAlign.Center, - ) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .wrapContentHeight() + .fillMaxWidth() + .padding(horizontal = 30.dp, vertical = 20.dp) + .clip(RoundedCornerShape(10.dp)) + .background(WappTheme.colors.black25), + ) { + Text( + text = stringResource(R.string.sign_up_dialog_title), + style = WappTheme.typography.titleBold, + color = WappTheme.colors.white, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = 20.dp), + ) - Text( - text = stringResource(R.string.sign_up_dialog_content), - style = WappTheme.typography.captionMedium, - color = WappTheme.colors.white, - textAlign = TextAlign.Center, - ) + Text( + text = stringResource(R.string.sign_up_dialog_content), + style = WappTheme.typography.captionMedium, + color = WappTheme.colors.white, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = 10.dp), + ) - Spacer(modifier = Modifier.padding(vertical = 8.dp)) + Spacer(modifier = Modifier.padding(vertical = 10.dp)) - WappTextField( - value = code, - onValueChanged = setValidationCode, - label = R.string.code, - isError = false, - supportingText = "", - ) + WappTextField( + value = code, + onValueChanged = setValidationCode, + label = R.string.code, + isError = false, + supportingText = "", + ) - Spacer(modifier = Modifier.padding(vertical = 8.dp)) + Spacer(modifier = Modifier.padding(vertical = 10.dp)) - WappButton( - onClick = onConfirmRequest, - isEnabled = code.isNotBlank(), - modifier = Modifier.padding(horizontal = 32.dp), - ) - } + WappButton( + onClick = onConfirmRequest, + isEnabled = code.isNotBlank(), + modifier = Modifier + .fillMaxWidth() + .padding(20.dp), + ) } } } From 2a027bc50df5f1ae1ddad586ef7de8069ec2a8dc Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 03:44:44 +0900 Subject: [PATCH 14/23] =?UTF-8?q?[FEATURE]=20#141=20:=20WAP=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=20=EC=BD=94=EB=93=9C=EA=B0=80=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=EB=A7=8C=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=EC=9D=B4=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wap/designsystem/component/Button.kt | 2 +- .../wapp/feature/auth/signup/SignUpScreen.kt | 7 ++- .../feature/auth/signup/SignUpViewModel.kt | 44 ++++++++++++------- .../signup/validation/CodeValidationDialog.kt | 11 ++++- feature/auth/src/main/res/values/strings.xml | 2 + 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/core/designsystem/src/main/java/com/wap/designsystem/component/Button.kt b/core/designsystem/src/main/java/com/wap/designsystem/component/Button.kt index 4d65350d5..367bb75c3 100644 --- a/core/designsystem/src/main/java/com/wap/designsystem/component/Button.kt +++ b/core/designsystem/src/main/java/com/wap/designsystem/component/Button.kt @@ -28,7 +28,7 @@ fun WappButton( onClick = { onClick() }, enabled = isEnabled, colors = ButtonDefaults.buttonColors( - contentColor = WappTheme.colors.black, + contentColor = WappTheme.colors.white, containerColor = WappTheme.colors.yellow34, disabledContentColor = WappTheme.colors.white, disabledContainerColor = WappTheme.colors.grayA2, diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index 0ab7ec7cc..ee746a630 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -106,8 +106,13 @@ internal fun SignUpScreen( CodeValidationDialog( code = viewModel.wapMemberCode.collectAsStateWithLifecycle().value, setValidationCode = viewModel::setWapMemberCode, - onConfirmRequest = { }, + onConfirmRequest = viewModel::postUserProfile, onDismissRequest = { showCodeValidationDialog = false }, + isError = viewModel.isError.collectAsStateWithLifecycle().value, + supportingText = + stringResource( + viewModel.errorSupportingText.collectAsStateWithLifecycle().value, + ), ) } diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index f3927cabc..5dc364e09 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -2,6 +2,7 @@ package com.wap.wapp.feature.auth.signup import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.wap.wapp.core.domain.model.CodeValidation import com.wap.wapp.core.domain.usecase.auth.ValidateWapMemberCodeUseCase import com.wap.wapp.core.domain.usecase.user.PostUserProfileUseCase import dagger.hilt.android.lifecycle.HiltViewModel @@ -13,13 +14,13 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject +import com.wap.wapp.feature.auth.R @HiltViewModel class SignUpViewModel @Inject constructor( private val postUserProfileUseCase: PostUserProfileUseCase, private val validateWapMemberCodeUseCase: ValidateWapMemberCodeUseCase, ) : ViewModel() { - private val _signUpEventFlow = MutableSharedFlow() val signUpEventFlow: SharedFlow = _signUpEventFlow.asSharedFlow() @@ -38,6 +39,13 @@ class SignUpViewModel @Inject constructor( private val _wapMemberCode: MutableStateFlow = MutableStateFlow("") val wapMemberCode: StateFlow = _wapMemberCode.asStateFlow() + private val _isError: MutableStateFlow = MutableStateFlow(false) + val isError: StateFlow get() = _isError + + private val _errorSupportingText: MutableStateFlow = + MutableStateFlow(R.string.sign_up_dialog_hint) + val errorSupportingText: StateFlow = _errorSupportingText.asStateFlow() + fun validationUserInformation() = viewModelScope.launch { if (!isValidStudentId()) { _signUpEventFlow.emit( @@ -50,25 +58,29 @@ class SignUpViewModel @Inject constructor( } fun postUserProfile() = viewModelScope.launch { - if (!isValidStudentId()) { - _signUpEventFlow.emit( - SignUpEvent.Failure(IllegalStateException("학번은 9자리로만 입력하실 수 있어요!")), - ) - return@launch - } - validateWapMemberCodeUseCase(_wapMemberCode.value).onSuccess { - postUserProfileUseCase( - userName = _signUpName.value, - studentId = _signUpStudentId.value, - registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", - ).onSuccess { - _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) - }.onFailure { throwable -> - _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) + when (it) { + CodeValidation.VALID -> { + postUserProfileUseCase( + userName = _signUpName.value, + studentId = _signUpStudentId.value, + registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", + ).onSuccess { + _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) + }.onFailure { throwable -> + _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) + _isError.value = true + } + } + + CodeValidation.INVALID -> { + _isError.value = true + _errorSupportingText.value = R.string.sign_up_incorrect_code + } } }.onFailure { throwable -> _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) + _isError.value = true } } diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt index b04bd3def..944503817 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/validation/CodeValidationDialog.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -20,15 +21,20 @@ import androidx.compose.ui.window.DialogProperties import com.wap.designsystem.WappTheme import com.wap.designsystem.component.WappButton import com.wap.designsystem.component.WappTextField +import com.wap.designsystem.modifier.addFocusCleaner import com.wap.wapp.feature.auth.R @Composable internal fun CodeValidationDialog( code: String, + isError: Boolean, + supportingText: String, setValidationCode: (String) -> Unit, onConfirmRequest: () -> Unit, onDismissRequest: () -> Unit, ) { + val focusManager = LocalFocusManager.current + Dialog( onDismissRequest = onDismissRequest, properties = DialogProperties( @@ -41,6 +47,7 @@ internal fun CodeValidationDialog( .wrapContentHeight() .fillMaxWidth() .padding(horizontal = 30.dp, vertical = 20.dp) + .addFocusCleaner(focusManager) .clip(RoundedCornerShape(10.dp)) .background(WappTheme.colors.black25), ) { @@ -66,8 +73,8 @@ internal fun CodeValidationDialog( value = code, onValueChanged = setValidationCode, label = R.string.code, - isError = false, - supportingText = "", + isError = isError, + supportingText = supportingText, ) Spacer(modifier = Modifier.padding(vertical = 10.dp)) diff --git a/feature/auth/src/main/res/values/strings.xml b/feature/auth/src/main/res/values/strings.xml index 99aac63b3..c696054e2 100644 --- a/feature/auth/src/main/res/values/strings.xml +++ b/feature/auth/src/main/res/values/strings.xml @@ -29,6 +29,8 @@ Door Icon 회원 코드를 입력하세요 WAP 회원만 해당 내용을 확인할 수 있어요 + Hint : WAP + 잘못된 코드입니다. code 1학기 2학기 From bedfbfd9776c49c651e3687418714f99fc119a25 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 04:02:58 +0900 Subject: [PATCH 15/23] =?UTF-8?q?[FEATURE]=20#141=20:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EC=9D=B4=ED=9B=84,=20=EA=B3=B5=EC=A7=80?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20=ED=82=A4=EB=A5=BC=20?= =?UTF-8?q?=EB=88=84=EB=A5=B4=EB=A9=B4=20=EC=A2=85=EB=A3=8C=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt b/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt index 648f7036a..337eb7cdc 100644 --- a/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt +++ b/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt @@ -77,7 +77,13 @@ fun WappNavHost( navigateToSignUp = navController::navigateToSignUp, ) signUpScreen( - navigateToNotice = navController::navigateToNotice, + navigateToNotice = { + navController.navigateToNotice( + navOptions { + popUpTo(navController.graph.startDestinationId) { inclusive = true } + }, + ) + }, navigateToSignIn = navController::navigateToSignIn, ) noticeScreen() From dc71e79a8ff28fd789438087aa7b247fc6c8f571 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Wed, 28 Feb 2024 04:40:40 +0900 Subject: [PATCH 16/23] =?UTF-8?q?[FEATURE]=20#141=20:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EC=9D=B4=ED=9B=84,=20=EA=B3=B5=EC=A7=80?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20=ED=82=A4=EB=A5=BC=20?= =?UTF-8?q?=EB=88=84=EB=A5=B4=EB=A9=B4=20=EC=A2=85=EB=A3=8C=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt | 4 +--- .../navigation/{SignInNavigation.kt => SignUpNavigation.kt} | 0 2 files changed, 1 insertion(+), 3 deletions(-) rename feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/navigation/{SignInNavigation.kt => SignUpNavigation.kt} (100%) diff --git a/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt b/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt index 337eb7cdc..e2da0bd70 100644 --- a/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt +++ b/app/src/main/java/com/wap/wapp/navigation/WappNavHost.kt @@ -79,9 +79,7 @@ fun WappNavHost( signUpScreen( navigateToNotice = { navController.navigateToNotice( - navOptions { - popUpTo(navController.graph.startDestinationId) { inclusive = true } - }, + navOptions { popUpTo(navController.graph.id) { inclusive = true } }, ) }, navigateToSignIn = navController::navigateToSignIn, diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/navigation/SignInNavigation.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/navigation/SignUpNavigation.kt similarity index 100% rename from feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/navigation/SignInNavigation.kt rename to feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/navigation/SignUpNavigation.kt From 8b54e72aa8c9f06071b3d571e11d2d2a7b450234 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 12:31:20 +0900 Subject: [PATCH 17/23] =?UTF-8?q?[REFACTOR]=20#141=20:=20SignUpRepository,?= =?UTF-8?q?=20SignUpDataSource=20->=20AuthRepository,=20AuthDataSource?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=91=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wap/wapp/core/data/di/DataModule.kt | 8 -------- .../data/repository/auth/AuthRepository.kt | 2 ++ .../repository/auth/AuthRepositoryImpl.kt | 3 +++ .../data/repository/auth/SignUpRepository.kt | 5 ----- .../repository/auth/SignUpRepositoryImpl.kt | 11 ----------- .../auth/ValidateWapMemberCodeUseCase.kt | 1 - .../wap/wapp/core/network/di/NetworkModule.kt | 8 -------- .../network/source/auth/AuthDataSource.kt | 2 ++ .../network/source/auth/AuthDataSourceImpl.kt | 12 ++++++++++++ .../network/source/auth/SignUpDataSource.kt | 5 ----- .../source/auth/SignUpDataSourceImpl.kt | 19 ------------------- 11 files changed, 19 insertions(+), 57 deletions(-) delete mode 100644 core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt delete mode 100644 core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt delete mode 100644 core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt delete mode 100644 core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt diff --git a/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt b/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt index 0618b34ae..cdd681ece 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/di/DataModule.kt @@ -6,8 +6,6 @@ import com.wap.wapp.core.data.repository.attendancestatus.AttendanceStatusReposi import com.wap.wapp.core.data.repository.attendancestatus.AttendanceStatusRepositoryImpl import com.wap.wapp.core.data.repository.auth.AuthRepository import com.wap.wapp.core.data.repository.auth.AuthRepositoryImpl -import com.wap.wapp.core.data.repository.auth.SignUpRepository -import com.wap.wapp.core.data.repository.auth.SignUpRepositoryImpl import com.wap.wapp.core.data.repository.event.EventRepository import com.wap.wapp.core.data.repository.event.EventRepositoryImpl import com.wap.wapp.core.data.repository.management.ManagementRepository @@ -74,10 +72,4 @@ abstract class DataModule { abstract fun bindsAttendanceStatusRepository( attendanceStatusRepositoryImpl: AttendanceStatusRepositoryImpl, ): AttendanceStatusRepository - - @Binds - @Singleton - abstract fun bindsSignUpRepository( - signUpRepositoryImpl: SignUpRepositoryImpl, - ): SignUpRepository } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt index 00e51ac84..ba276f183 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt @@ -6,4 +6,6 @@ interface AuthRepository { suspend fun deleteUser(): Result suspend fun isUserSignIn(): Result + + suspend fun validationWapCode(code: String): Result } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt index 3e855fcb2..4ca9e1ed5 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt @@ -11,4 +11,7 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun deleteUser(): Result = authDataSource.deleteUser() override suspend fun isUserSignIn(): Result = authDataSource.isUserSignIn() + + override suspend fun validationWapCode(code: String): Result = + authDataSource.validationWapCode(code) } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt deleted file mode 100644 index 110e43b8f..000000000 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepository.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.wap.wapp.core.data.repository.auth - -interface SignUpRepository { - suspend fun validationWapCode(code: String): Result -} diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt deleted file mode 100644 index a417a14c6..000000000 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/SignUpRepositoryImpl.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.wap.wapp.core.data.repository.auth - -import com.wap.wapp.core.network.source.auth.SignUpDataSource -import javax.inject.Inject - -class SignUpRepositoryImpl @Inject constructor( - private val signUpDataSource: SignUpDataSource, -) : SignUpRepository { - override suspend fun validationWapCode(code: String): Result = - signUpDataSource.validationWapCode(code) -} diff --git a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt index e3450ddbb..58bb8913f 100644 --- a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt +++ b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt @@ -1,6 +1,5 @@ package com.wap.wapp.core.domain.usecase.auth -import com.wap.wapp.core.data.repository.auth.SignUpRepository import com.wap.wapp.core.domain.model.CodeValidation import javax.inject.Inject diff --git a/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt index e6aeaab2b..b5ce3ec86 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/di/NetworkModule.kt @@ -6,8 +6,6 @@ import com.wap.wapp.core.network.source.attendancestatus.AttendanceStatusDataSou import com.wap.wapp.core.network.source.attendancestatus.AttendanceStatusDataSourceImpl import com.wap.wapp.core.network.source.auth.AuthDataSource import com.wap.wapp.core.network.source.auth.AuthDataSourceImpl -import com.wap.wapp.core.network.source.auth.SignUpDataSource -import com.wap.wapp.core.network.source.auth.SignUpDataSourceImpl import com.wap.wapp.core.network.source.event.EventDataSource import com.wap.wapp.core.network.source.event.EventDataSourceImpl import com.wap.wapp.core.network.source.management.ManagementDataSource @@ -75,10 +73,4 @@ abstract class NetworkModule { abstract fun bindsAttendanceStatusDataSource( attendanceStatueDataSourceImpl: AttendanceStatusDataSourceImpl, ): AttendanceStatusDataSource - - @Binds - @Singleton - abstract fun bindsSignUpDataSource( - signUpDataSourceImpl: SignUpDataSourceImpl, - ): SignUpDataSource } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt index 9e859b0ed..e5e2b3ced 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt @@ -6,4 +6,6 @@ interface AuthDataSource { suspend fun deleteUser(): Result suspend fun isUserSignIn(): Result + + suspend fun validationWapCode(code: String): Result } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt index 5b4489edf..14aa4ec9c 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt @@ -2,6 +2,8 @@ package com.wap.wapp.core.network.source.auth import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth.AuthStateListener +import com.google.firebase.firestore.FirebaseFirestore +import com.wap.wapp.core.network.constant.CODES_COLLECTION import com.wap.wapp.core.network.utils.await import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine @@ -9,6 +11,7 @@ import javax.inject.Inject class AuthDataSourceImpl @Inject constructor( private val firebaseAuth: FirebaseAuth, + private val firebaseFirestore: FirebaseFirestore, ) : AuthDataSource { override suspend fun signOut(): Result = runCatching { firebaseAuth.signOut() @@ -45,4 +48,13 @@ class AuthDataSourceImpl @Inject constructor( } } } + + override suspend fun validationWapCode(code: String): Result = runCatching { + val result = firebaseFirestore.collection(CODES_COLLECTION) + .whereEqualTo("user", code) + .get() + .await() + + result.isEmpty.not() + } } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt deleted file mode 100644 index b0e6a71e8..000000000 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSource.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.wap.wapp.core.network.source.auth - -interface SignUpDataSource { - suspend fun validationWapCode(code: String): Result -} diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt deleted file mode 100644 index eb32fa1b2..000000000 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/SignUpDataSourceImpl.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.wap.wapp.core.network.source.auth - -import com.google.firebase.firestore.FirebaseFirestore -import com.wap.wapp.core.network.constant.CODES_COLLECTION -import com.wap.wapp.core.network.utils.await -import javax.inject.Inject - -class SignUpDataSourceImpl @Inject constructor( - private val firebaseFirestore: FirebaseFirestore, -) : SignUpDataSource { - override suspend fun validationWapCode(code: String): Result = runCatching { - val result = firebaseFirestore.collection(CODES_COLLECTION) - .whereEqualTo("user", code) - .get() - .await() - - result.isEmpty.not() - } -} From 57b52b73990fb46d198390bc692e4439bb5cf1e5 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 12:34:10 +0900 Subject: [PATCH 18/23] [REFACTOR] #141 : validationWapCode -> validateMemberCode --- .../com/wap/wapp/core/data/repository/auth/AuthRepository.kt | 2 +- .../wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt | 4 ++-- .../com/wap/wapp/core/network/source/auth/AuthDataSource.kt | 2 +- .../wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt index ba276f183..daecb5050 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt @@ -7,5 +7,5 @@ interface AuthRepository { suspend fun isUserSignIn(): Result - suspend fun validationWapCode(code: String): Result + suspend fun validateMemberCode(code: String): Result } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt index 4ca9e1ed5..635eda707 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt @@ -12,6 +12,6 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun isUserSignIn(): Result = authDataSource.isUserSignIn() - override suspend fun validationWapCode(code: String): Result = - authDataSource.validationWapCode(code) + override suspend fun validateMemberCode(code: String): Result = + authDataSource.validateMemberCode(code) } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt index e5e2b3ced..48ef7f0bf 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt @@ -7,5 +7,5 @@ interface AuthDataSource { suspend fun isUserSignIn(): Result - suspend fun validationWapCode(code: String): Result + suspend fun validateMemberCode(code: String): Result } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt index 14aa4ec9c..cc5f46d19 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt @@ -49,7 +49,7 @@ class AuthDataSourceImpl @Inject constructor( } } - override suspend fun validationWapCode(code: String): Result = runCatching { + override suspend fun validateMemberCode(code: String): Result = runCatching { val result = firebaseFirestore.collection(CODES_COLLECTION) .whereEqualTo("user", code) .get() From 65faa1bbc72feef74fe209b2584f7133acdadb6d Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 12:35:39 +0900 Subject: [PATCH 19/23] [REFACTOR] #141 : validationUserInformation -> validateUserInformation --- .../main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt | 2 +- .../java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index ee746a630..e5543bb56 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -213,7 +213,7 @@ internal fun SignUpScreen( Spacer(modifier = Modifier.weight(1f)) Button( - onClick = { viewModel.validationUserInformation() }, + onClick = { viewModel.validateUserInformation() }, modifier = Modifier .fillMaxWidth() .height(48.dp), diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 5dc364e09..1610f5993 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -46,7 +46,7 @@ class SignUpViewModel @Inject constructor( MutableStateFlow(R.string.sign_up_dialog_hint) val errorSupportingText: StateFlow = _errorSupportingText.asStateFlow() - fun validationUserInformation() = viewModelScope.launch { + fun validateUserInformation() = viewModelScope.launch { if (!isValidStudentId()) { _signUpEventFlow.emit( SignUpEvent.Failure(IllegalStateException("학번은 9자리로만 입력하실 수 있어요!")), From 6a9389f71c0953a3f78011c9d1e5c714b54e40d1 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 12:57:05 +0900 Subject: [PATCH 20/23] =?UTF-8?q?[REFACTOR]=20#141=20:=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EA=B0=80=EC=9E=85=20=EB=93=B1=EB=A1=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81,=20=EB=A9=A4=EB=B2=84=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wapp/feature/auth/signup/SignUpScreen.kt | 6 ++-- .../feature/auth/signup/SignUpViewModel.kt | 36 ++++++++++--------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index e5543bb56..a8c98de69 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -80,10 +80,12 @@ internal fun SignUpScreen( when (it) { is SignUpEvent.SignUpSuccess -> navigateToNotice() - is SignUpEvent.ValidationSuccess -> { + is SignUpEvent.ValidateUserInformationSuccess -> { showCodeValidationDialog = true } + is SignUpEvent.ValidateMemberCodeSuccess -> viewModel.postUserProfile() + is SignUpEvent.Failure -> snackBarHostState.showSnackbar(message = it.throwable.toSupportingText()) } @@ -106,7 +108,7 @@ internal fun SignUpScreen( CodeValidationDialog( code = viewModel.wapMemberCode.collectAsStateWithLifecycle().value, setValidationCode = viewModel::setWapMemberCode, - onConfirmRequest = viewModel::postUserProfile, + onConfirmRequest = viewModel::validateMemberCode, onDismissRequest = { showCodeValidationDialog = false }, isError = viewModel.isError.collectAsStateWithLifecycle().value, supportingText = diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 1610f5993..c38ca1aec 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope import com.wap.wapp.core.domain.model.CodeValidation import com.wap.wapp.core.domain.usecase.auth.ValidateWapMemberCodeUseCase import com.wap.wapp.core.domain.usecase.user.PostUserProfileUseCase +import com.wap.wapp.feature.auth.R import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -14,7 +15,6 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject -import com.wap.wapp.feature.auth.R @HiltViewModel class SignUpViewModel @Inject constructor( @@ -54,24 +54,14 @@ class SignUpViewModel @Inject constructor( return@launch } - _signUpEventFlow.emit(SignUpEvent.ValidationSuccess) + _signUpEventFlow.emit(SignUpEvent.ValidateUserInformationSuccess) } - fun postUserProfile() = viewModelScope.launch { + fun validateMemberCode() = viewModelScope.launch { validateWapMemberCodeUseCase(_wapMemberCode.value).onSuccess { when (it) { - CodeValidation.VALID -> { - postUserProfileUseCase( - userName = _signUpName.value, - studentId = _signUpStudentId.value, - registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", - ).onSuccess { - _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) - }.onFailure { throwable -> - _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) - _isError.value = true - } - } + CodeValidation.VALID -> + _signUpEventFlow.emit(SignUpEvent.ValidateMemberCodeSuccess) CodeValidation.INVALID -> { _isError.value = true @@ -79,11 +69,22 @@ class SignUpViewModel @Inject constructor( } } }.onFailure { throwable -> - _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) _isError.value = true + _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) } } + suspend fun postUserProfile() = postUserProfileUseCase( + userName = _signUpName.value, + studentId = _signUpStudentId.value, + registeredAt = "${_signUpYear.value} ${_signUpSemester.value}", + ).onSuccess { + _signUpEventFlow.emit(SignUpEvent.SignUpSuccess) + }.onFailure { throwable -> + _signUpEventFlow.emit(SignUpEvent.Failure(throwable)) + _isError.value = true + } + fun isValidStudentId(): Boolean = (_signUpStudentId.value.length == STUDENT_ID_LENGTH) fun setName(name: String) { _signUpName.value = name } @@ -97,7 +98,8 @@ class SignUpViewModel @Inject constructor( fun setWapMemberCode(code: String) { _wapMemberCode.value = code } sealed class SignUpEvent { - data object ValidationSuccess : SignUpEvent() + data object ValidateUserInformationSuccess : SignUpEvent() + data object ValidateMemberCodeSuccess : SignUpEvent() data object SignUpSuccess : SignUpEvent() data class Failure(val throwable: Throwable) : SignUpEvent() } From a955f681492249d8460e407b725127bcbb7986d9 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 12:58:39 +0900 Subject: [PATCH 21/23] =?UTF-8?q?[REFACTOR]=20#141=20:=20wapMemberCode=20-?= =?UTF-8?q?>=20MemberCode=20=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt | 2 +- .../com/wap/wapp/feature/auth/signup/SignUpViewModel.kt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index a8c98de69..942a7295d 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -106,7 +106,7 @@ internal fun SignUpScreen( ) { if (showCodeValidationDialog) { CodeValidationDialog( - code = viewModel.wapMemberCode.collectAsStateWithLifecycle().value, + code = viewModel.memberCode.collectAsStateWithLifecycle().value, setValidationCode = viewModel::setWapMemberCode, onConfirmRequest = viewModel::validateMemberCode, onDismissRequest = { showCodeValidationDialog = false }, diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index c38ca1aec..6a85625c4 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -36,8 +36,8 @@ class SignUpViewModel @Inject constructor( private val _signUpSemester: MutableStateFlow = MutableStateFlow(FIRST_SEMESTER) val signUpSemester: StateFlow = _signUpSemester.asStateFlow() - private val _wapMemberCode: MutableStateFlow = MutableStateFlow("") - val wapMemberCode: StateFlow = _wapMemberCode.asStateFlow() + private val _memberCode: MutableStateFlow = MutableStateFlow("") + val memberCode: StateFlow = _memberCode.asStateFlow() private val _isError: MutableStateFlow = MutableStateFlow(false) val isError: StateFlow get() = _isError @@ -58,7 +58,7 @@ class SignUpViewModel @Inject constructor( } fun validateMemberCode() = viewModelScope.launch { - validateWapMemberCodeUseCase(_wapMemberCode.value).onSuccess { + validateWapMemberCodeUseCase(_memberCode.value).onSuccess { when (it) { CodeValidation.VALID -> _signUpEventFlow.emit(SignUpEvent.ValidateMemberCodeSuccess) @@ -95,7 +95,7 @@ class SignUpViewModel @Inject constructor( fun setSemester(semester: String) { _signUpSemester.value = semester } - fun setWapMemberCode(code: String) { _wapMemberCode.value = code } + fun setWapMemberCode(code: String) { _memberCode.value = code } sealed class SignUpEvent { data object ValidateUserInformationSuccess : SignUpEvent() From 896f09006f0041bde18d8f18548c57485c455f4c Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 13:09:56 +0900 Subject: [PATCH 22/23] =?UTF-8?q?[REFACTOR]=20#141=20:=20validate=20->=20c?= =?UTF-8?q?heck=EB=A1=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wapp/core/data/repository/auth/AuthRepository.kt | 2 +- .../core/data/repository/auth/AuthRepositoryImpl.kt | 4 ++-- .../repository/management/ManagementRepository.kt | 2 +- .../management/ManagementRepositoryImpl.kt | 4 ++-- ...emberCodeUseCase.kt => CheckMemberCodeUseCase.kt} | 7 ++++--- ...tCodeUseCase.kt => CheckManagementCodeUseCase.kt} | 4 ++-- .../wapp/core/network/source/auth/AuthDataSource.kt | 2 +- .../core/network/source/auth/AuthDataSourceImpl.kt | 2 +- .../source/management/ManagementDataSource.kt | 2 +- .../source/management/ManagementDataSourceImpl.kt | 2 +- .../com/wap/wapp/feature/auth/signup/SignUpScreen.kt | 4 ++-- .../wap/wapp/feature/auth/signup/SignUpViewModel.kt | 12 ++++++------ .../validation/ManagementValidationScreen.kt | 2 +- .../validation/ManagementValidationViewModel.kt | 12 +++++------- 14 files changed, 30 insertions(+), 31 deletions(-) rename core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/{ValidateWapMemberCodeUseCase.kt => CheckMemberCodeUseCase.kt} (69%) rename core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/{ValidateManagementCodeUseCase.kt => CheckManagementCodeUseCase.kt} (89%) diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt index daecb5050..ac988f856 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepository.kt @@ -7,5 +7,5 @@ interface AuthRepository { suspend fun isUserSignIn(): Result - suspend fun validateMemberCode(code: String): Result + suspend fun checkMemberCode(code: String): Result } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt index 635eda707..d79a21bab 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/auth/AuthRepositoryImpl.kt @@ -12,6 +12,6 @@ class AuthRepositoryImpl @Inject constructor( override suspend fun isUserSignIn(): Result = authDataSource.isUserSignIn() - override suspend fun validateMemberCode(code: String): Result = - authDataSource.validateMemberCode(code) + override suspend fun checkMemberCode(code: String): Result = + authDataSource.checkMemberCode(code) } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepository.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepository.kt index 7d7cec07b..8c6141546 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepository.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepository.kt @@ -5,7 +5,7 @@ interface ManagementRepository { suspend fun postManager(userId: String): Result - suspend fun getManagementCode(code: String): Result + suspend fun checkManagementCode(code: String): Result suspend fun deleteManager(userId: String): Result } diff --git a/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepositoryImpl.kt b/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepositoryImpl.kt index eb7d4b328..440ae1566 100644 --- a/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepositoryImpl.kt +++ b/core/data/src/main/java/com/wap/wapp/core/data/repository/management/ManagementRepositoryImpl.kt @@ -12,8 +12,8 @@ class ManagementRepositoryImpl @Inject constructor( override suspend fun postManager(userId: String): Result = managementDataSource.postManager(userId) - override suspend fun getManagementCode(code: String): Result = - managementDataSource.getManagementCode(code) + override suspend fun checkManagementCode(code: String): Result = + managementDataSource.checkManagementCode(code) override suspend fun deleteManager(userId: String): Result = managementDataSource.deleteManager(userId) diff --git a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/CheckMemberCodeUseCase.kt similarity index 69% rename from core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt rename to core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/CheckMemberCodeUseCase.kt index 58bb8913f..0dcf0d647 100644 --- a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/ValidateWapMemberCodeUseCase.kt +++ b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/auth/CheckMemberCodeUseCase.kt @@ -1,13 +1,14 @@ package com.wap.wapp.core.domain.usecase.auth +import com.wap.wapp.core.data.repository.auth.AuthRepository import com.wap.wapp.core.domain.model.CodeValidation import javax.inject.Inject -class ValidateWapMemberCodeUseCase @Inject constructor( - private val signUpRepository: SignUpRepository, +class CheckMemberCodeUseCase @Inject constructor( + private val authRepository: AuthRepository, ) { suspend operator fun invoke(code: String): Result = runCatching { - signUpRepository.validationWapCode(code).fold( + authRepository.checkMemberCode(code).fold( onSuccess = { isValid -> if (isValid) { return@fold CodeValidation.VALID diff --git a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/ValidateManagementCodeUseCase.kt b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/CheckManagementCodeUseCase.kt similarity index 89% rename from core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/ValidateManagementCodeUseCase.kt rename to core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/CheckManagementCodeUseCase.kt index d9a52fcb9..999cdd644 100644 --- a/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/ValidateManagementCodeUseCase.kt +++ b/core/domain/src/main/java/com/wap/wapp/core/domain/usecase/management/CheckManagementCodeUseCase.kt @@ -7,12 +7,12 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class ValidateManagementCodeUseCase @Inject constructor( +class CheckManagementCodeUseCase @Inject constructor( private val managementRepository: ManagementRepository, private val userRepository: UserRepository, ) { suspend operator fun invoke(code: String): Result = runCatching { - managementRepository.getManagementCode(code) + managementRepository.checkManagementCode(code) .onSuccess { isValid -> if (isValid.not()) { // 코드가 틀렸을 경우 return@runCatching CodeValidation.INVALID diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt index 48ef7f0bf..06bd34157 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSource.kt @@ -7,5 +7,5 @@ interface AuthDataSource { suspend fun isUserSignIn(): Result - suspend fun validateMemberCode(code: String): Result + suspend fun checkMemberCode(code: String): Result } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt index cc5f46d19..84def2902 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/auth/AuthDataSourceImpl.kt @@ -49,7 +49,7 @@ class AuthDataSourceImpl @Inject constructor( } } - override suspend fun validateMemberCode(code: String): Result = runCatching { + override suspend fun checkMemberCode(code: String): Result = runCatching { val result = firebaseFirestore.collection(CODES_COLLECTION) .whereEqualTo("user", code) .get() diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSource.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSource.kt index 210825677..866f164b1 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSource.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSource.kt @@ -5,7 +5,7 @@ interface ManagementDataSource { suspend fun postManager(userId: String): Result - suspend fun getManagementCode(code: String): Result + suspend fun checkManagementCode(code: String): Result suspend fun deleteManager(userId: String): Result } diff --git a/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSourceImpl.kt b/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSourceImpl.kt index 9437382d3..feb8599ef 100644 --- a/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSourceImpl.kt +++ b/core/network/src/main/java/com/wap/wapp/core/network/source/management/ManagementDataSourceImpl.kt @@ -29,7 +29,7 @@ class ManagementDataSourceImpl @Inject constructor( .await() } - override suspend fun getManagementCode(code: String): Result = runCatching { + override suspend fun checkManagementCode(code: String): Result = runCatching { val result = firebaseFirestore.collection(CODES_COLLECTION) .whereEqualTo("management", code) .get() diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt index 942a7295d..4be640d33 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpScreen.kt @@ -84,7 +84,7 @@ internal fun SignUpScreen( showCodeValidationDialog = true } - is SignUpEvent.ValidateMemberCodeSuccess -> viewModel.postUserProfile() + is SignUpEvent.CheckMemberCodeSuccess -> viewModel.postUserProfile() is SignUpEvent.Failure -> snackBarHostState.showSnackbar(message = it.throwable.toSupportingText()) @@ -108,7 +108,7 @@ internal fun SignUpScreen( CodeValidationDialog( code = viewModel.memberCode.collectAsStateWithLifecycle().value, setValidationCode = viewModel::setWapMemberCode, - onConfirmRequest = viewModel::validateMemberCode, + onConfirmRequest = viewModel::checkMemberCode, onDismissRequest = { showCodeValidationDialog = false }, isError = viewModel.isError.collectAsStateWithLifecycle().value, supportingText = diff --git a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt index 6a85625c4..5f29039e7 100644 --- a/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt +++ b/feature/auth/src/main/java/com/wap/wapp/feature/auth/signup/SignUpViewModel.kt @@ -3,7 +3,7 @@ package com.wap.wapp.feature.auth.signup import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.wap.wapp.core.domain.model.CodeValidation -import com.wap.wapp.core.domain.usecase.auth.ValidateWapMemberCodeUseCase +import com.wap.wapp.core.domain.usecase.auth.CheckMemberCodeUseCase import com.wap.wapp.core.domain.usecase.user.PostUserProfileUseCase import com.wap.wapp.feature.auth.R import dagger.hilt.android.lifecycle.HiltViewModel @@ -19,7 +19,7 @@ import javax.inject.Inject @HiltViewModel class SignUpViewModel @Inject constructor( private val postUserProfileUseCase: PostUserProfileUseCase, - private val validateWapMemberCodeUseCase: ValidateWapMemberCodeUseCase, + private val checkMemberCodeUseCase: CheckMemberCodeUseCase, ) : ViewModel() { private val _signUpEventFlow = MutableSharedFlow() val signUpEventFlow: SharedFlow = _signUpEventFlow.asSharedFlow() @@ -57,11 +57,11 @@ class SignUpViewModel @Inject constructor( _signUpEventFlow.emit(SignUpEvent.ValidateUserInformationSuccess) } - fun validateMemberCode() = viewModelScope.launch { - validateWapMemberCodeUseCase(_memberCode.value).onSuccess { + fun checkMemberCode() = viewModelScope.launch { + checkMemberCodeUseCase(_memberCode.value).onSuccess { when (it) { CodeValidation.VALID -> - _signUpEventFlow.emit(SignUpEvent.ValidateMemberCodeSuccess) + _signUpEventFlow.emit(SignUpEvent.CheckMemberCodeSuccess) CodeValidation.INVALID -> { _isError.value = true @@ -99,7 +99,7 @@ class SignUpViewModel @Inject constructor( sealed class SignUpEvent { data object ValidateUserInformationSuccess : SignUpEvent() - data object ValidateMemberCodeSuccess : SignUpEvent() + data object CheckMemberCodeSuccess : SignUpEvent() data object SignUpSuccess : SignUpEvent() data class Failure(val throwable: Throwable) : SignUpEvent() } diff --git a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationScreen.kt b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationScreen.kt index 7184b20a9..9f70cdcaf 100644 --- a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationScreen.kt +++ b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationScreen.kt @@ -93,7 +93,7 @@ fun ManagementValidationScreen( Spacer(modifier = Modifier.padding(vertical = 8.dp)) WappButton( - onClick = { viewModel.validateManagementCode() }, + onClick = { viewModel.checkManagementCode() }, isEnabled = code.isNotBlank(), modifier = Modifier.padding(horizontal = 32.dp), ) diff --git a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt index 02a880556..2e474975c 100644 --- a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt +++ b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt @@ -3,7 +3,7 @@ package com.wap.wapp.feature.management.validation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.wap.wapp.core.domain.model.CodeValidation -import com.wap.wapp.core.domain.usecase.management.ValidateManagementCodeUseCase +import com.wap.wapp.core.domain.usecase.management.CheckManagementCodeUseCase import com.wap.wapp.feature.management.R import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -13,7 +13,7 @@ import javax.inject.Inject @HiltViewModel class ManagementValidationViewModel @Inject constructor( - private val validateManagementCodeUseCase: ValidateManagementCodeUseCase, + private val checkManagementCodeUseCase: CheckManagementCodeUseCase, ) : ViewModel() { private val _managementCodeUiState: MutableStateFlow = MutableStateFlow(ManagementCodeUiState.Init) @@ -30,9 +30,9 @@ class ManagementValidationViewModel @Inject constructor( MutableStateFlow(R.string.management_dialog_hint) val errorSupportingText: StateFlow get() = _errorSupportingText - fun validateManagementCode() { + fun checkManagementCode() { viewModelScope.launch { - validateManagementCodeUseCase(_managementCode.value) + checkManagementCodeUseCase(_managementCode.value) .onSuccess { when (it) { CodeValidation.VALID -> { @@ -51,9 +51,7 @@ class ManagementValidationViewModel @Inject constructor( } } - fun setManagementCode(code: String) { - _managementCode.value = code - } + fun setManagementCode(code: String) { _managementCode.value = code } sealed class ManagementCodeUiState { data object Init : ManagementCodeUiState() From 8a3e41ba8c2f14eb14fe3d7f1f79dbcef7a91fd6 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Sun, 3 Mar 2024 13:15:29 +0900 Subject: [PATCH 23/23] =?UTF-8?q?[REFACTOR]=20#141=20:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EC=8A=A4=EC=BD=94=ED=94=84=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ManagementValidationViewModel.kt | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt index 2e474975c..77551333f 100644 --- a/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt +++ b/feature/management/src/main/java/com/wap/wapp/feature/management/validation/ManagementValidationViewModel.kt @@ -30,25 +30,23 @@ class ManagementValidationViewModel @Inject constructor( MutableStateFlow(R.string.management_dialog_hint) val errorSupportingText: StateFlow get() = _errorSupportingText - fun checkManagementCode() { - viewModelScope.launch { - checkManagementCodeUseCase(_managementCode.value) - .onSuccess { - when (it) { - CodeValidation.VALID -> { - _managementCodeUiState.value = ManagementCodeUiState.Success - } - - CodeValidation.INVALID -> { - _isError.value = true - _errorSupportingText.value = R.string.management_incorrect_code - } + fun checkManagementCode() = viewModelScope.launch { + checkManagementCodeUseCase(_managementCode.value) + .onSuccess { + when (it) { + CodeValidation.VALID -> { + _managementCodeUiState.value = ManagementCodeUiState.Success + } + + CodeValidation.INVALID -> { + _isError.value = true + _errorSupportingText.value = R.string.management_incorrect_code } } - .onFailure { throwable -> - _managementCodeUiState.value = ManagementCodeUiState.Failure(throwable) - } - } + } + .onFailure { throwable -> + _managementCodeUiState.value = ManagementCodeUiState.Failure(throwable) + } } fun setManagementCode(code: String) { _managementCode.value = code }