diff --git a/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepository.kt b/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepository.kt index d9ffa3687..69fcdedaa 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepository.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepository.kt @@ -20,25 +20,25 @@ interface CommentsRepository { /** * 내가 작성한 댓글을 가져오는 메서드입니다. */ - fun getMyCommentsList(): Flow> + fun getMyCommentsList(): Result /** * 댓글을 수정합니다. */ - fun editComment(parameter: EditCommentParameter): Flow> + fun editComment(parameter: EditCommentParameter): Result /** * 댓글을 등록합니다. */ - fun applyNewComment(parameter: NewCommentParameter): Flow> + fun applyNewComment(parameter: NewCommentParameter): Result /** * 댓글 삭제 클릭 */ - fun deleteComment(parameter: DeleteCommentParameter): Flow> + fun deleteComment(parameter: DeleteCommentParameter): Result /** * 댓글 좋아요 클릭 */ - fun likeComment(parameter: LikeCommentParameter): Flow> + fun likeComment(parameter: LikeCommentParameter): Result } diff --git a/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepositoryImpl.kt b/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepositoryImpl.kt index cfdbe059f..37e354531 100644 --- a/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepositoryImpl.kt +++ b/core/data/src/main/java/com/android/mediproject/core/data/comments/CommentsRepositoryImpl.kt @@ -4,12 +4,10 @@ import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData import com.android.mediproject.core.common.SERVER_PAGE_SIZE -import com.android.mediproject.core.data.token.TokenRepository import com.android.mediproject.core.model.comments.CommentChangedResponse import com.android.mediproject.core.model.comments.CommentListResponse import com.android.mediproject.core.model.comments.LikeResponse import com.android.mediproject.core.model.comments.MyCommentsListResponse -import com.android.mediproject.core.model.token.TokenState import com.android.mediproject.core.model.requestparameters.DeleteCommentParameter import com.android.mediproject.core.model.requestparameters.EditCommentParameter import com.android.mediproject.core.model.requestparameters.LikeCommentParameter @@ -17,98 +15,35 @@ import com.android.mediproject.core.model.requestparameters.NewCommentParameter import com.android.mediproject.core.network.datasource.comments.CommentsDataSource import com.android.mediproject.core.network.datasource.comments.CommentsListDataSourceImpl import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.channelFlow -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.last import javax.inject.Inject class CommentsRepositoryImpl @Inject constructor( - private val commentsDataSource: CommentsDataSource, private val tokenRepository: TokenRepository, + private val commentsDataSource: CommentsDataSource, ) : CommentsRepository { - override fun getCommentsByMedicineId(medicineId: Long): Flow> = - Pager( - config = PagingConfig(pageSize = SERVER_PAGE_SIZE, prefetchDistance = 0), - pagingSourceFactory = { - CommentsListDataSourceImpl(commentsDataSource, medicineId) - }, - ).flow - - override fun getMyCommentsList(): Flow> = channelFlow { - checkToken().collectLatest { tokenState -> - tokenState.onSuccess { - commentsDataSource.getMyCommentsList().collectLatest { - trySend(it) - } - }.onFailure { - trySend(Result.failure(it)) - } - } + override fun getCommentsByMedicineId(medicineId: Long): Flow> = Pager( + config = PagingConfig(pageSize = SERVER_PAGE_SIZE, prefetchDistance = 0), + pagingSourceFactory = { + CommentsListDataSourceImpl(commentsDataSource, medicineId) + }, + ).flow + + override fun getMyCommentsList(): Result { + TODO("Not yet implemented") } - override fun editComment(parameter: EditCommentParameter): Flow> = channelFlow { - checkToken().collectLatest { tokenState -> - tokenState.onSuccess { - commentsDataSource.editComment(parameter).collectLatest { - trySend(it) - } - }.onFailure { - trySend(Result.failure(it)) - } - } + override fun applyNewComment(parameter: NewCommentParameter): Result { + TODO("Not yet implemented") } - - override fun applyNewComment(parameter: NewCommentParameter): Flow> = channelFlow { - checkToken().collectLatest { tokenState -> - tokenState.onSuccess { - commentsDataSource.applyNewComment(parameter).collectLatest { - trySend(it) - } - }.onFailure { - trySend(Result.failure(it)) - } - } + override fun deleteComment(parameter: DeleteCommentParameter): Result { + TODO("Not yet implemented") } - override fun deleteComment(parameter: DeleteCommentParameter): Flow> = channelFlow { - checkToken().collectLatest { tokenState -> - tokenState.onSuccess { - commentsDataSource.deleteComment(parameter).collectLatest { - trySend(it) - } - }.onFailure { - trySend(Result.failure(it)) - } - } + override fun editComment(parameter: EditCommentParameter): Result { + TODO("Not yet implemented") } - override fun likeComment(parameter: LikeCommentParameter): Flow> = channelFlow { - checkToken().collectLatest { tokenState -> - tokenState.onSuccess { - commentsDataSource.likeComment(parameter).collectLatest { - trySend(it) - } - }.onFailure { - trySend(Result.failure(it)) - } - } + override fun likeComment(parameter: LikeCommentParameter): Result { + TODO("Not yet implemented") } - - private suspend fun checkToken() = tokenRepository.getCurrentTokens().last().let { tokenState -> - when (tokenState) { - is TokenState.Tokens.Valid -> { - flowOf(Result.success(Unit)) - } - - is TokenState.Error -> { - flowOf(Result.failure(tokenState.exception)) - } - - else -> { - flowOf(Result.failure(Exception("로그인 해주세요"))) - } - } - } - } 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 a7bef078b..50a877d3e 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 @@ -3,14 +3,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 kotlinx.coroutines.flow.Flow interface SignRepository { + fun login(loginParameter: LoginParameter): Result - fun login(loginParameter: LoginParameter): Flow> - - fun signUp(signUpParameter: SignUpParameter): Flow> + fun signUp(signUpParameter: SignUpParameter): Result 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 0b8cf97c7..5ea2fd946 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 @@ -11,29 +11,20 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.channelFlow import javax.inject.Inject -class SignRepositoryImpl @Inject constructor( +class SignRepositoryImpl( private val signDataSource: SignDataSource, private val appDataStore: AppDataStore, private val userInfoRepository: UserInfoRepository, ) : SignRepository { - - /** - * 서버에 로그인 요청을 하고, 토큰 정보를 받는다. - * - * @param loginParameter 로그인 요청 파라미터 - * @return 응답받은 토큰 - */ - override fun login(loginParameter: LoginParameter): Flow> = channelFlow { + override fun login(loginParameter: LoginParameter): Result { signDataSource.logIn(loginParameter).collect { signInResult -> - if (signInResult.isFailure) { trySend(Result.failure(signInResult.exceptionOrNull() ?: Exception("로그인 실패"))) } else { appDataStore.apply { saveSkipIntro(true) signInResult.onSuccess { - // 내 계정 정보 메모리에 저장 userInfoRepository.updateMyAccountInfo(AccountState.SignedIn(it._userId!!.toLong(), it._nickName!!, it._email!!)) saveMyAccountInfo(it._email!!, it._nickName!!, it._userId!!.toLong()) } diff --git a/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepository.kt b/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepository.kt deleted file mode 100644 index 1bbea79d2..000000000 --- a/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepository.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.android.mediproject.core.data.token - -import com.android.mediproject.core.model.token.CurrentTokens -import com.android.mediproject.core.model.token.TokenState -import kotlinx.coroutines.flow.Flow - -interface TokenRepository { - fun getCurrentTokens(): Flow> -} diff --git a/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepositoryImpl.kt b/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepositoryImpl.kt deleted file mode 100644 index 40e5bf050..000000000 --- a/core/data/src/main/java/com/android/mediproject/core/data/token/TokenRepositoryImpl.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.android.mediproject.core.data.token - -import android.util.Log -import com.android.mediproject.core.model.token.CurrentTokens -import com.android.mediproject.core.model.token.TokenState -import com.android.mediproject.core.network.datasource.tokens.TokenDataSource -import com.android.mediproject.core.network.tokens.TokenServer -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.channelFlow -import kotlinx.coroutines.flow.collectLatest -import javax.inject.Inject - -class TokenRepositoryImpl @Inject constructor( - private val tokenDataSource: TokenDataSource, - private val tokenServer: TokenServer, -) : TokenRepository { - /** - * 현재 토큰의 상태를 반환한다. - * - * 외부에서 인터페이스로 접근할 때, 이 Flow를 collect하면, 토큰의 상태를 받을 수 있다. - * - * 만약 호출 했을 때, 만료되었으면 reissueToken()을 자동으로 호출해서 새로운 토큰을 반환한다. - */ - override fun getCurrentTokens(): Flow> = channelFlow { - when (val tokenState = tokenServer.tokenState) { - is TokenState.Tokens.AccessExpiration -> { - // access token이 만료되었으므로 토큰 재발급 요청 - Log.d("wap", "getCurrentTokens: access token이 만료되었으므로 토큰 재발급 요청") - tokenDataSource.reissueToken(tokenState).collectLatest { - send(tokenServer.tokenState) - } - } - - else -> { - /* - * @see TokenState.Tokens.RefreshExpiration 리프레시 만료 - * @see TokenState.Tokens.Valid 유효 - * @see TokenState.Empty 토큰이 없음 - * @see TokenState.Error 에러 - * - * 그대로 반환한다. - */ - send(tokenState) - } - } - } - -}