From 3a099ca59ecd72997ce3316a65c3e2db4a427ef4 Mon Sep 17 00:00:00 2001 From: Sangwook123 Date: Fri, 3 May 2024 12:11:45 +0900 Subject: [PATCH] [feat] #7 repo impl --- .../main/java/org/sopt/data/di/DataModule.kt | 13 ++- .../data/repository/AuthRepositoryImpl.kt | 87 +++++++++++++++++++ .../data/repository/UserRepositoryImpl.kt | 20 +++++ 3 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 core/data/src/main/java/org/sopt/data/repository/AuthRepositoryImpl.kt create mode 100644 core/data/src/main/java/org/sopt/data/repository/UserRepositoryImpl.kt diff --git a/core/data/src/main/java/org/sopt/data/di/DataModule.kt b/core/data/src/main/java/org/sopt/data/di/DataModule.kt index cf4e2e5..8e5dc7f 100644 --- a/core/data/src/main/java/org/sopt/data/di/DataModule.kt +++ b/core/data/src/main/java/org/sopt/data/di/DataModule.kt @@ -4,20 +4,27 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import org.sopt.data.repository.AuthRepositoryImpl import org.sopt.data.repository.FriendRepository import org.sopt.data.repository.UserDataRepositoryImpl +import org.sopt.data.repository.UserRepositoryImpl +import org.sopt.domain.repo.AuthRepository import org.sopt.domain.repo.SoptRepository import org.sopt.domain.repo.UserDataRepository -import javax.inject.Singleton +import org.sopt.domain.repo.UserRepository @Module @InstallIn(SingletonComponent::class) abstract class DataModule { - @Singleton @Binds abstract fun bindsFriendRepo(soptRepository: FriendRepository): SoptRepository - @Singleton @Binds abstract fun bindsUserRepo(userDataRepository: UserDataRepositoryImpl): UserDataRepository + + @Binds + abstract fun bindsMemberRepo(userRepository: UserRepositoryImpl): UserRepository + + @Binds + abstract fun authRepo(authRepository: AuthRepositoryImpl): AuthRepository } \ No newline at end of file diff --git a/core/data/src/main/java/org/sopt/data/repository/AuthRepositoryImpl.kt b/core/data/src/main/java/org/sopt/data/repository/AuthRepositoryImpl.kt new file mode 100644 index 0000000..c183633 --- /dev/null +++ b/core/data/src/main/java/org/sopt/data/repository/AuthRepositoryImpl.kt @@ -0,0 +1,87 @@ +package org.sopt.data.repository + +import kotlinx.serialization.json.Json +import org.sopt.domain.repo.AuthRepository +import org.sopt.model.Base +import org.sopt.model.Member +import org.sopt.network.api.AuthApi +import org.sopt.network.model.request.RequestPatchPasswordDto +import org.sopt.network.model.request.RequestPostSigninDto +import org.sopt.network.model.request.RequestPostSignupDto +import org.sopt.network.model.response.base.ApiError +import org.sopt.network.model.response.base.BaseResponse +import org.sopt.network.model.response.base.toCoreModel +import org.sopt.network.model.response.base.toCoreModelNothingType +import org.sopt.network.model.response.toCoreModel +import retrofit2.HttpException +import javax.inject.Inject + +class AuthRepositoryImpl @Inject constructor( + private val authApi: AuthApi, +) : AuthRepository { + override suspend fun postSignup(member: Member, pw: String): Result> { + val result = runCatching { + authApi.postSignup( + RequestPostSignupDto( + authenticationId = member.id, + nickname = member.nickname, + password = pw, + phone = member.phone + ) + ) + } + return handleResult(result) + } + + override suspend fun getUserinfo(): Result = runCatching { + authApi.getUserinfo().data!!.toCoreModel() + } + + override suspend fun postSignin(id: String, pw: String): Result> { + val result = runCatching { + authApi.postSignin( + RequestPostSigninDto( + id, + pw + ) + ) + } + return handleResult(result) + } + + override suspend fun patchPassword( + previousPassword: String, + newPassword: String, + newPasswordVerification: String, + ): Result> { + val result = runCatching { + authApi.patchPassword( + RequestPatchPasswordDto( + previousPassword = previousPassword, + newPassword = newPassword, + newPasswordVerification = newPasswordVerification + ) + ) + } + return handleResult(result) + } + + private fun handleResult(result: Result>) = + when (val exception = result.exceptionOrNull()) { + null -> result.map { + it.toCoreModelNothingType() + } + + is HttpException -> { + val json = exception.response()?.errorBody()?.string() + val api = Json.decodeFromString(json!!) + Result.success( + api.toCoreModel() + ) + } + + else -> { + Result.failure(exception) + } + } +} \ No newline at end of file diff --git a/core/data/src/main/java/org/sopt/data/repository/UserRepositoryImpl.kt b/core/data/src/main/java/org/sopt/data/repository/UserRepositoryImpl.kt new file mode 100644 index 0000000..8e5b034 --- /dev/null +++ b/core/data/src/main/java/org/sopt/data/repository/UserRepositoryImpl.kt @@ -0,0 +1,20 @@ +package org.sopt.data.repository + +import androidx.paging.Pager +import androidx.paging.PagingConfig +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import org.sopt.data.paging.UserPagingSource +import org.sopt.domain.repo.UserRepository +import org.sopt.model.ReqresUser +import javax.inject.Inject + +class UserRepositoryImpl @Inject constructor( + private val userPagingSource: UserPagingSource, +) : UserRepository { + override fun getUser(): Flow> { + return Pager(PagingConfig(6, 2)) { + userPagingSource + }.flow + } +} \ No newline at end of file