Skip to content

Commit

Permalink
#219 UserRepository내 메서드 반환 타입 flow제거, 구현 메서드 공란으로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
pknujsp committed Mar 11, 2024
1 parent e5146c2 commit c162168
Show file tree
Hide file tree
Showing 23 changed files with 111 additions and 249 deletions.
1 change: 0 additions & 1 deletion app/src/main/java/com/android/mediproject/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import androidx.annotation.ArrayRes
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.android.mediproject.core.common.viewmodel.asEventFlow
import com.android.mediproject.core.domain.GetAccountStateUseCase
import com.android.mediproject.core.ui.base.BaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.android.mediproject.core.data.session

import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession
import kotlinx.coroutines.flow.Flow

interface AccountSessionRepository {
val lastSavedEmail: Flow<String>
val session: CognitoUserSession?
val signedIn: Boolean
suspend fun updateSession(session: CognitoUserSession?)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.android.mediproject.core.data.session

import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession
import com.android.mediproject.core.datastore.AppDataStore
import kotlinx.coroutines.flow.distinctUntilChanged

class AccountSessionRepositoryImpl(
private val appDataStore: AppDataStore,
) : AccountSessionRepository {
override val lastSavedEmail = appDataStore.userEmail.distinctUntilChanged()

private var mutableSession: CognitoUserSession? = null
override val session: CognitoUserSession? get() = mutableSession
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import com.android.mediproject.core.model.requestparameters.ChangePasswordParame
import com.android.mediproject.core.model.user.remote.ChangeNicknameResponse
import com.android.mediproject.core.model.user.remote.ChangePasswordResponse
import com.android.mediproject.core.model.user.remote.WithdrawalResponse
import kotlinx.coroutines.flow.Flow

interface UserRepository {
suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter): Flow<Result<ChangeNicknameResponse>>
suspend fun changePassword(changePasswordParameter: ChangePasswordParameter): Flow<Result<ChangePasswordResponse>>
suspend fun withdrawal(): Flow<Result<WithdrawalResponse>>
suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter): Result<ChangeNicknameResponse>
suspend fun changePassword(changePasswordParameter: ChangePasswordParameter): Result<ChangePasswordResponse>
suspend fun withdrawal(): Result<WithdrawalResponse>
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,24 @@
package com.android.mediproject.core.data.user

import android.util.Log
import com.android.mediproject.core.model.requestparameters.ChangeNicknameParameter
import com.android.mediproject.core.model.requestparameters.ChangePasswordParameter
import com.android.mediproject.core.model.user.remote.ChangeNicknameResponse
import com.android.mediproject.core.model.user.remote.ChangePasswordResponse
import com.android.mediproject.core.model.user.remote.WithdrawalResponse
import com.android.mediproject.core.network.datasource.user.UserDataSource
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map
import javax.inject.Inject

class UserRepositoryImpl @Inject constructor(private val userDataSource: UserDataSource) :
UserRepository {
override suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter): Flow<Result<ChangeNicknameResponse>> =
channelFlow {
userDataSource.changeNickname(changeNicknameParameter).map { result ->
result.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) })
}.collectLatest { trySend(it) }
}
override suspend fun withdrawal(): Result<WithdrawalResponse> {
TODO("Not yet implemented")
}

override suspend fun changePassword(changePasswordParameter: ChangePasswordParameter): Flow<Result<ChangePasswordResponse>> =
channelFlow {
userDataSource.changePassword(changePasswordParameter).map { result ->
result.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) })
}.collectLatest { trySend(it) }
}
override suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter): Result<ChangeNicknameResponse> {
TODO("Not yet implemented")
}

override suspend fun withdrawal(): Flow<Result<WithdrawalResponse>> = channelFlow {
Log.d("wap", "UserRepository : withdrawal()")
userDataSource.withdrawal().map { result ->
Log.d("wap", "UserRepository : withdrawal()$result")
result.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) })
}.collectLatest { trySend(it) }
override suspend fun changePassword(changePasswordParameter: ChangePasswordParameter): Result<ChangePasswordResponse> {
TODO("Not yet implemented")
}
}
Original file line number Diff line number Diff line change
@@ -1,64 +1,39 @@
package com.android.mediproject.core.domain

import android.util.Log
import com.android.mediproject.core.data.sign.SignRepository
import com.android.mediproject.core.data.user.UserRepository
import com.android.mediproject.core.datastore.AppDataStore
import com.android.mediproject.core.model.requestparameters.ChangeNicknameParameter
import com.android.mediproject.core.model.requestparameters.ChangePasswordParameter
import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map
import javax.inject.Inject


class EditUserAccountUseCase @Inject constructor(
private val appDataStore: AppDataStore,
private val userRepository: UserRepository,
private val getUserInfoRepository: UserInfoRepository,
private val signRepository: SignRepository,
) {
suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter) = channelFlow {
userRepository.changeNickname(changeNicknameParameter).map { result ->
result.fold(
onSuccess = {
appDataStore.saveNickName(changeNicknameParameter.newNickname)
Result.success(it)
},
onFailure = { Result.failure(it) },
)
}.collectLatest { trySend(it) }
}
suspend fun changeNickname(changeNicknameParameter: ChangeNicknameParameter) = userRepository.changeNickname(changeNicknameParameter).fold(
onSuccess = {
appDataStore.saveNickName(changeNicknameParameter.newNickname)
Result.success(it)
},
onFailure = { Result.failure(it) },
)

suspend fun changePassword(changePasswordParameter: ChangePasswordParameter) = channelFlow {
val email =
(getUserInfoRepository.myAccountInfo.value as AccountState.SignedIn).email.toCharArray()
userRepository.changePassword(
changePasswordParameter.apply {
this.email = email
},
).map { result ->
result.fold(
onSuccess = {
Result.success(it)
},
onFailure = { Result.failure(it) },
)
}.collectLatest { trySend(it) }
}
suspend fun changePassword(changePasswordParameter: ChangePasswordParameter) = userRepository.changePassword(
changePasswordParameter,
).fold(
onSuccess = {
Result.success(it)
},
onFailure = { Result.failure(it) },
)

suspend fun withdrawal() = channelFlow {
Log.d("wap", "UserUseCase : withdrawal()")
userRepository.withdrawal().map { result ->
Log.d("wap", "UserUseCase : withdrawal()$result")
result.fold(
onSuccess = {
signRepository.signOut()
appDataStore.clearMyAccountInfo()
Result.success(it)
},
onFailure = { Result.failure(it) },
)
}.collectLatest { trySend(it) }
suspend fun withdrawal() {
userRepository.withdrawal()
signRepository.signOut()
appDataStore.clearMyAccountInfo()
}

}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class GetUserUseCase @Inject constructor(private val appDataStore: AppDataStore)
suspend operator fun invoke(): Flow<UserEntity> = channelFlow {
appDataStore.nickName.collect { nickName ->
Log.d("wap", nickName)
trySend(UserEntity(nickName = nickName))
// trySend(UserEntity(nickName = nickName))
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,29 +1,5 @@
package com.android.mediproject.core.model.requestparameters

import kotlinx.serialization.Serializable

@Serializable
data class ChangePasswordParameter(
val newPassword: CharArray
) {

var email: CharArray = CharArray(0)
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as ChangePasswordParameter

if (!newPassword.contentEquals(other.newPassword)) return false
if (!email.contentEquals(other.email)) return false

return true
}

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

}
class ChangePasswordParameter(
val newPassword: ByteArray,
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.android.mediproject.core.network.module.AwsNetworkApi
import com.android.mediproject.core.network.onResponse
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
import java.lang.ref.WeakReference
import javax.inject.Inject

class UserDataSourceImpl @Inject constructor(
Expand All @@ -25,9 +24,9 @@ class UserDataSourceImpl @Inject constructor(
}

override suspend fun changePassword(changePasswordParameter: ChangePasswordParameter): Flow<Result<ChangePasswordResponse>> = channelFlow {
val password = WeakReference(aesCoder.encodePassword(changePasswordParameter.email, changePasswordParameter.newPassword)).get()!!
awsNetworkApi.changePassword(ChangePasswordParameter(password.toCharArray())).onResponse()
.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) }).also { trySend(it) }
/* val password = WeakReference(aesCoder.encodePassword(changePasswordParameter.email, changePasswordParameter.newPassword)).get()!!
awsNetworkApi.changePassword(ChangePasswordParameter(password.toCharArray())).onResponse()
.fold(onSuccess = { Result.success(it) }, onFailure = { Result.failure(it) }).also { trySend(it) }*/
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
package com.android.mediproject.core.test.repositories

import com.android.mediproject.core.model.user.remote.UserResponse
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.channelFlow

/*
class FakeUserInfoRepository : UserInfoRepository {
private val _myAccountInfo = MutableStateFlow<AccountState>(AccountState.Unknown)
override val myAccountInfo: StateFlow<AccountState>
Expand All @@ -23,3 +17,4 @@ class FakeUserInfoRepository : UserInfoRepository {
}
}
*/
1 change: 1 addition & 0 deletions feature/comments/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ dependencies {
implementation(project(":core:common"))
implementation(project(":core:model"))
implementation(project(":core:domain"))
implementation(project(":core:data"))

implementation(libs.bundles.glides)
kapt(libs.bundles.glides.kapt)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@ import com.android.mediproject.core.common.bindingadapter.ISendText
import com.android.mediproject.core.common.network.Dispatcher
import com.android.mediproject.core.common.network.MediDispatchers
import com.android.mediproject.core.domain.EditCommentUseCase
import com.android.mediproject.core.domain.GetAccountStateUseCase
import com.android.mediproject.core.domain.GetCommentsUseCase
import com.android.mediproject.core.model.comments.BaseComment
import com.android.mediproject.core.model.comments.Comment
import com.android.mediproject.core.model.navargs.MedicineBasicInfoArgs
import com.android.mediproject.core.model.requestparameters.EditCommentParameter
import com.android.mediproject.core.model.requestparameters.NewCommentParameter
import com.android.mediproject.core.model.user.onSignedIn
import com.android.mediproject.core.ui.base.BaseViewModel
import com.android.mediproject.feature.comments.commentsofamedicine.CommentActionState.None
import com.android.mediproject.feature.comments.commentsofamedicine.CommentActionState.OnClickEditComment
Expand Down Expand Up @@ -51,7 +49,7 @@ import javax.inject.Inject
class MedicineCommentsViewModel @Inject constructor(
private val getCommentsUseCase: GetCommentsUseCase,
private val editCommentUseCase: EditCommentUseCase,
private val getAccountStateUseCase: GetAccountStateUseCase,
private val accountSessionRepository: AccountSessionRepository,
@Dispatcher(MediDispatchers.IO) private val ioDispatcher: CoroutineDispatcher,
) : BaseViewModel(), ISendText {

Expand All @@ -64,9 +62,6 @@ class MedicineCommentsViewModel @Inject constructor(
private val _myId = MutableStateFlow(NONE_USER_ID)
private val myId = _myId.asStateFlow()

private val _accountState = MutableStateFlow<AccountState>(AccountState.SignedOut)
private val accountState = _accountState.asStateFlow()

private val _replyId = MutableStateFlow(NONE_REPLY_ID)
private val replyId = _replyId.asStateFlow()

Expand Down
Loading

0 comments on commit c162168

Please sign in to comment.