From 163e06291a2e4258581c440303025da5da4070c5 Mon Sep 17 00:00:00 2001 From: JSPark <48265129+pknujsp@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:35:36 +0900 Subject: [PATCH] =?UTF-8?q?#219=20UserInfoRepository.kt=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mediproject/core/data/RepositoryModule.kt | 2 - .../core/data/sign/SignRepository.kt | 1 - .../core/data/sign/SignRepositoryImpl.kt | 2 - .../core/data/user/UserInfoRepository.kt | 15 ----- .../core/data/user/UserInfoRepositoryImpl.kt | 64 ------------------- .../core/domain/EditUserAccountUseCase.kt | 3 - .../core/domain/GetAccountStateUseCase.kt | 2 - .../mediproject/core/domain/GetUserUseCase.kt | 6 +- .../mediproject/core/domain/SignUseCase.kt | 2 - .../core/model/user/AccountState.kt | 10 --- .../model/user/{User.kt => UserEntity.kt} | 8 +-- .../test/repositories/FakeUserRepository.kt | 6 +- .../MedicineCommentsViewModel.kt | 1 - .../feature/mypage/MyPageFragment.kt | 10 +-- .../feature/mypage/MyPageViewModel.kt | 10 +-- .../src/main/res/layout/fragment_my_page.xml | 6 +- 16 files changed, 21 insertions(+), 127 deletions(-) delete mode 100644 core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepository.kt delete mode 100644 core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepositoryImpl.kt delete mode 100644 core/model/src/main/java/com/android/mediproject/core/model/user/AccountState.kt rename core/model/src/main/java/com/android/mediproject/core/model/user/{User.kt => UserEntity.kt} (51%) diff --git a/core/data/src/main/java/com/android/mediproject/core/data/RepositoryModule.kt b/core/data/src/main/java/com/android/mediproject/core/data/RepositoryModule.kt index 806552bfa..5c5a782be 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/RepositoryModule.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/RepositoryModule.kt @@ -27,8 +27,6 @@ import com.android.mediproject.core.data.search.SearchHistoryRepositoryImpl import com.android.mediproject.core.data.sign.SignRepository import com.android.mediproject.core.data.sign.SignRepositoryImpl import com.android.mediproject.core.data.sign.AccountSessionRepository -import com.android.mediproject.core.data.user.UserInfoRepository -import com.android.mediproject.core.data.user.UserInfoRepositoryImpl import com.android.mediproject.core.data.user.UserRepository import com.android.mediproject.core.data.user.UserRepositoryImpl import com.android.mediproject.core.database.cache.manager.MedicineDataCacheManager diff --git a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt index d7590cda0..00e6c3b17 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepository.kt @@ -7,6 +7,5 @@ import com.android.mediproject.core.model.sign.SignUpParameter interface SignRepository { suspend fun login(loginParameter: LoginParameter): LoginState suspend fun signUp(signUpParameter: SignUpParameter): Result - suspend fun signOut() } diff --git a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt index bb926c9ba..95d7bd2c9 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/sign/SignRepositoryImpl.kt @@ -2,11 +2,9 @@ package com.android.mediproject.core.data.sign import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession import com.amazonaws.services.cognitoidentityprovider.model.UserNotConfirmedException -import com.android.mediproject.core.data.user.UserInfoRepository 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.model.user.AccountState import com.android.mediproject.core.network.datasource.sign.SignDataSource internal class SignRepositoryImpl( diff --git a/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepository.kt b/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepository.kt deleted file mode 100644 index f1ca20b72..000000000 --- a/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepository.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.android.mediproject.core.data.user - -import com.android.mediproject.core.model.user.AccountState -import com.android.mediproject.core.model.user.remote.UserResponse -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.StateFlow - -interface UserInfoRepository { - val myAccountInfo: StateFlow - fun getMyAccountInfo(): Flow> - - suspend fun updateMyAccountInfo(accountState: AccountState) - - suspend fun loadAccountState() -} diff --git a/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepositoryImpl.kt b/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepositoryImpl.kt deleted file mode 100644 index 73bec257c..000000000 --- a/core/data/src/main/java/com/android/mediproject/core/data/user/UserInfoRepositoryImpl.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.android.mediproject.core.data.user - -import com.android.mediproject.core.datastore.AppDataStore -import com.android.mediproject.core.model.user.AccountState -import com.android.mediproject.core.network.datasource.user.UserInfoDataSource -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.channelFlow -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.zip - -class UserInfoRepositoryImpl( - private val userInfoDataSource: UserInfoDataSource, private val appDataStore: AppDataStore, -) : UserInfoRepository { - - private val _myAccountInfo = MutableStateFlow(AccountState.Unknown) - override val myAccountInfo = _myAccountInfo.asStateFlow() - - override suspend fun updateMyAccountInfo(accountState: AccountState) { - _myAccountInfo.value = accountState - } - - /** - * 로그인 상태 확인, 동시에 토큰 처리 - */ - override suspend fun loadAccountState() { - appDataStore.apply { - myAccountId.zip(userEmail) { id, email -> - id to email - }.zip(nickName) { (id, email), nickName -> - Triple(id, email, nickName) - }.collectLatest { - val id = it.first - val email = it.second - val nickName = it.third - - if (id != 0L && email.isNotEmpty() && nickName.isNotEmpty()) { - _myAccountInfo.value = AccountState.SignedIn(id, nickName, email) - } else { - _myAccountInfo.value = AccountState.Unknown - } - } - } - } - - /** - * 서버에 내 계정 정보를 요청한다. - * - * 요청 받으면 이 레포지토리의 myAccountInfo에 저장한다. - * - * @return 응답받은 내 계정 정보 - * - */ - override fun getMyAccountInfo() = channelFlow { - userInfoDataSource.getUserInfo().collectLatest { - it.onSuccess { userResponse -> - _myAccountInfo.value = AccountState.SignedIn(userResponse.userId, userResponse.nickname, userResponse.email) - }.onFailure { - _myAccountInfo.value = AccountState.Unknown - } - trySend(it) - } - } -} diff --git a/core/domain/src/main/java/com/android/mediproject/core/domain/EditUserAccountUseCase.kt b/core/domain/src/main/java/com/android/mediproject/core/domain/EditUserAccountUseCase.kt index 9a0a2ec25..ecab33eef 100644 --- a/core/domain/src/main/java/com/android/mediproject/core/domain/EditUserAccountUseCase.kt +++ b/core/domain/src/main/java/com/android/mediproject/core/domain/EditUserAccountUseCase.kt @@ -2,19 +2,16 @@ 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.UserInfoRepository 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 com.android.mediproject.core.model.user.AccountState 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, diff --git a/core/domain/src/main/java/com/android/mediproject/core/domain/GetAccountStateUseCase.kt b/core/domain/src/main/java/com/android/mediproject/core/domain/GetAccountStateUseCase.kt index 07cbfa265..d182b3c83 100644 --- a/core/domain/src/main/java/com/android/mediproject/core/domain/GetAccountStateUseCase.kt +++ b/core/domain/src/main/java/com/android/mediproject/core/domain/GetAccountStateUseCase.kt @@ -1,7 +1,5 @@ package com.android.mediproject.core.domain -import com.android.mediproject.core.data.user.UserInfoRepository -import com.android.mediproject.core.model.user.AccountState import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.collectLatest diff --git a/core/domain/src/main/java/com/android/mediproject/core/domain/GetUserUseCase.kt b/core/domain/src/main/java/com/android/mediproject/core/domain/GetUserUseCase.kt index 2b596d585..ad14523bf 100644 --- a/core/domain/src/main/java/com/android/mediproject/core/domain/GetUserUseCase.kt +++ b/core/domain/src/main/java/com/android/mediproject/core/domain/GetUserUseCase.kt @@ -2,17 +2,17 @@ package com.android.mediproject.core.domain import android.util.Log import com.android.mediproject.core.datastore.AppDataStore -import com.android.mediproject.core.model.user.User +import com.android.mediproject.core.model.user.UserEntity import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.channelFlow import javax.inject.Inject class GetUserUseCase @Inject constructor(private val appDataStore: AppDataStore) { - suspend operator fun invoke(): Flow = channelFlow { + suspend operator fun invoke(): Flow = channelFlow { appDataStore.nickName.collect { nickName -> Log.d("wap", nickName) - trySend(User(nickName = nickName)) + trySend(UserEntity(nickName = nickName)) } } } diff --git a/core/domain/src/main/java/com/android/mediproject/core/domain/SignUseCase.kt b/core/domain/src/main/java/com/android/mediproject/core/domain/SignUseCase.kt index e0ed79f41..fcbdac172 100644 --- a/core/domain/src/main/java/com/android/mediproject/core/domain/SignUseCase.kt +++ b/core/domain/src/main/java/com/android/mediproject/core/domain/SignUseCase.kt @@ -1,10 +1,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.sign.LoginParameter import com.android.mediproject.core.model.sign.SignUpParameter -import com.android.mediproject.core.model.user.AccountState import kotlinx.coroutines.flow.map import javax.inject.Inject import javax.inject.Singleton diff --git a/core/model/src/main/java/com/android/mediproject/core/model/user/AccountState.kt b/core/model/src/main/java/com/android/mediproject/core/model/user/AccountState.kt deleted file mode 100644 index b303a45f4..000000000 --- a/core/model/src/main/java/com/android/mediproject/core/model/user/AccountState.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.android.mediproject.core.model.user - -import io.github.pknujsp.core.annotation.KBindFunc - -@KBindFunc -sealed interface AccountState { - data class SignedIn(val myId: Long, val myNickName: String, val email: String) : AccountState - object SignedOut : AccountState - object Unknown : AccountState -} diff --git a/core/model/src/main/java/com/android/mediproject/core/model/user/User.kt b/core/model/src/main/java/com/android/mediproject/core/model/user/UserEntity.kt similarity index 51% rename from core/model/src/main/java/com/android/mediproject/core/model/user/User.kt rename to core/model/src/main/java/com/android/mediproject/core/model/user/UserEntity.kt index b14747245..771ed2355 100644 --- a/core/model/src/main/java/com/android/mediproject/core/model/user/User.kt +++ b/core/model/src/main/java/com/android/mediproject/core/model/user/UserEntity.kt @@ -1,8 +1,6 @@ package com.android.mediproject.core.model.user -data class User( +data class UserEntity( val nickName: String, -) { - var id: Long = 0 - var email: String = "" -} + val email: String, +) diff --git a/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt b/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt index 94fd0bb6e..0403ae57d 100644 --- a/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt +++ b/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt @@ -1,7 +1,5 @@ package com.android.mediproject.core.test.repositories -import com.android.mediproject.core.data.user.UserInfoRepository -import com.android.mediproject.core.model.user.AccountState import com.android.mediproject.core.model.user.remote.UserResponse import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -14,10 +12,10 @@ class FakeUserInfoRepository : UserInfoRepository { override val myAccountInfo: StateFlow get() = _myAccountInfo.asStateFlow() - override fun getMyAccountInfo(): Flow> = channelFlow{ + override fun getMyAccountInfo(): Flow> = channelFlow { } - override suspend fun updateMyAccountInfo(accountState: AccountState){ + override suspend fun updateMyAccountInfo(accountState: AccountState) { } diff --git a/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt b/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt index 05f834f89..dafe8837f 100644 --- a/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt +++ b/feature/comments/src/main/java/com/android/mediproject/feature/comments/commentsofamedicine/MedicineCommentsViewModel.kt @@ -15,7 +15,6 @@ 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.AccountState 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 diff --git a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt index 66103e13a..a02df16ca 100644 --- a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt +++ b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt @@ -21,7 +21,7 @@ import com.android.mediproject.feature.mypage.mypagemore.MyPageMoreDialogFragmen import dagger.hilt.android.AndroidEntryPoint import com.android.mediproject.core.common.viewmodel.repeatOnStarted import com.android.mediproject.core.model.comments.MyCommentsListResponse -import com.android.mediproject.core.model.user.User +import com.android.mediproject.core.model.user.UserEntity import javax.inject.Inject @AndroidEntryPoint @@ -124,19 +124,19 @@ class MyPageFragment : setLoginModeScreenVisible() } - private fun handleUserState(userState: UiState) { - when (userState) { + private fun handleUserState(userEntityState: UiState) { + when (userEntityState) { is UiState.Initial -> {} is UiState.Loading -> setLoadingUserVisible() is UiState.Success -> { setSuccessUserVisible() - binding.userDto = userState.data + binding.userDto = userEntityState.data } is UiState.Error -> { - log(userState.message) + log(userEntityState.message) } } } diff --git a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageViewModel.kt b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageViewModel.kt index 7620f7678..ce3c61c4e 100644 --- a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageViewModel.kt +++ b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageViewModel.kt @@ -13,7 +13,7 @@ import com.android.mediproject.core.domain.GetUserUseCase import com.android.mediproject.core.model.comments.MyCommentsListResponse import com.android.mediproject.core.model.token.CurrentTokens import com.android.mediproject.core.model.token.TokenState -import com.android.mediproject.core.model.user.User +import com.android.mediproject.core.model.user.UserEntity import com.android.mediproject.core.ui.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher @@ -69,11 +69,11 @@ class MyPageViewModel @Inject constructor( } } - private val _user = MutableStateFlow>(UiState.Initial) - val user get() = _user.asStateFlow() + private val _userEntity = MutableStateFlow>(UiState.Initial) + val user get() = _userEntity.asStateFlow() - fun setUserUiState(uiState: UiState) { - _user.value = uiState + fun setUserUiState(uiState: UiState) { + _userEntity.value = uiState } fun loadUser() = viewModelScope.launch(ioDispatcher) { diff --git a/feature/mypage/src/main/res/layout/fragment_my_page.xml b/feature/mypage/src/main/res/layout/fragment_my_page.xml index c59729961..5ac9cba4e 100644 --- a/feature/mypage/src/main/res/layout/fragment_my_page.xml +++ b/feature/mypage/src/main/res/layout/fragment_my_page.xml @@ -11,7 +11,7 @@ + type="com.android.mediproject.core.model.user.UserEntity" /> + app:layout_constraintEnd_toEndOf="parent" /> + android:layout_gravity="center" />