Skip to content

Commit

Permalink
#219 수정한 DataSource에 맞게 SignRepository 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
pknujsp committed Mar 11, 2024
1 parent a94249a commit 221d45c
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import com.android.mediproject.core.network.datasource.news.recallsuspension.Rec
import com.android.mediproject.core.network.datasource.news.recallsuspension.RecallSaleSuspensionListDataSourceImpl
import com.android.mediproject.core.network.datasource.news.safetynotification.SafetyNotificationDataSource
import com.android.mediproject.core.network.datasource.sign.LoginDataSource
import com.android.mediproject.core.network.datasource.sign.SignupDataSource
import com.android.mediproject.core.network.datasource.user.UserDataSource
import dagger.Module
import dagger.Provides
Expand Down Expand Up @@ -114,9 +115,10 @@ object RepositoryModule {
@Singleton
internal fun providesSignRepositoryImpl(
loginDataSource: LoginDataSource,
signupDataSource: SignupDataSource,
appDataStore: AppDataStore,
accountSessionRepository: AccountSessionRepository,
): SignRepository = SignRepositoryImpl(loginDataSource, accountSessionRepository, appDataStore)
): SignRepository = SignRepositoryImpl(loginDataSource, signupDataSource, accountSessionRepository, appDataStore)


@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ import com.android.mediproject.core.model.sign.SignUpParameter

interface SignRepository {
suspend fun login(loginParameter: LoginParameter): LoginState
suspend fun signUp(signUpParameter: SignUpParameter): Result<Boolean>
suspend fun signUp(signUpParameter: SignUpParameter): SignUpState

suspend fun isValidEmail(email: String): Boolean
suspend fun signOut()
suspend fun verifyEmail(email: String, code: String): Result<Boolean>
suspend fun logout()
suspend fun confirmEmail(email: String, code: String): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,23 @@ import com.android.mediproject.core.datastore.AppDataStore
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter
import com.android.mediproject.core.network.datasource.sign.LoginDataSource
import com.android.mediproject.core.network.datasource.sign.LoginRequest
import com.android.mediproject.core.network.datasource.sign.SignUpRequest
import com.android.mediproject.core.network.datasource.sign.SignupDataSource

internal class SignRepositoryImpl(
private val loginDataSource: LoginDataSource,
private val signupDataSource: SignupDataSource,
private val accountSessionRepository: AccountSessionRepository,
private val appDataStore: AppDataStore,
) : SignRepository {

override suspend fun login(loginParameter: LoginParameter) = loginDataSource.logIn(loginParameter).fold(
override suspend fun login(loginParameter: LoginParameter) = loginDataSource.login(
LoginRequest(
loginParameter.email,
loginParameter.password,
),
).fold(
onSuccess = {
accountSessionRepository.updateSession(it.userSession)
accountSessionRepository.updateAccount(loginParameter.email, it.userSession.username)
Expand All @@ -29,20 +38,29 @@ internal class SignRepositoryImpl(
},
)

override suspend fun signUp(signUpParameter: SignUpParameter): Result<Boolean> {
loginDataSource.signUp(signUpParameter).onSuccess {
override suspend fun signUp(signUpParameter: SignUpParameter) = signupDataSource.signUp(
SignUpRequest(
signUpParameter.email,
signUpParameter.password,
signUpParameter.nickName,
),
).fold(
onSuccess = {
appDataStore.saveSkipIntro(true)
}
return Result.success(true)
}
SignUpState.Success
},
onFailure = { exception ->
SignUpState.Failed(exception)
},
)

override suspend fun signOut() {
override suspend fun logout() {
accountSessionRepository.updateSession(null)
loginDataSource.logout()
}

override suspend fun verifyEmail(email: String, code: String): Result<Boolean> {
return loginDataSource.vertifyEmail(email, code)
override suspend fun confirmEmail(email: String, code: String): Result<Unit> {
return signupDataSource.confirmEmail(email, code)
}
}

Expand All @@ -51,3 +69,9 @@ sealed interface LoginState {
data object NotVerified : LoginState
data class Failed(val exception: Throwable) : LoginState
}

sealed interface SignUpState {
data object Success : SignUpState
data class Failed(val exception: Throwable) : SignUpState

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class EditUserAccountUseCase @Inject constructor(

suspend fun withdrawal() {
userRepository.withdrawal()
signRepository.signOut()
signRepository.logout()
appDataStore.clearMyAccountInfo()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,18 @@ interface SignupDataSource {
suspend fun resendConfirmationCode(cognitoUser: CognitoUser): Result<ConfirmationCodeDeliveryDetails>
}

private const val USER_NAME = "user_name"

class SignUpRequest(
val email: String,
private val password: ByteArray,
val cognitoUserAttributes: CognitoUserAttributes,
val nickName: String,
) {
val passwordString: String get() = password.decodeToString()

val attr = CognitoUserAttributes().apply {
this.addAttribute(USER_NAME, nickName)
}
}

data class SignUpResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@ import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine

private const val USER_NAME = "user_name"

class SignupDataSourceImpl(
private val userPool: CognitoUserPool,
) : SignupDataSource {

override suspend fun signUp(request: SignUpRequest) = suspendCoroutine { continuation ->
userPool.signUp(
request.email, request.passwordString, request.cognitoUserAttributes, null,
request.email, request.passwordString, request.attr, null,
object : SignUpHandler {
override fun onSuccess(cognitoUser: CognitoUser, signUpResult: SignUpResult) {
val response = SignUpResponse(cognitoUser, signUpResult)
Expand Down Expand Up @@ -70,5 +69,5 @@ class SignupDataSourceImpl(
},
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class VerificationViewModel @Inject constructor(

override fun onClickWithText(text: String) {
viewModelScope.launch {
withContext(defaultDispatcher) { signRepository.verifyEmail(email.value, text) }.onSuccess {
withContext(defaultDispatcher) { signRepository.confirmEmail(email.value, text) }.onSuccess {
_verificationState.value = VerificationState.Verified
}.onFailure {
_verificationState.value = VerificationState.VerifyFailed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class MyPageViewModel @Inject constructor(
fun signUp() = event(MyPageEvent.SignUp)

fun signOut() = viewModelScope.launch {
signUseCase.signOut()
signUseCase.logout()
loadTokens()
}

Expand Down

0 comments on commit 221d45c

Please sign in to comment.