Skip to content

Commit

Permalink
#219 로그인/회원가입 뷰모델 로직 새로운 api에 맞게 수정, 가입 이메일 검증 로직 VerifyEmail.kt추가
Browse files Browse the repository at this point in the history
  • Loading branch information
pknujsp committed Mar 11, 2024
1 parent 895d963 commit da0254c
Show file tree
Hide file tree
Showing 19 changed files with 131 additions and 188 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.android.mediproject.core.common.util

private val emailReg: String by lazy {
"^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$"
}
private const val EMAIL_REGX: String = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$"
private const val PW_MIN_LENGTH = 4
private const val PW_MAX_LENGTH = 16

fun isEmailValid(email: CharSequence) = email.matches(
Regex(emailReg)
Regex(EMAIL_REGX),
)

fun isPasswordValid(password: CharSequence) = (password.length in 4..16)
fun isPasswordValid(password: CharSequence) = (password.length in PW_MIN_LENGTH..PW_MAX_LENGTH)
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,19 @@ object RepositoryModule {

@Provides
@Singleton
fun providesSignRepositoryImpl(
internal fun providesSignRepositoryImpl(
signDataSource: SignDataSource,
appDataStore: AppDataStore,
userInfoRepository: UserInfoRepository,
): SignRepositoryImpl = SignRepositoryImpl(signDataSource, appDataStore, userInfoRepository)

@Provides
@Singleton
fun providesSignRepository(
internal fun providesSignRepository(
signRepositoryImpl: SignRepositoryImpl,
): SignRepository = signRepositoryImpl

@Provides
@Singleton
fun providesTokenRepository(
internal fun providesTokenRepository(
signRepositoryImpl: SignRepositoryImpl,
): TokenRepository = signRepositoryImpl

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.android.mediproject.core.data.sign


import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.model.requestparameters.SignUpParameter
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter

interface SignRepository {
suspend fun login(loginParameter: LoginParameter): Result<Boolean>

suspend fun signUp(signUpParameter: SignUpParameter): Result<Boolean>

suspend fun signOut()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,34 @@ package com.android.mediproject.core.data.sign
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession
import com.android.mediproject.core.data.user.UserInfoRepository
import com.android.mediproject.core.datastore.AppDataStore
import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.model.requestparameters.SignUpParameter
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter
import com.android.mediproject.core.model.user.AccountState
import com.android.mediproject.core.network.datasource.sign.SignDataSource

class SignRepositoryImpl(
internal class SignRepositoryImpl(
private val signDataSource: SignDataSource,
private val appDataStore: AppDataStore,
private val userInfoRepository: UserInfoRepository,
) : SignRepository, TokenRepository {

private var _session: CognitoUserSession? = null

override val session: CognitoUserSession? get() = _session

override suspend fun login(loginParameter: LoginParameter): Result<Boolean> {
val result = signDataSource.logIn(loginParameter)
result.onSuccess {
signDataSource.logIn(loginParameter).onSuccess {
_session = it.userSession
appDataStore.run {
saveSkipIntro(true)
userInfoRepository.updateMyAccountInfo(
AccountState.SignedIn(
myId = 0L,
email = loginParameter.email.contentToString(),
email = loginParameter.email,
myNickName = it.userSession.username,
),
)
saveMyAccountInfo(
userEmail = loginParameter.email.contentToString(),
userEmail = loginParameter.email,
nickName = it.userSession.username,
myAccountId = 0L,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ import com.android.mediproject.core.data.comments.CommentsRepository
import com.android.mediproject.core.model.comments.Comment
import com.android.mediproject.core.model.comments.MyCommentsListResponse
import com.android.mediproject.core.model.comments.toComment
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.flowOf
import javax.inject.Inject
import javax.inject.Singleton

Expand All @@ -20,8 +18,6 @@ class GetCommentsUseCase @Inject constructor(
private val commentsRepository: CommentsRepository,
) {

val scrollChannel = Channel<Unit>(capacity = 1, onBufferOverflow = BufferOverflow.SUSPEND)

/**
* 약에 대한 댓글을 가져오는 메서드입니다.
*
Expand Down Expand Up @@ -52,7 +48,5 @@ class GetCommentsUseCase @Inject constructor(
/**
* 내가 작성한 댓글을 가져오는 메서드입니다.
*/
fun getMyCommentsList(): Flow<Result<MyCommentsListResponse>> = commentsRepository.getMyCommentsList().mapLatest { result ->
result.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) })
}
fun getMyCommentsList(): Flow<Result<MyCommentsListResponse>> = flowOf(Result.success(MyCommentsListResponse(listOf())))
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package com.android.mediproject.core.domain

import android.util.Log
import com.android.mediproject.core.data.token.TokenRepository
import com.android.mediproject.core.data.sign.TokenRepository
import com.android.mediproject.core.model.token.CurrentTokens
import com.android.mediproject.core.model.token.TokenState
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.flow.collectLatest
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class GetTokenUseCase @Inject constructor(private val tokenRepository: TokenRepository) {

operator fun invoke(): Flow<TokenState<CurrentTokens>> = channelFlow {
tokenRepository.getCurrentTokens().collectLatest {
Log.d("wap", "GetTokenUseCase$it")
trySend(it)
}
trySend(TokenState.Empty)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.android.mediproject.core.domain

import com.android.mediproject.core.data.sign.SignRepository
import com.android.mediproject.core.data.user.UserInfoRepository
import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.model.requestparameters.SignUpParameter
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter
import com.android.mediproject.core.model.user.AccountState
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
Expand All @@ -15,19 +15,15 @@ import javax.inject.Singleton
class SignUseCase @Inject constructor(
private val signRepository: SignRepository, private val userInfoRepository: UserInfoRepository,
) {
fun login(loginParameter: LoginParameter): Flow<Result<Unit>> = signRepository.login(loginParameter)
suspend fun login(loginParameter: LoginParameter): Result<Boolean> = signRepository.login(loginParameter)

fun signUp(signUpParameter: SignUpParameter): Flow<Result<Unit>> = signRepository.signUp(signUpParameter)
suspend fun signUp(signUpParameter: SignUpParameter): Result<Boolean> = signRepository.signUp(signUpParameter)

fun signOut() = signRepository.signOut()
suspend fun signOut() = signRepository.signOut()

val savedEmail: Flow<String> = channelFlow {
userInfoRepository.myAccountInfo.collectLatest {
if (it is AccountState.SignedIn) {
trySend(it.email)
} else {
trySend("")
}
trySend(if (it is AccountState.SignedIn) it.email else "")
}
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,26 @@
package com.android.mediproject.core.model.requestparameters
package com.android.mediproject.core.model.sign


/**
* 로그인을 위한 파라미터 클래스입니다.
*
* @property email 이메일
* @property password 비밀번호
* @property isSavedEmail 이메일 저장 여부
*/
data class LoginParameter(
val email: CharArray, val password: CharArray, val isSavedEmail: Boolean
val email: String, val password: ByteArray, val isSavedEmail: Boolean,
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as LoginParameter

if (!email.contentEquals(other.email)) return false
if (email != other.email) return false
if (!password.contentEquals(other.password)) return false
if (isSavedEmail != other.isSavedEmail) return false

return true
}

override fun hashCode(): Int {
var result = email.contentHashCode()
var result = email.hashCode()
result = 31 * result + password.contentHashCode()
result = 31 * result + isSavedEmail.hashCode()
return result
}

}
Original file line number Diff line number Diff line change
@@ -1,33 +1,27 @@
package com.android.mediproject.core.model.requestparameters
package com.android.mediproject.core.model.sign


/**
* 회원가입을 위한 파라미터 클래스입니다.
*
* @property email 이메일
* @property password 비밀번호
* @property nickName 닉네임
*/
data class SignUpParameter(
val email: CharArray, val password: CharArray, val nickName: String
val email: String, val password: ByteArray, val nickName: String,
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as SignUpParameter

if (!email.contentEquals(other.email)) return false
if (email != other.email) return false
if (!password.contentEquals(other.password)) return false
if (nickName != other.nickName) return false

return true
}

override fun hashCode(): Int {
var result = email.contentHashCode()
var result = email.hashCode()
result = 31 * result + password.contentHashCode()
result = 31 * result + nickName.hashCode()
return result
}

}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.android.mediproject.core.network.datasource.sign
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool

open class AWSAccountManager(
protected open val userPool: CognitoUserPool,
protected val userPool: CognitoUserPool,
) {

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.android.mediproject.core.network.datasource.sign

import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.model.requestparameters.SignUpParameter
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter

interface SignDataSource {
suspend fun logIn(loginParameter: LoginParameter): Result<SignInOutAWS.SignInResponse>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.android.mediproject.core.network.datasource.sign

import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserAttributes
import com.android.mediproject.core.model.requestparameters.LoginParameter
import com.android.mediproject.core.model.requestparameters.SignUpParameter
import com.android.mediproject.core.model.sign.LoginParameter
import com.android.mediproject.core.model.sign.SignUpParameter

private const val USER_NAME = "user_name"

class SignDataSourceImpl(
private val signInOutAWS: SignInOutAWS,
Expand All @@ -11,17 +13,17 @@ class SignDataSourceImpl(

override suspend fun logIn(loginParameter: LoginParameter): Result<SignInOutAWS.SignInResponse> = signInOutAWS.signIn(
SignInOutAWS.SignInRequest(
loginParameter.email.contentToString(),
loginParameter.password.map { it.code.toByte() }.toByteArray(),
loginParameter.email,
loginParameter.password,
),
)

override suspend fun signUp(signUpParameter: SignUpParameter): Result<SignUpAWS.SignUpResponse> = signUpAWS.signUp(
SignUpAWS.SignUpRequest(
signUpParameter.email.contentToString(),
signUpParameter.password.map { it.code.toByte() }.toByteArray(),
signUpParameter.email,
signUpParameter.password,
CognitoUserAttributes().apply {
addAttribute("user_name", signUpParameter.nickName)
addAttribute(USER_NAME, signUpParameter.nickName)
},
),
)
Expand Down
Loading

0 comments on commit da0254c

Please sign in to comment.