diff --git a/app/src/main/java/kids/baba/mobile/core/constant/PrefsKey.kt b/app/src/main/java/kids/baba/mobile/core/constant/PrefsKey.kt index 0f475db4..05bd8f25 100644 --- a/app/src/main/java/kids/baba/mobile/core/constant/PrefsKey.kt +++ b/app/src/main/java/kids/baba/mobile/core/constant/PrefsKey.kt @@ -3,6 +3,7 @@ package kids.baba.mobile.core.constant object PrefsKey { const val ACCESS_TOKEN_KEY = "ACCESS_TOKEN_KEY" const val REFRESH_TOKEN_KEY = "REFRESH_TOKEN_KEY" + const val SIGN_TOKEN_KEY = "SIGN_TOKEN_KEY" const val MEMBER_KEY = "MEMBER_KEY" const val BABY_KEY = "BABY_KEY" const val BABY_GROUP_TITLE_KEY = "BABY_GROUP_TITLE_KEY" diff --git a/app/src/main/java/kids/baba/mobile/core/error/InvalidAccessTokenException.kt b/app/src/main/java/kids/baba/mobile/core/error/InvalidAccessTokenException.kt new file mode 100644 index 00000000..5cbbfd6e --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/core/error/InvalidAccessTokenException.kt @@ -0,0 +1,5 @@ +package kids.baba.mobile.core.error + +import java.lang.Exception + +class InvalidAccessTokenException: Exception() \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/api/AlbumApi.kt b/app/src/main/java/kids/baba/mobile/data/api/AlbumApi.kt index ea4c32e3..9b163d65 100644 --- a/app/src/main/java/kids/baba/mobile/data/api/AlbumApi.kt +++ b/app/src/main/java/kids/baba/mobile/data/api/AlbumApi.kt @@ -1,14 +1,6 @@ package kids.baba.mobile.data.api -import kids.baba.mobile.core.constant.PrefsKey -import kids.baba.mobile.core.utils.EncryptedPrefs import kids.baba.mobile.domain.model.* -import retrofit2.http.Body -import retrofit2.http.GET -import retrofit2.http.Header -import retrofit2.http.POST -import retrofit2.http.Path -import retrofit2.http.Query import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.Response @@ -16,11 +8,9 @@ import retrofit2.http.* interface AlbumApi { - //성장 앨범 메인 @GET("baby/{babyId}/album") suspend fun getAlbum( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") id: String, @Query("year") year: Int, @Query("month") month: Int @@ -28,7 +18,6 @@ interface AlbumApi { @GET("baby/{babyId}/album/{albumId}") suspend fun gatOneAlbum( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") babyId: String, @Path("contentId") contentId: Int ): Response @@ -37,8 +26,6 @@ interface AlbumApi { @Multipart @POST("baby/{babyId}/album") suspend fun postAlbum( - @Header("Authorization") - accessToken: String, @Path("babyId") id: String, @Part photo: MultipartBody.Part, @PartMap bodyDataHashMap: HashMap @@ -46,21 +33,18 @@ interface AlbumApi { @DELETE("baby/{babyId}/album/{contentId}") suspend fun deleteAlbum( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") babyId: String, @Path("contentId") contentId: Int ): Response @POST("baby/{babyId}/album/{contentId}/like") suspend fun likeAlbum( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") id: String, @Path("contentId") contentId: Int ): Response @POST("baby/{babyId}/album/{contentId}/comment") suspend fun addComment( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") id: String, @Path("contentId") contentId: Int, @Body commentInput: CommentInput @@ -68,7 +52,6 @@ interface AlbumApi { @DELETE("baby/{babyId}/album/{contentId}/comment/{commentId}") suspend fun deleteComment( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") id: String, @Path("contentId") contentId: Int, @Path("commentId") commentId: String @@ -76,21 +59,18 @@ interface AlbumApi { @GET("baby/{babyId}/album/{contentId}/comments") suspend fun getComments( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("contentId") contentId: Int, @Path("babyId") id: String ): Response @GET("baby/{babyId}/album/{contentId}/likes") suspend fun getLikeDetail( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("contentId") contentId: Int, @Path("babyId") id: String ): Response @GET("baby/{babyId}/album/all") suspend fun getAllAlbum( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") id: String ): Response diff --git a/app/src/main/java/kids/baba/mobile/data/api/BabyApi.kt b/app/src/main/java/kids/baba/mobile/data/api/BabyApi.kt index 4bacfae5..0ab7e059 100644 --- a/app/src/main/java/kids/baba/mobile/data/api/BabyApi.kt +++ b/app/src/main/java/kids/baba/mobile/data/api/BabyApi.kt @@ -1,12 +1,9 @@ package kids.baba.mobile.data.api -import kids.baba.mobile.core.constant.PrefsKey -import kids.baba.mobile.core.utils.EncryptedPrefs import kids.baba.mobile.domain.model.BabiesInfoResponse import kids.baba.mobile.domain.model.BabyResponse import retrofit2.Response import retrofit2.http.GET -import retrofit2.http.Header import retrofit2.http.Query interface BabyApi { @@ -18,7 +15,6 @@ interface BabyApi { //아기 리스트 가져오기 @GET("baby") - suspend fun getBaby(@Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY)): Response - + suspend fun getBaby(): Response } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/api/MemberApi.kt b/app/src/main/java/kids/baba/mobile/data/api/MemberApi.kt index f09b07cd..b045b39f 100644 --- a/app/src/main/java/kids/baba/mobile/data/api/MemberApi.kt +++ b/app/src/main/java/kids/baba/mobile/data/api/MemberApi.kt @@ -1,32 +1,10 @@ package kids.baba.mobile.data.api import kids.baba.mobile.domain.model.MemberModel -import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo -import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode -import kids.baba.mobile.domain.model.TokenResponse import retrofit2.Response -import retrofit2.http.Body import retrofit2.http.GET -import retrofit2.http.Header -import retrofit2.http.POST interface MemberApi { @GET("members") - suspend fun getMe(@Header("Authorization") accessToken: String): Response - - @POST("members/baby") - suspend fun signUpWithBabiesInfo( - @Header("Authorization") - signToken: String, - @Body - signupRequestWithBabiesInfo: SignUpRequestWithBabiesInfo - ): Response - - @POST("members/baby/invite-code") - suspend fun signUpWithInviteCode( - @Header("Authorization") - signToken: String, - @Body - signUpRequestWithInviteCode: SignUpRequestWithInviteCode - ): Response + suspend fun getMe(): Response } diff --git a/app/src/main/java/kids/baba/mobile/data/api/MyPageApi.kt b/app/src/main/java/kids/baba/mobile/data/api/MyPageApi.kt index e1728e8f..4e83d72b 100644 --- a/app/src/main/java/kids/baba/mobile/data/api/MyPageApi.kt +++ b/app/src/main/java/kids/baba/mobile/data/api/MyPageApi.kt @@ -1,85 +1,64 @@ package kids.baba.mobile.data.api -import kids.baba.mobile.core.constant.PrefsKey -import kids.baba.mobile.core.utils.EncryptedPrefs import kids.baba.mobile.domain.model.* import retrofit2.Response -import retrofit2.http.Body -import retrofit2.http.DELETE -import retrofit2.http.GET -import retrofit2.http.Header -import retrofit2.http.PATCH -import retrofit2.http.POST -import retrofit2.http.PUT -import retrofit2.http.Path -import retrofit2.http.Query +import retrofit2.http.* interface MyPageApi { @GET("members/my-page") suspend fun loadMyPageGroup( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY) ): Response @GET("members/baby-page/{babyId}") suspend fun loadBabyProfile( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") babyId: String ): Response @POST("members/groups") suspend fun addGroup( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Body myPageGroup: MyPageGroup ): Response @PUT("members") suspend fun editProfile( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Body profile: Profile ): Response @PATCH("baby/{babyId}") suspend fun editBabyName( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") babyId: String, @Body babyEdit: BabyEdit ): Response @POST("baby") suspend fun addMyBaby( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Body baby: MyBaby ): Response @POST("baby/code") suspend fun addBabyWithInviteCode( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Body inviteCode: InviteCode ): Response @DELETE("baby/{babyId}") suspend fun deleteBaby( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("babyId") babyId: String ): Response @PATCH("members/groups") suspend fun patchGroup( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Query("groupName") groupName: String, @Body group: GroupInfo ): Response @DELETE("members/groups") suspend fun deleteGroup( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Query("groupName") groupName: String ): Response @PATCH("members/groups/{groupMemberId}") suspend fun patchMember( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("groupMemberId") memberId: String, @Body relationName: GroupMemberInfo ): Response @@ -87,19 +66,16 @@ interface MyPageApi { //TODO FIX @DELETE("members/groups/{groupMemberId}") suspend fun deleteGroupMember( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Path("groupMemberId") memberId: String ): Response - @GET("baby/invitation") suspend fun getInvitationInfo( - @Query("code") inviteCode: String): Response - + @Query("code") inviteCode: String + ): Response @POST("baby/invite-code") suspend fun makeInviteCode( - @Header("Authorization") token: String = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY), @Body relationInfo: RelationInfo ): Response diff --git a/app/src/main/java/kids/baba/mobile/data/api/SignUpApi.kt b/app/src/main/java/kids/baba/mobile/data/api/SignUpApi.kt new file mode 100644 index 00000000..95299844 --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/data/api/SignUpApi.kt @@ -0,0 +1,23 @@ +package kids.baba.mobile.data.api + +import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo +import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode +import kids.baba.mobile.domain.model.TokenResponse +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.Header +import retrofit2.http.POST + +interface SignUpApi { + @POST("members/baby") + suspend fun signUpWithBabiesInfo( + @Body + signupRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ): Response + + @POST("members/baby/invite-code") + suspend fun signUpWithInviteCode( + @Body + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ): Response +} \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSource.kt index c6b0759c..343b33e9 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSource.kt @@ -5,30 +5,29 @@ import okhttp3.MultipartBody import okhttp3.RequestBody interface AlbumRemoteDataSource { - suspend fun getAlbum(id: String, year: Int, month: Int): Result> + suspend fun getAlbum(id: String, year: Int, month: Int): ApiResult> - suspend fun getOneAlbum(babyId:String, contentId: Int): Result + suspend fun getOneAlbum(babyId: String, contentId: Int): ApiResult suspend fun postAlbum( - accessToken: String, id: String, photo: MultipartBody.Part, bodyDataHashMap: HashMap - ): Result + ): ApiResult - suspend fun likeAlbum(id: String, contentId: Int): Result + suspend fun likeAlbum(id: String, contentId: Int): ApiResult suspend fun deleteAlbum( babyId: String, contentId: Int - ): Result + ): ApiResult - suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): Result + suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): ApiResult - suspend fun deleteComment(id: String, contentId: Int, commentId: String) : Result + suspend fun deleteComment(id: String, contentId: Int, commentId: String): ApiResult - suspend fun getComment(id: String, contentId: Int): Result> + suspend fun getComment(id: String, contentId: Int): ApiResult> - suspend fun getLikeDetail(id: String, contentId: Int): Result + suspend fun getLikeDetail(id: String, contentId: Int): ApiResult - suspend fun getAllAlbum(id: String): Result> + suspend fun getAllAlbum(id: String): ApiResult> } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSourceImpl.kt index ccec7def..ae702d48 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSourceImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/album/AlbumRemoteDataSourceImpl.kt @@ -3,12 +3,7 @@ package kids.baba.mobile.data.datasource.album import kids.baba.mobile.core.error.EntityTooLargeException import kids.baba.mobile.data.api.AlbumApi import kids.baba.mobile.data.network.SafeApiHelper -import kids.baba.mobile.domain.model.Album -import kids.baba.mobile.domain.model.Comment -import kids.baba.mobile.domain.model.CommentInput -import kids.baba.mobile.domain.model.LikeDetailResponse -import kids.baba.mobile.domain.model.PostAlbumResponse -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.* import okhttp3.MultipartBody import okhttp3.RequestBody import javax.inject.Inject @@ -22,7 +17,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( id: String, year: Int, month: Int, - ): Result> { + ): ApiResult> { val result = safeApiHelper.getSafe( remoteFetch = { api.getAlbum(id = id, year = year, month = month) @@ -34,32 +29,31 @@ class AlbumRemoteDataSourceImpl @Inject constructor( return result } - override suspend fun getOneAlbum(babyId: String, contentId: Int): Result = + override suspend fun getOneAlbum(babyId: String, contentId: Int): ApiResult = safeApiHelper.getSafe( remoteFetch = { api.gatOneAlbum(babyId = babyId, contentId = contentId) }, - mapping = {it} + mapping = { it } ) override suspend fun postAlbum( - accessToken: String, id: String, photo: MultipartBody.Part, bodyDataHashMap: HashMap - ): Result { + ): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { - api.postAlbum(accessToken, id, photo, bodyDataHashMap) + api.postAlbum(id, photo, bodyDataHashMap) }, mapping = { it } ) - return if (result is Result.Failure) { + return if (result is ApiResult.Failure) { if (result.code == 413) { - Result.Failure(result.code, result.message, EntityTooLargeException()) + ApiResult.Failure(result.code, result.message, EntityTooLargeException()) } else { result } @@ -68,7 +62,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( } } - override suspend fun likeAlbum(id: String, contentId: Int): Result { + override suspend fun likeAlbum(id: String, contentId: Int): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.likeAlbum(id = id, contentId = contentId) @@ -92,7 +86,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( id: String, contentId: Int, commentInput: CommentInput - ): Result = + ): ApiResult = safeApiHelper.getSafe( remoteFetch = { api.addComment(id = id, contentId = contentId, commentInput = commentInput) @@ -104,7 +98,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( id: String, contentId: Int, commentId: String - ): Result = + ): ApiResult = safeApiHelper.getSafe( remoteFetch = { api.deleteComment(id = id, contentId = contentId, commentId = commentId) @@ -112,7 +106,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( mapping = {} ) - override suspend fun getComment(id: String, contentId: Int): Result> = + override suspend fun getComment(id: String, contentId: Int): ApiResult> = safeApiHelper.getSafe( remoteFetch = { api.getComments(id = id, contentId = contentId) @@ -122,7 +116,7 @@ class AlbumRemoteDataSourceImpl @Inject constructor( } ) - override suspend fun getLikeDetail(id: String, contentId: Int): Result = + override suspend fun getLikeDetail(id: String, contentId: Int): ApiResult = safeApiHelper.getSafe( remoteFetch = { api.getLikeDetail(id = id, contentId = contentId) diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSource.kt index 6681f50b..4fa9a2d8 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSource.kt @@ -1,14 +1,14 @@ package kids.baba.mobile.data.datasource.auth -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.SignTokenRequest import kids.baba.mobile.domain.model.TermsData import kids.baba.mobile.domain.model.TokenResponse interface AuthRemoteDataSource { - suspend fun login(socialToken: String): Result + suspend fun login(socialToken: String): ApiResult - suspend fun getTerms(socialToken: String): Result> + suspend fun getTerms(socialToken: String): ApiResult> - suspend fun getSignToken(signTokenRequest: SignTokenRequest): Result + suspend fun getSignToken(signTokenRequest: SignTokenRequest): ApiResult } diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSourceImpl.kt index 58bea33a..03c189c1 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSourceImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/auth/AuthRemoteDataSourceImpl.kt @@ -4,7 +4,7 @@ import kids.baba.mobile.core.error.UserNotFoundException import kids.baba.mobile.data.api.AuthApi import kids.baba.mobile.data.network.SafeApiHelper import kids.baba.mobile.domain.model.LoginRequest -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.SignTokenRequest import kids.baba.mobile.domain.model.TokenResponse import javax.inject.Inject @@ -13,7 +13,7 @@ class AuthRemoteDataSourceImpl @Inject constructor( private val api: AuthApi, private val safeApiHelper: SafeApiHelper ) : AuthRemoteDataSource { - override suspend fun login(socialToken: String): Result { + override suspend fun login(socialToken: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.login(LoginRequest(socialToken)) @@ -22,8 +22,8 @@ class AuthRemoteDataSourceImpl @Inject constructor( it } ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, UserNotFoundException("신규 로그인")) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, UserNotFoundException("신규 로그인")) } else { result } @@ -42,6 +42,6 @@ class AuthRemoteDataSourceImpl @Inject constructor( remoteFetch = { api.getSignToken(signTokenRequest) }, - mapping = {it.signToken} + mapping = { it.signToken } ) } diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSource.kt index 87dd5fd1..2224464d 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSource.kt @@ -2,9 +2,9 @@ package kids.baba.mobile.data.datasource.baby import kids.baba.mobile.domain.model.BabiesInfoResponse import kids.baba.mobile.domain.model.BabyResponse -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult interface BabyRemoteDataSource { - suspend fun getBabiesInfo(inviteCode: String): Result - suspend fun getBaby(): Result + suspend fun getBabiesInfo(inviteCode: String): ApiResult + suspend fun getBaby(): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSourceImpl.kt index 032952dd..7d5bced8 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSourceImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/baby/BabyRemoteDataSourceImpl.kt @@ -3,7 +3,7 @@ package kids.baba.mobile.data.datasource.baby import kids.baba.mobile.data.api.BabyApi import kids.baba.mobile.data.network.SafeApiHelper import kids.baba.mobile.domain.model.BabyResponse -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import javax.inject.Inject class BabyRemoteDataSourceImpl @Inject constructor( @@ -15,7 +15,7 @@ class BabyRemoteDataSourceImpl @Inject constructor( mapping = {it} ) - override suspend fun getBaby() : Result{ + override suspend fun getBaby() : ApiResult{ val result = safeApiHelper.getSafe( remoteFetch = { babyApi.getBaby() diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/file/FileRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/file/FileRemoteDataSource.kt index 5eae11a8..0800a60b 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/file/FileRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/file/FileRemoteDataSource.kt @@ -1,8 +1,8 @@ package kids.baba.mobile.data.datasource.file -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import okhttp3.ResponseBody interface FileRemoteDataSource { - suspend fun downloadFile(fileUrl: String): Result + suspend fun downloadFile(fileUrl: String): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSource.kt index cb9a001c..9818bce5 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSource.kt @@ -1,15 +1,9 @@ package kids.baba.mobile.data.datasource.member +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.MemberModel -import kids.baba.mobile.domain.model.Result -import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo -import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode -import kids.baba.mobile.domain.model.TokenResponse interface MemberRemoteDataSource { - suspend fun getMe(accessToken: String): Result + suspend fun getMe(): ApiResult - suspend fun signUpWithBabiesInfo(signToken: String, signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo): Result - - suspend fun signUpWithInviteCode(signToken: String, signUpRequestWithInviteCode: SignUpRequestWithInviteCode): Result } diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSourceImpl.kt index 5c7e6a2a..f13ce82a 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSourceImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/member/MemberRemoteDataSourceImpl.kt @@ -2,33 +2,16 @@ package kids.baba.mobile.data.datasource.member import kids.baba.mobile.data.api.MemberApi import kids.baba.mobile.data.network.SafeApiHelper -import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo -import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode import javax.inject.Inject class MemberRemoteDataSourceImpl @Inject constructor( private val memberApi: MemberApi, private val safeApiHelper: SafeApiHelper ) : MemberRemoteDataSource { - override suspend fun getMe(accessToken: String) = safeApiHelper.getSafe( - remoteFetch = { memberApi.getMe(accessToken) }, + override suspend fun getMe() = safeApiHelper.getSafe( + remoteFetch = { + memberApi.getMe() + }, mapping = { it } ) - - override suspend fun signUpWithBabiesInfo( - signToken: String, - signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo, - ) = safeApiHelper.getSafe( - remoteFetch = { memberApi.signUpWithBabiesInfo(signToken, signUpRequestWithBabiesInfo) }, - mapping = { it } - ) - - - override suspend fun signUpWithInviteCode( - signToken: String, - signUpRequestWithInviteCode: SignUpRequestWithInviteCode - ) = safeApiHelper.getSafe( - remoteFetch = {memberApi.signUpWithInviteCode(signToken, signUpRequestWithInviteCode)}, - mapping = {it} - ) } diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSource.kt index 96a20ba7..178f3207 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSource.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSource.kt @@ -1,36 +1,35 @@ package kids.baba.mobile.data.datasource.mypage import kids.baba.mobile.domain.model.* -import kotlinx.coroutines.flow.Flow interface MyPageRemoteDataSource { - suspend fun loadMyPageGroup(): Result + suspend fun loadMyPageGroup(): ApiResult - suspend fun loadBabyProfile(babyId: String): Result + suspend fun loadBabyProfile(babyId: String): ApiResult - suspend fun addGroup(myPageGroup: MyPageGroup): Result + suspend fun addGroup(myPageGroup: MyPageGroup): ApiResult - suspend fun editProfile(profile: Profile): Result + suspend fun editProfile(profile: Profile): ApiResult - suspend fun editBabyName(babyId: String, name: String): Result + suspend fun editBabyName(babyId: String, name: String): ApiResult - suspend fun addMyBaby(baby: MyBaby): Result + suspend fun addMyBaby(baby: MyBaby): ApiResult - suspend fun addBabyWithInviteCode(inviteCode: InviteCode): Result + suspend fun addBabyWithInviteCode(inviteCode: InviteCode): ApiResult - suspend fun deleteBaby(babyId: String): Result + suspend fun deleteBaby(babyId: String): ApiResult - suspend fun patchGroup(groupName: String, group: GroupInfo): Result + suspend fun patchGroup(groupName: String, group: GroupInfo): ApiResult - suspend fun deleteGroup(groupName: String): Result + suspend fun deleteGroup(groupName: String): ApiResult - suspend fun patchMember(memberId: String, relation: GroupMemberInfo): Result + suspend fun patchMember(memberId: String, relation: GroupMemberInfo): ApiResult - suspend fun deleteGroupMember(memberId: String): Result + suspend fun deleteGroupMember(memberId: String): ApiResult - suspend fun getInvitationInfo(inviteCode: String): Result + suspend fun getInvitationInfo(inviteCode: String): ApiResult - suspend fun makeInviteCode(relationInfo: RelationInfo): Result + suspend fun makeInviteCode(relationInfo: RelationInfo): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSourceImpl.kt index 9ba7fa6c..629bf3be 100644 --- a/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSourceImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/datasource/mypage/MyPageRemoteDataSourceImpl.kt @@ -10,7 +10,7 @@ class MyPageRemoteDataSourceImpl @Inject constructor( private val api: MyPageApi, private val safeApiHelper: SafeApiHelper ) : MyPageRemoteDataSource { - override suspend fun loadMyPageGroup(): Result { + override suspend fun loadMyPageGroup(): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.loadMyPageGroup() @@ -19,15 +19,14 @@ class MyPageRemoteDataSourceImpl @Inject constructor( it } ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } -// return if (result is Result.Success) flow { emit(result.data) } else flow {} } - override suspend fun loadBabyProfile(babyId: String): Result { + override suspend fun loadBabyProfile(babyId: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.loadBabyProfile(babyId = babyId) @@ -37,84 +36,84 @@ class MyPageRemoteDataSourceImpl @Inject constructor( } ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun addGroup(myPageGroup: MyPageGroup): Result { + override suspend fun addGroup(myPageGroup: MyPageGroup): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.addGroup(myPageGroup = myPageGroup) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun editProfile(profile: Profile): Result { + override suspend fun editProfile(profile: Profile): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.editProfile(profile = profile) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun editBabyName(babyId: String, name: String): Result { + override suspend fun editBabyName(babyId: String, name: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.editBabyName(babyId = babyId, babyEdit = BabyEdit(name)) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun addMyBaby(baby: MyBaby): Result { + override suspend fun addMyBaby(baby: MyBaby): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.addMyBaby(baby = baby) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun addBabyWithInviteCode(inviteCode: InviteCode): Result { + override suspend fun addBabyWithInviteCode(inviteCode: InviteCode): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.addBabyWithInviteCode(inviteCode = inviteCode) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun deleteBaby(babyId: String): Result { + override suspend fun deleteBaby(babyId: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.deleteBaby(babyId = babyId) @@ -122,70 +121,70 @@ class MyPageRemoteDataSourceImpl @Inject constructor( mapping = {} ) Log.e("deleteBaby", result.toString()) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun patchGroup(groupName: String, group: GroupInfo): Result { + override suspend fun patchGroup(groupName: String, group: GroupInfo): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.patchGroup(groupName = groupName, group = group) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun deleteGroup(groupName: String): Result { + override suspend fun deleteGroup(groupName: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.deleteGroup(groupName = groupName) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun patchMember(memberId: String, relation: GroupMemberInfo): Result { + override suspend fun patchMember(memberId: String, relation: GroupMemberInfo): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.patchMember(memberId = memberId, relationName = relation) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun deleteGroupMember(memberId: String): Result { + override suspend fun deleteGroupMember(memberId: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.deleteGroupMember(memberId = memberId) }, mapping = {} ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun getInvitationInfo(inviteCode: String): Result { + override suspend fun getInvitationInfo(inviteCode: String): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.getInvitationInfo(inviteCode = inviteCode) @@ -194,14 +193,14 @@ class MyPageRemoteDataSourceImpl @Inject constructor( it } ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } } - override suspend fun makeInviteCode(relationInfo: RelationInfo): Result { + override suspend fun makeInviteCode(relationInfo: RelationInfo): ApiResult { val result = safeApiHelper.getSafe( remoteFetch = { api.makeInviteCode(relationInfo = relationInfo) @@ -210,8 +209,8 @@ class MyPageRemoteDataSourceImpl @Inject constructor( it } ) - return if (result is Result.Failure) { - Result.Failure(result.code, result.message, Exception(result.message)) + return if (result is ApiResult.Failure) { + ApiResult.Failure(result.code, result.message, Exception(result.message)) } else { result } diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSource.kt b/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSource.kt new file mode 100644 index 00000000..d3e1b8c1 --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSource.kt @@ -0,0 +1,16 @@ +package kids.baba.mobile.data.datasource.signup + +import kids.baba.mobile.domain.model.ApiResult +import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo +import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode +import kids.baba.mobile.domain.model.TokenResponse + +interface SignUpRemoteDataSource { + suspend fun signUpWithBabiesInfo( + signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ): ApiResult + + suspend fun signUpWithInviteCode( + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ): ApiResult +} \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSourceImpl.kt b/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSourceImpl.kt new file mode 100644 index 00000000..1fb5b069 --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/data/datasource/signup/SignUpRemoteDataSourceImpl.kt @@ -0,0 +1,27 @@ +package kids.baba.mobile.data.datasource.signup + +import kids.baba.mobile.data.api.SignUpApi +import kids.baba.mobile.data.network.SafeApiHelper +import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo +import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode +import javax.inject.Inject + +class SignUpRemoteDataSourceImpl @Inject constructor( + private val signUpApi: SignUpApi, + private val safeApiHelper: SafeApiHelper +) : SignUpRemoteDataSource { + override suspend fun signUpWithBabiesInfo( + signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ) = safeApiHelper.getSafe( + remoteFetch = { signUpApi.signUpWithBabiesInfo(signUpRequestWithBabiesInfo) }, + mapping = { it } + ) + + override suspend fun signUpWithInviteCode( + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ) = safeApiHelper.getSafe( + remoteFetch = { signUpApi.signUpWithInviteCode(signUpRequestWithInviteCode) }, + mapping = { it } + ) + +} \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/di/ApiModule.kt b/app/src/main/java/kids/baba/mobile/data/di/ApiModule.kt index 66529b33..12747e98 100644 --- a/app/src/main/java/kids/baba/mobile/data/di/ApiModule.kt +++ b/app/src/main/java/kids/baba/mobile/data/di/ApiModule.kt @@ -5,12 +5,7 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import kids.baba.mobile.BuildConfig -import kids.baba.mobile.data.api.AlbumApi -import kids.baba.mobile.data.api.AuthApi -import kids.baba.mobile.data.api.BabyApi -import kids.baba.mobile.data.api.FileApi -import kids.baba.mobile.data.api.MemberApi -import kids.baba.mobile.data.api.MyPageApi +import kids.baba.mobile.data.api.* import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory @@ -25,6 +20,10 @@ object ApiModule { @Retention(AnnotationRetention.BINARY) annotation class BabaRetrofit + @Qualifier + @Retention(AnnotationRetention.BINARY) + annotation class SignUpRetrofit + @Qualifier @Retention(AnnotationRetention.BINARY) annotation class AuthRetrofit @@ -40,11 +39,16 @@ object ApiModule { @NetworkModule.BabaClient okHttpClient: OkHttpClient, gsonConverterFactory: GsonConverterFactory - ): Retrofit = Retrofit.Builder() - .baseUrl(BuildConfig.BASE_URL) - .client(okHttpClient) - .addConverterFactory(gsonConverterFactory) - .build() + ): Retrofit = buildBaseRetrofit(okHttpClient, gsonConverterFactory) + + @SignUpRetrofit + @Singleton + @Provides + fun provideSignUpRetrofit( + @NetworkModule.SignUpClient + okHttpClient: OkHttpClient, + gsonConverterFactory: GsonConverterFactory + ): Retrofit = buildBaseRetrofit(okHttpClient, gsonConverterFactory) @AuthRetrofit @Singleton @@ -53,22 +57,30 @@ object ApiModule { @NetworkModule.AuthClient okHttpClient: OkHttpClient, gsonConverterFactory: GsonConverterFactory - ): Retrofit = Retrofit.Builder() - .baseUrl(BuildConfig.BASE_URL) - .client(okHttpClient) - .addConverterFactory(gsonConverterFactory) - .build() + ): Retrofit = buildBaseRetrofit(okHttpClient, gsonConverterFactory) @FileRetrofit @Singleton @Provides fun provideFileDownRetrofit( gsonConverterFactory: GsonConverterFactory - ): Retrofit = Retrofit.Builder() - .baseUrl(BuildConfig.BASE_PHOTO_URL) + ): Retrofit = buildFileDownRetrofit(gsonConverterFactory) + + private fun buildBaseRetrofit( + okHttpClient: OkHttpClient, + gsonConverterFactory: GsonConverterFactory + ) = Retrofit.Builder() + .baseUrl(BuildConfig.BASE_URL) + .client(okHttpClient) .addConverterFactory(gsonConverterFactory) .build() + private fun buildFileDownRetrofit(gsonConverterFactory: GsonConverterFactory) = + Retrofit.Builder() + .baseUrl(BuildConfig.BASE_PHOTO_URL) + .addConverterFactory(gsonConverterFactory) + .build() + @Singleton @Provides @@ -100,6 +112,12 @@ object ApiModule { @BabaRetrofit retrofit: Retrofit ): MyPageApi = retrofit.create(MyPageApi::class.java) + @Singleton + @Provides + fun provideSignUpApi( + @SignUpRetrofit retrofit: Retrofit + ): SignUpApi = retrofit.create(SignUpApi::class.java) + @Singleton @Provides fun provideFileDownApi( diff --git a/app/src/main/java/kids/baba/mobile/data/di/DataSourceModule.kt b/app/src/main/java/kids/baba/mobile/data/di/DataSourceModule.kt index 39b6e8be..31b5c8a5 100644 --- a/app/src/main/java/kids/baba/mobile/data/di/DataSourceModule.kt +++ b/app/src/main/java/kids/baba/mobile/data/di/DataSourceModule.kt @@ -18,6 +18,8 @@ import kids.baba.mobile.data.datasource.member.MemberRemoteDataSource import kids.baba.mobile.data.datasource.member.MemberRemoteDataSourceImpl import kids.baba.mobile.data.datasource.mypage.MyPageRemoteDataSource import kids.baba.mobile.data.datasource.mypage.MyPageRemoteDataSourceImpl +import kids.baba.mobile.data.datasource.signup.SignUpRemoteDataSource +import kids.baba.mobile.data.datasource.signup.SignUpRemoteDataSourceImpl @Module @InstallIn(SingletonComponent::class) @@ -37,6 +39,9 @@ abstract class DataSourceModule { @Binds abstract fun bindMyPageRemoteDataSource(myPageRemoteDataSourceImpl: MyPageRemoteDataSourceImpl): MyPageRemoteDataSource + @Binds + abstract fun bindSignUpRemoteDataSource(signUpRemoteDataSourceImpl: SignUpRemoteDataSourceImpl): SignUpRemoteDataSource + @Binds abstract fun bindFileRemoteDataSource(fileRemoteDataSourceImpl: FileRemoteDataSourceImpl): FileRemoteDataSource diff --git a/app/src/main/java/kids/baba/mobile/data/di/NetworkModule.kt b/app/src/main/java/kids/baba/mobile/data/di/NetworkModule.kt index 4a417e44..039cc075 100644 --- a/app/src/main/java/kids/baba/mobile/data/di/NetworkModule.kt +++ b/app/src/main/java/kids/baba/mobile/data/di/NetworkModule.kt @@ -8,7 +8,6 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import kids.baba.mobile.BuildConfig import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.error.TokenEmptyException import kids.baba.mobile.core.error.TokenRefreshFailedException @@ -42,6 +41,18 @@ object NetworkModule { @Retention(AnnotationRetention.BINARY) annotation class AuthClient + @Qualifier + @Retention(AnnotationRetention.BINARY) + annotation class SignUpClient + + @Qualifier + @Retention(AnnotationRetention.BINARY) + annotation class NormalAuthInterceptor + + @Qualifier + @Retention(AnnotationRetention.BINARY) + annotation class SignUpAuthInterceptor + @Singleton @Provides fun provideGsonBuilder(): GsonBuilder { @@ -64,6 +75,7 @@ object NetworkModule { @Singleton @Provides fun provideBabaClient( + @NormalAuthInterceptor authorizationInterceptor: Interceptor, tokenAuthenticator: Authenticator ): OkHttpClient { @@ -78,10 +90,11 @@ object NetworkModule { return builder.build() } - @AuthClient + @SignUpClient @Singleton @Provides - fun provideAuthClient( + fun provideSignUpClient( + @SignUpAuthInterceptor authorizationInterceptor: Interceptor ): OkHttpClient { val builder = OkHttpClient.Builder() @@ -94,19 +107,40 @@ object NetworkModule { return builder.build() } + @AuthClient @Singleton @Provides - fun providesAuthorizationInterceptor() = Interceptor { chain -> + fun provideAuthClient(): OkHttpClient { + val builder = OkHttpClient.Builder() + val loggingInterceptor = HttpLoggingInterceptor() + loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY + builder.apply { + addInterceptor(loggingInterceptor) + } + return builder.build() + } + + @NormalAuthInterceptor + @Singleton + @Provides + fun provideNormalAuthorizationInterceptor() = Interceptor { chain -> val request = chain.request().newBuilder() - val hasAuthorization = chain.request().headers.names().contains("Authorization") + val accessToken = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY) + request.header("Authorization", "Bearer $accessToken") + chain.proceed(request.build()) + } - if (hasAuthorization) { - val accessToken = chain.request().header("Authorization") - request.header("Authorization", "Bearer $accessToken") - } + @SignUpAuthInterceptor + @Singleton + @Provides + fun provideSignUpAuthorizationInterceptor() = Interceptor { chain -> + val request = chain.request().newBuilder() + val signToken = EncryptedPrefs.getString(PrefsKey.SIGN_TOKEN_KEY) + request.header("Authorization", "Bearer $signToken") chain.proceed(request.build()) } + @Singleton @Provides fun provideTokenAuthenticator( @@ -114,9 +148,7 @@ object NetworkModule { authApi: AuthApi ) = Authenticator { _, response -> val tag = "TokenAuthenticator" - val isPathRefresh = - response.request.url.toUrl().toString() == BuildConfig.BASE_URL + "auth/refresh" - if (response.code == 401 && !isPathRefresh) { + if (response.code == 401) { try { val refreshToken = EncryptedPrefs.getString(PrefsKey.REFRESH_TOKEN_KEY) val tokenRefreshRequest = TokenRefreshRequest(refreshToken) @@ -146,6 +178,6 @@ object NetworkModule { @Singleton @Provides - fun provideSafeApi() : SafeApiHelper = SafeApiHelperImpl() + fun provideSafeApi(): SafeApiHelper = SafeApiHelperImpl() } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/di/RepositoryModule.kt b/app/src/main/java/kids/baba/mobile/data/di/RepositoryModule.kt index 555737cc..4b0d2f6d 100644 --- a/app/src/main/java/kids/baba/mobile/data/di/RepositoryModule.kt +++ b/app/src/main/java/kids/baba/mobile/data/di/RepositoryModule.kt @@ -31,6 +31,9 @@ abstract class RepositoryModule { @Binds abstract fun bindMyPageRepository(myPageRepositoryImpl: MyPageRepositoryImpl): MyPageRepository + @Binds + abstract fun bindSignUpRepository(signUpRepositoryImpl: SignUpRepositoryImpl): SignUpRepository + @Binds abstract fun bindFileRemoteRepository(fileRepositoryImpl: FileRepositoryImpl): FileRepository } diff --git a/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelper.kt b/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelper.kt index 84d8a3ee..f1b88472 100644 --- a/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelper.kt +++ b/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelper.kt @@ -1,12 +1,13 @@ package kids.baba.mobile.data.network -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import retrofit2.Response interface SafeApiHelper { suspend fun getSafe( remoteFetch: suspend () -> Response, - mapping: (RequestType) -> (ResultType) - ): Result + mapping: (RequestType) -> (ResultType), + canRecursive: Boolean = true + ): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelperImpl.kt b/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelperImpl.kt index 95cc2a68..6ec3dfc5 100644 --- a/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelperImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/network/SafeApiHelperImpl.kt @@ -1,11 +1,11 @@ package kids.baba.mobile.data.network -import android.util.Log import com.google.gson.Gson +import kids.baba.mobile.core.error.InvalidAccessTokenException import kids.baba.mobile.core.error.NullBodyException import kids.baba.mobile.core.error.UnKnownException +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.ErrorResponse -import kids.baba.mobile.domain.model.Result import retrofit2.Response import java.io.IOException import javax.inject.Inject @@ -15,41 +15,68 @@ class SafeApiHelperImpl @Inject constructor( private val gson = Gson() override suspend fun getSafe( remoteFetch: suspend () -> Response, - mapping: (RequestType) -> ResultType - ): Result { + mapping: (RequestType) -> ResultType, + canRecursive: Boolean + ): ApiResult { + + lateinit var apiResult: ApiResult - lateinit var result: Result runCatching { remoteFetch() } .onSuccess { if (it.isSuccessful) { val body = it.body() - result = if (body != null) { - Result.Success(mapping(body)) - } else { - Result.Unexpected(NullBodyException("Body가 null임")) - } + apiResult = successApiResult(body, mapping) } else { - var errorMessage = try { - gson.fromJson( - it.errorBody()?.string(), - ErrorResponse::class.java - )?.message - } catch (e: Exception) { - null - } - - if (errorMessage.isNullOrBlank()) { - errorMessage = "Unknown Error" - } - result = Result.Failure(it.code(), errorMessage, UnKnownException()) + val errorMessage = setErrorMessage(it) + apiResult = errorCodeApiResult(it, errorMessage) } } .onFailure { - result = when (it) { - is IOException -> Result.NetworkError(it) - else -> Result.Unexpected(it) + apiResult = when (it) { + is IOException -> ApiResult.NetworkError(it) + else -> ApiResult.Unexpected(it) } } - return result + + if ((apiResult as? ApiResult.Failure)?.throwable is InvalidAccessTokenException) { + if (canRecursive) { + return getSafe(remoteFetch, mapping, canRecursive = false) + } + } + return apiResult + } + + private fun successApiResult( + body: RequestType?, + mapping: (RequestType) -> ResultType + ) = if (body != null) { + ApiResult.Success(mapping(body)) + } else { + ApiResult.Unexpected(NullBodyException("Body가 null임")) + } + + private fun errorCodeApiResult( + it: Response, + errorMessage: String? + ) = if (it.code() == 401) { + ApiResult.Failure(it.code(), errorMessage, InvalidAccessTokenException()) + } else { + ApiResult.Failure(it.code(), errorMessage, UnKnownException()) + } + + private fun setErrorMessage(it: Response): String { + var errorMessage = try { + gson.fromJson( + it.errorBody()?.string(), + ErrorResponse::class.java + )?.message + } catch (e: Exception) { + null + } + + if (errorMessage.isNullOrBlank()) { + errorMessage = "Unknown Error" + } + return errorMessage } } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/repository/AlbumRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/AlbumRepositoryImpl.kt index 7db9211d..2f9ccc29 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/AlbumRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/AlbumRepositoryImpl.kt @@ -1,11 +1,7 @@ package kids.baba.mobile.data.repository import kids.baba.mobile.data.datasource.album.AlbumRemoteDataSource -import kids.baba.mobile.domain.model.Album -import kids.baba.mobile.domain.model.Comment -import kids.baba.mobile.domain.model.CommentInput -import kids.baba.mobile.domain.model.LikeDetailResponse -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.* import kids.baba.mobile.domain.repository.AlbumRepository import okhttp3.MultipartBody import okhttp3.RequestBody @@ -17,34 +13,33 @@ class AlbumRepositoryImpl @Inject constructor(private val dataSource: AlbumRemot id: String, year: Int, month: Int, - ): Result> = dataSource.getAlbum(id, year, month) + ): ApiResult> = dataSource.getAlbum(id, year, month) override suspend fun getOneAlbum(babyId: String, contentId: Int) = dataSource.getOneAlbum(babyId, contentId) override suspend fun postAlbum( - accessToken: String, id: String, photo: MultipartBody.Part, bodyDataHashMap: HashMap - ) = dataSource.postAlbum(accessToken, id, photo, bodyDataHashMap) + ) = dataSource.postAlbum(id, photo, bodyDataHashMap) override suspend fun deleteAlbum(babyId: String, contentId: Int) = dataSource.deleteAlbum(babyId, contentId) - override suspend fun likeAlbum(id: String, contentId: Int): Result = + override suspend fun likeAlbum(id: String, contentId: Int): ApiResult = dataSource.likeAlbum(id, contentId) - override suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): Result = + override suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): ApiResult = dataSource.addComment(id, contentId, commentInput) - override suspend fun deleteComment(id: String, contentId: Int, commentId: String) : Result = + override suspend fun deleteComment(id: String, contentId: Int, commentId: String): ApiResult = dataSource.deleteComment(id = id, contentId = contentId, commentId = commentId) - override suspend fun getComment(id: String, contentId: Int): Result> = + override suspend fun getComment(id: String, contentId: Int): ApiResult> = dataSource.getComment(id = id, contentId = contentId) - override suspend fun getLikeDetail(id: String, contentId: Int): Result = + override suspend fun getLikeDetail(id: String, contentId: Int): ApiResult = dataSource.getLikeDetail(id = id, contentId = contentId) override suspend fun getAllAlbum(id: String) = dataSource.getAllAlbum(id) diff --git a/app/src/main/java/kids/baba/mobile/data/repository/AuthRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/AuthRepositoryImpl.kt index bb0fa61f..af4efe0d 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/AuthRepositoryImpl.kt @@ -11,5 +11,6 @@ class AuthRepositoryImpl @Inject constructor(private val authRemoteDataSource: A override suspend fun login(socialToken: String) = authRemoteDataSource.login(socialToken) override suspend fun getTerms(socialToken: String) = authRemoteDataSource.getTerms(socialToken) - override suspend fun getSignToken(signTokenRequest: SignTokenRequest) = authRemoteDataSource.getSignToken(signTokenRequest) + override suspend fun getSignToken(signTokenRequest: SignTokenRequest) = + authRemoteDataSource.getSignToken(signTokenRequest) } diff --git a/app/src/main/java/kids/baba/mobile/data/repository/BabyRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/BabyRepositoryImpl.kt index ee162adb..381057b5 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/BabyRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/BabyRepositoryImpl.kt @@ -1,15 +1,15 @@ package kids.baba.mobile.data.repository import kids.baba.mobile.data.datasource.baby.BabyRemoteDataSource +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.BabyResponse -import kids.baba.mobile.domain.model.Result import kids.baba.mobile.domain.repository.BabyRepository import javax.inject.Inject class BabyRepositoryImpl @Inject constructor( private val babyRemoteDataSource: BabyRemoteDataSource ) : BabyRepository { - override suspend fun getBaby(): Result = babyRemoteDataSource.getBaby() + override suspend fun getBaby(): ApiResult = babyRemoteDataSource.getBaby() override suspend fun getBabiesInfo(inviteCode: String) = babyRemoteDataSource.getBabiesInfo(inviteCode) diff --git a/app/src/main/java/kids/baba/mobile/data/repository/FileRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/FileRepositoryImpl.kt index 00e9e859..72da0114 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/FileRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/FileRepositoryImpl.kt @@ -3,7 +3,7 @@ package kids.baba.mobile.data.repository import android.net.Uri import kids.baba.mobile.data.datasource.file.FileLocalDataSource import kids.baba.mobile.data.datasource.file.FileRemoteDataSource -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.repository.FileRepository import javax.inject.Inject @@ -11,23 +11,23 @@ class FileRepositoryImpl @Inject constructor( private val fileRemoteDataSource: FileRemoteDataSource, private val fileLocalDataSource: FileLocalDataSource ) : FileRepository { - override suspend fun saveFile(fileUrl: String, fileName: String): Result { + override suspend fun saveFile(fileUrl: String, fileName: String): ApiResult { return when (val remoteResult = fileRemoteDataSource.downloadFile(fileUrl)) { - is Result.Success -> { + is ApiResult.Success -> { val localResult = fileLocalDataSource.saveFile(remoteResult.data, fileName) val uri = localResult.getOrNull() if (uri == null) { - Result.Unexpected(localResult.exceptionOrNull() ?: Throwable()) + ApiResult.Unexpected(localResult.exceptionOrNull() ?: Throwable()) } else { - Result.Success(uri) + ApiResult.Success(uri) } } - is Result.NetworkError -> Result.NetworkError(remoteResult.throwable) - is Result.Unexpected -> Result.Unexpected(remoteResult.throwable) - is Result.Failure -> Result.Failure( + is ApiResult.NetworkError -> ApiResult.NetworkError(remoteResult.throwable) + is ApiResult.Unexpected -> ApiResult.Unexpected(remoteResult.throwable) + is ApiResult.Failure -> ApiResult.Failure( remoteResult.code, remoteResult.message, remoteResult.throwable diff --git a/app/src/main/java/kids/baba/mobile/data/repository/MemberRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/MemberRepositoryImpl.kt index ccd52345..c88a78fd 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/MemberRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/MemberRepositoryImpl.kt @@ -1,23 +1,10 @@ package kids.baba.mobile.data.repository import kids.baba.mobile.data.datasource.member.MemberRemoteDataSource -import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo -import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode import kids.baba.mobile.domain.repository.MemberRepository import javax.inject.Inject class MemberRepositoryImpl @Inject constructor(private val memberRemoteDataSource: MemberRemoteDataSource) : MemberRepository { - override suspend fun getMe(accessToken: String) = memberRemoteDataSource.getMe(accessToken) - - override suspend fun signUpWithBabiesInfo( - signToken: String, - signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo - ) = memberRemoteDataSource.signUpWithBabiesInfo(signToken, signUpRequestWithBabiesInfo) - - - override suspend fun signUpWithInviteCode( - signToken: String, - signUpRequestWithInviteCode: SignUpRequestWithInviteCode - ) = memberRemoteDataSource.signUpWithInviteCode(signToken, signUpRequestWithInviteCode) + override suspend fun getMe() = memberRemoteDataSource.getMe() } diff --git a/app/src/main/java/kids/baba/mobile/data/repository/MyPageRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/MyPageRepositoryImpl.kt index 2f56273e..0e598821 100644 --- a/app/src/main/java/kids/baba/mobile/data/repository/MyPageRepositoryImpl.kt +++ b/app/src/main/java/kids/baba/mobile/data/repository/MyPageRepositoryImpl.kt @@ -3,12 +3,11 @@ package kids.baba.mobile.data.repository import kids.baba.mobile.data.datasource.mypage.MyPageRemoteDataSource import kids.baba.mobile.domain.model.* import kids.baba.mobile.domain.repository.MyPageRepository -import kotlinx.coroutines.flow.Flow import javax.inject.Inject class MyPageRepositoryImpl @Inject constructor(private val dataSource: MyPageRemoteDataSource) : MyPageRepository { - override suspend fun loadMyPageGroup(): Result = dataSource.loadMyPageGroup() + override suspend fun loadMyPageGroup(): ApiResult = dataSource.loadMyPageGroup() override suspend fun loadBabyProfile(babyId: String) = dataSource.loadBabyProfile(babyId = babyId) @@ -17,14 +16,14 @@ class MyPageRepositoryImpl @Inject constructor(private val dataSource: MyPageRem dataSource.addGroup(myPageGroup = myPageGroup) - override suspend fun editProfile(profile: Profile): Result { + override suspend fun editProfile(profile: Profile): ApiResult { return dataSource.editProfile(profile = profile) } override suspend fun editBabyName(babyId: String, name: String) = dataSource.editBabyName(babyId = babyId, name = name) - override suspend fun addMyBaby(baby: MyBaby): Result { + override suspend fun addMyBaby(baby: MyBaby): ApiResult { return dataSource.addMyBaby(baby = baby) } @@ -46,10 +45,10 @@ class MyPageRepositoryImpl @Inject constructor(private val dataSource: MyPageRem dataSource.deleteGroupMember(memberId = memberId) - override suspend fun getInvitationInfo(inviteCode: String): Result = + override suspend fun getInvitationInfo(inviteCode: String): ApiResult = dataSource.getInvitationInfo(inviteCode = inviteCode) - override suspend fun makeInviteCode(relationInfo: RelationInfo): Result = + override suspend fun makeInviteCode(relationInfo: RelationInfo): ApiResult = dataSource.makeInviteCode(relationInfo = relationInfo) } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/data/repository/SignUpRepositoryImpl.kt b/app/src/main/java/kids/baba/mobile/data/repository/SignUpRepositoryImpl.kt new file mode 100644 index 00000000..02bda614 --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/data/repository/SignUpRepositoryImpl.kt @@ -0,0 +1,20 @@ +package kids.baba.mobile.data.repository + +import kids.baba.mobile.data.datasource.signup.SignUpRemoteDataSource +import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo +import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode +import kids.baba.mobile.domain.repository.SignUpRepository +import javax.inject.Inject + +class SignUpRepositoryImpl @Inject constructor( + private val signUpRemoteDataSource: SignUpRemoteDataSource +) : SignUpRepository { + override suspend fun signUpWithBabiesInfo( + signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ) = signUpRemoteDataSource.signUpWithBabiesInfo(signUpRequestWithBabiesInfo) + + override suspend fun signUpWithInviteCode( + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ) = signUpRemoteDataSource.signUpWithInviteCode(signUpRequestWithInviteCode) + +} diff --git a/app/src/main/java/kids/baba/mobile/domain/model/ApiResult.kt b/app/src/main/java/kids/baba/mobile/domain/model/ApiResult.kt new file mode 100644 index 00000000..c64d9e64 --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/domain/model/ApiResult.kt @@ -0,0 +1,16 @@ +package kids.baba.mobile.domain.model + +sealed class ApiResult { + data class Success(val data: T) : ApiResult() + data class Failure(val code: Int, val message: String?, val throwable: Throwable) : ApiResult() + data class NetworkError(val throwable: Throwable) : ApiResult() + data class Unexpected(val throwable: Throwable) : ApiResult() +} + +fun ApiResult.getThrowableOrNull(): Throwable? = + when (this) { + is ApiResult.Success -> null + is ApiResult.Failure -> throwable + is ApiResult.NetworkError -> throwable + is ApiResult.Unexpected -> throwable + } diff --git a/app/src/main/java/kids/baba/mobile/domain/model/Result.kt b/app/src/main/java/kids/baba/mobile/domain/model/Result.kt deleted file mode 100644 index 194d2f8b..00000000 --- a/app/src/main/java/kids/baba/mobile/domain/model/Result.kt +++ /dev/null @@ -1,16 +0,0 @@ -package kids.baba.mobile.domain.model - -sealed class Result{ - data class Success(val data: T): Result() - data class Failure(val code: Int, val message: String?, val throwable: Throwable) : Result() - data class NetworkError(val throwable: Throwable) : Result() - data class Unexpected(val throwable: Throwable) : Result() -} - -fun Result.getThrowableOrNull() : Throwable? = - when(this) { - is Result.Success -> null - is Result.Failure -> throwable - is Result.NetworkError -> throwable - is Result.Unexpected -> throwable - } diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/AlbumRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/AlbumRepository.kt index 589e6f43..738ce56a 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/AlbumRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/AlbumRepository.kt @@ -1,41 +1,35 @@ package kids.baba.mobile.domain.repository -import kids.baba.mobile.domain.model.Album -import kids.baba.mobile.domain.model.Comment -import kids.baba.mobile.domain.model.CommentInput -import kids.baba.mobile.domain.model.LikeDetailResponse -import kids.baba.mobile.domain.model.PostAlbumResponse -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.* import okhttp3.MultipartBody import okhttp3.RequestBody interface AlbumRepository { - suspend fun getAlbum(id: String, year: Int, month: Int): Result> + suspend fun getAlbum(id: String, year: Int, month: Int): ApiResult> - suspend fun getOneAlbum(babyId: String, contentId: Int): Result + suspend fun getOneAlbum(babyId: String, contentId: Int): ApiResult suspend fun postAlbum( - accessToken: String, id: String, photo: MultipartBody.Part, bodyDataHashMap: HashMap - ): Result + ): ApiResult suspend fun deleteAlbum( babyId: String, contentId: Int - ): Result + ): ApiResult - suspend fun likeAlbum(id: String, contentId: Int): Result + suspend fun likeAlbum(id: String, contentId: Int): ApiResult - suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): Result + suspend fun addComment(id: String, contentId: Int, commentInput: CommentInput): ApiResult - suspend fun deleteComment(id: String, contentId: Int, commentId: String) : Result + suspend fun deleteComment(id: String, contentId: Int, commentId: String): ApiResult - suspend fun getComment(id: String, contentId: Int): Result> + suspend fun getComment(id: String, contentId: Int): ApiResult> - suspend fun getLikeDetail(id: String, contentId: Int): Result + suspend fun getLikeDetail(id: String, contentId: Int): ApiResult - suspend fun getAllAlbum(id: String): Result> + suspend fun getAllAlbum(id: String): ApiResult> } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/AuthRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/AuthRepository.kt index b7fe2963..0e076c5d 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/AuthRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/AuthRepository.kt @@ -1,14 +1,14 @@ package kids.baba.mobile.domain.repository -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.SignTokenRequest import kids.baba.mobile.domain.model.TermsData import kids.baba.mobile.domain.model.TokenResponse interface AuthRepository { - suspend fun login(socialToken: String): Result + suspend fun login(socialToken: String): ApiResult - suspend fun getTerms(socialToken: String): Result> + suspend fun getTerms(socialToken: String): ApiResult> - suspend fun getSignToken(signTokenRequest: SignTokenRequest): Result + suspend fun getSignToken(signTokenRequest: SignTokenRequest): ApiResult } diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/BabyRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/BabyRepository.kt index 0b15b890..e1b38898 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/BabyRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/BabyRepository.kt @@ -1,10 +1,10 @@ package kids.baba.mobile.domain.repository +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.BabiesInfoResponse import kids.baba.mobile.domain.model.BabyResponse -import kids.baba.mobile.domain.model.Result interface BabyRepository { - suspend fun getBaby() : Result - suspend fun getBabiesInfo(inviteCode: String): Result + suspend fun getBaby(): ApiResult + suspend fun getBabiesInfo(inviteCode: String): ApiResult } diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/FileRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/FileRepository.kt index ff64e81b..f3248c56 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/FileRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/FileRepository.kt @@ -1,8 +1,8 @@ package kids.baba.mobile.domain.repository import android.net.Uri -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult interface FileRepository { - suspend fun saveFile(fileUrl: String, fileName: String) : Result + suspend fun saveFile(fileUrl: String, fileName: String): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/MemberRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/MemberRepository.kt index fd0a0ef1..6b2213f7 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/MemberRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/MemberRepository.kt @@ -1,15 +1,8 @@ package kids.baba.mobile.domain.repository +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.MemberModel -import kids.baba.mobile.domain.model.Result -import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo -import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode -import kids.baba.mobile.domain.model.TokenResponse interface MemberRepository { - suspend fun getMe(accessToken: String): Result - - suspend fun signUpWithBabiesInfo(signToken: String, signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo): Result - - suspend fun signUpWithInviteCode(signToken: String, signUpRequestWithInviteCode: SignUpRequestWithInviteCode): Result + suspend fun getMe(): ApiResult } diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/MyPageRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/MyPageRepository.kt index c220d880..dc83b8e8 100644 --- a/app/src/main/java/kids/baba/mobile/domain/repository/MyPageRepository.kt +++ b/app/src/main/java/kids/baba/mobile/domain/repository/MyPageRepository.kt @@ -1,34 +1,33 @@ package kids.baba.mobile.domain.repository import kids.baba.mobile.domain.model.* -import kotlinx.coroutines.flow.Flow interface MyPageRepository { - suspend fun loadMyPageGroup(): Result + suspend fun loadMyPageGroup(): ApiResult - suspend fun loadBabyProfile(babyId: String): Result + suspend fun loadBabyProfile(babyId: String): ApiResult - suspend fun addGroup(myPageGroup: MyPageGroup): Result + suspend fun addGroup(myPageGroup: MyPageGroup): ApiResult - suspend fun editProfile(profile: Profile): Result + suspend fun editProfile(profile: Profile): ApiResult - suspend fun editBabyName(babyId: String, name: String): Result + suspend fun editBabyName(babyId: String, name: String): ApiResult - suspend fun addMyBaby(baby: MyBaby): Result + suspend fun addMyBaby(baby: MyBaby): ApiResult - suspend fun addBabyWithInviteCode(inviteCode: InviteCode): Result + suspend fun addBabyWithInviteCode(inviteCode: InviteCode): ApiResult - suspend fun deleteBaby(babyId: String): Result + suspend fun deleteBaby(babyId: String): ApiResult - suspend fun patchGroup(groupName: String, group: GroupInfo): Result + suspend fun patchGroup(groupName: String, group: GroupInfo): ApiResult - suspend fun deleteGroup(groupName: String): Result + suspend fun deleteGroup(groupName: String): ApiResult - suspend fun patchMember(memberId: String, relation: GroupMemberInfo): Result + suspend fun patchMember(memberId: String, relation: GroupMemberInfo): ApiResult - suspend fun deleteGroupMember(memberId: String): Result + suspend fun deleteGroupMember(memberId: String): ApiResult - suspend fun getInvitationInfo(inviteCode: String): Result + suspend fun getInvitationInfo(inviteCode: String): ApiResult - suspend fun makeInviteCode(relationInfo: RelationInfo): Result + suspend fun makeInviteCode(relationInfo: RelationInfo): ApiResult } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/repository/SignUpRepository.kt b/app/src/main/java/kids/baba/mobile/domain/repository/SignUpRepository.kt new file mode 100644 index 00000000..ba586e1c --- /dev/null +++ b/app/src/main/java/kids/baba/mobile/domain/repository/SignUpRepository.kt @@ -0,0 +1,16 @@ +package kids.baba.mobile.domain.repository + +import kids.baba.mobile.domain.model.ApiResult +import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo +import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode +import kids.baba.mobile.domain.model.TokenResponse + +interface SignUpRepository { + suspend fun signUpWithBabiesInfo( + signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ): ApiResult + + suspend fun signUpWithInviteCode( + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ): ApiResult +} \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/AddOneBabyWithInviteCodeUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/AddOneBabyWithInviteCodeUseCase.kt index 3dc56ae8..38a8ce98 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/AddOneBabyWithInviteCodeUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/AddOneBabyWithInviteCodeUseCase.kt @@ -1,7 +1,6 @@ package kids.baba.mobile.domain.usecase import kids.baba.mobile.domain.model.InviteCode -import kids.baba.mobile.domain.model.MyBaby import kids.baba.mobile.domain.repository.MyPageRepository import javax.inject.Inject diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/DeleteCommentUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/DeleteCommentUseCase.kt index 123f1e9a..e27579d0 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/DeleteCommentUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/DeleteCommentUseCase.kt @@ -5,6 +5,6 @@ import javax.inject.Inject class DeleteCommentUseCase @Inject constructor(private val repository: AlbumRepository) { - suspend operator fun invoke(id: String, contentId: Int, commentId: String,) = + suspend operator fun invoke(id: String, contentId: Int, commentId: String) = repository.deleteComment(id, contentId, commentId) } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/GetMemberUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/GetMemberUseCase.kt index cedbf03a..4e415769 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/GetMemberUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/GetMemberUseCase.kt @@ -1,40 +1,36 @@ package kids.baba.mobile.domain.usecase -import android.util.Log import kids.baba.mobile.core.constant.PrefsKey +import kids.baba.mobile.core.error.MemberNotFoundException import kids.baba.mobile.core.error.TokenEmptyException import kids.baba.mobile.core.utils.EncryptedPrefs +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.MemberModel -import kids.baba.mobile.domain.model.Result import kids.baba.mobile.domain.repository.MemberRepository import javax.inject.Inject class GetMemberUseCase @Inject constructor(private val memberRepository: MemberRepository) { private val tag = "GetMemberUseCase" - suspend fun getMe(): Result { + suspend fun getMe(callFromServer: Boolean = true): ApiResult { val member = runCatching { EncryptedPrefs.getMember(PrefsKey.MEMBER_KEY) }.getOrNull() return if (member == null) { - getMeNoPref() + if (callFromServer) { + getMeNoPref() + } + ApiResult.Unexpected(MemberNotFoundException()) } else { - Result.Success(member) + ApiResult.Success(member) } } - suspend fun getMeNoPref() : Result { - val accessToken = EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY) - - return if (accessToken.isEmpty()) { - val msg = "accessToken이 존재하지 않음." - Log.e(tag, msg) - Result.Unexpected(TokenEmptyException(msg)) - } else { - val result = memberRepository.getMe(accessToken) - if(result is Result.Success){ - EncryptedPrefs.putMember(PrefsKey.MEMBER_KEY, result.data) - } - result + suspend fun getMeNoPref(): ApiResult { + val result = memberRepository.getMe() + if (result is ApiResult.Success) { + EncryptedPrefs.putMember(PrefsKey.MEMBER_KEY, result.data) + return result } + return ApiResult.Unexpected(TokenEmptyException("accessToken이 존재하지 않음.")) } } diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/LoginUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/LoginUseCase.kt index ceed09e2..66905ad4 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/LoginUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/LoginUseCase.kt @@ -1,8 +1,9 @@ package kids.baba.mobile.domain.usecase +import android.util.Log import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.TokenResponse import kids.baba.mobile.domain.repository.AuthRepository import kids.baba.mobile.domain.repository.KakaoLogin @@ -13,9 +14,9 @@ class LoginUseCase @Inject constructor( private val kakaoLogin: KakaoLogin ) { - suspend fun babaLogin(socialToken: String): Result { + suspend fun babaLogin(socialToken: String): ApiResult { val result = authRepository.login(socialToken) - if (result is Result.Success) { + if (result is ApiResult.Success) { setJWTToken(result.data) } return result @@ -24,6 +25,7 @@ class LoginUseCase @Inject constructor( suspend fun kakaoLogin() = kakaoLogin.login() private fun setJWTToken(token: TokenResponse) { + Log.e("Login", "setJWTToken") EncryptedPrefs.putString(PrefsKey.ACCESS_TOKEN_KEY, token.accessToken) EncryptedPrefs.putString(PrefsKey.REFRESH_TOKEN_KEY, token.refreshToken) } diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/PostBabyAlbumUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/PostBabyAlbumUseCase.kt index 78321923..4b628f33 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/PostBabyAlbumUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/PostBabyAlbumUseCase.kt @@ -2,8 +2,8 @@ package kids.baba.mobile.domain.usecase import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.PostAlbumResponse -import kids.baba.mobile.domain.model.Result import kids.baba.mobile.domain.repository.AlbumRepository import okhttp3.MultipartBody import okhttp3.RequestBody @@ -14,12 +14,11 @@ class PostBabyAlbumUseCase @Inject constructor(private val albumRepository: Albu suspend fun postAlbum( photo: MultipartBody.Part, bodyDataHashMap: HashMap - ): Result { + ): ApiResult { val babyId = run { EncryptedPrefs.getBaby(PrefsKey.BABY_KEY).babyId } - val accessToken = run { EncryptedPrefs.getString(PrefsKey.ACCESS_TOKEN_KEY) } - return albumRepository.postAlbum(accessToken = accessToken, id = babyId, photo, bodyDataHashMap) + return albumRepository.postAlbum(id = babyId, photo, bodyDataHashMap) } } \ No newline at end of file diff --git a/app/src/main/java/kids/baba/mobile/domain/usecase/SignUpUseCase.kt b/app/src/main/java/kids/baba/mobile/domain/usecase/SignUpUseCase.kt index 296a5fed..62de60b2 100644 --- a/app/src/main/java/kids/baba/mobile/domain/usecase/SignUpUseCase.kt +++ b/app/src/main/java/kids/baba/mobile/domain/usecase/SignUpUseCase.kt @@ -2,27 +2,31 @@ package kids.baba.mobile.domain.usecase import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode import kids.baba.mobile.domain.model.TokenResponse -import kids.baba.mobile.domain.repository.MemberRepository +import kids.baba.mobile.domain.repository.SignUpRepository import javax.inject.Inject class SignUpUseCase @Inject constructor( - private val memberRepository: MemberRepository + private val signUpRepository: SignUpRepository ) { - suspend fun signUpWithBabiesInfo(signToken: String, signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo): Result{ - val result = memberRepository.signUpWithBabiesInfo(signToken, signUpRequestWithBabiesInfo) - if ( result is Result.Success){ + suspend fun signUpWithBabiesInfo( + signUpRequestWithBabiesInfo: SignUpRequestWithBabiesInfo + ): ApiResult { + val result = signUpRepository.signUpWithBabiesInfo(signUpRequestWithBabiesInfo) + if (result is ApiResult.Success) { setJWTToken(result.data) } return result } - suspend fun signUpWithInviteCode(signToken: String, signUpRequestWithInviteCode: SignUpRequestWithInviteCode): Result{ - val result = memberRepository.signUpWithInviteCode(signToken, signUpRequestWithInviteCode) - if ( result is Result.Success){ + suspend fun signUpWithInviteCode( + signUpRequestWithInviteCode: SignUpRequestWithInviteCode + ): ApiResult { + val result = signUpRepository.signUpWithInviteCode(signUpRequestWithInviteCode) + if (result is ApiResult.Success) { setJWTToken(result.data) } return result diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddBabyViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddBabyViewModel.kt index a0891fb2..33d362e4 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddBabyViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddBabyViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.MyBaby -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AddOneMyBabyUseCase import kids.baba.mobile.presentation.binding.ComposableInputViewData import kids.baba.mobile.presentation.binding.ComposableInputWithDescViewData @@ -86,8 +86,8 @@ class AddBabyViewModel @Inject constructor( birthday = birthDay.value ) )) { - is Result.Success -> _eventFlow.emit(AddBabyEvent.SuccessAddBaby) - is Result.NetworkError -> _eventFlow.emit(AddBabyEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _eventFlow.emit(AddBabyEvent.SuccessAddBaby) + is ApiResult.NetworkError -> _eventFlow.emit(AddBabyEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AddBabyEvent.ShowSnackBar(R.string.already_have_same_name_or_format_error)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddGroupViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddGroupViewModel.kt index ae562ab1..52453f43 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddGroupViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AddGroupViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.MyPageGroup -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AddOneGroupUseCase import kids.baba.mobile.presentation.binding.ComposableInputWithDescViewData import kids.baba.mobile.presentation.binding.ComposableTopViewData @@ -57,8 +57,8 @@ class AddGroupViewModel @Inject constructor( groupColor = color.value ) )) { - is Result.Success -> _eventFlow.emit(AddGroupEvent.SuccessAddGroup) - is Result.NetworkError -> _eventFlow.emit(AddGroupEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _eventFlow.emit(AddGroupEvent.SuccessAddGroup) + is ApiResult.NetworkError -> _eventFlow.emit(AddGroupEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AddGroupEvent.ShowSnackBar(R.string.already_have_same_group_or_format_error)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumConfigViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumConfigViewModel.kt index 945caf23..abbd55b9 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumConfigViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumConfigViewModel.kt @@ -8,7 +8,7 @@ import kids.baba.mobile.BuildConfig import kids.baba.mobile.R import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AlbumDeleteUseCase import kids.baba.mobile.domain.usecase.DownloadPhotoUseCase import kids.baba.mobile.presentation.event.AlbumConfigEvent @@ -41,8 +41,8 @@ class AlbumConfigViewModel @Inject constructor( val contentId = album.value.contentId if (contentId != null) { when (albumDeleteUseCase(baby.babyId, contentId)) { - is Result.Success -> _eventFlow.emit(AlbumConfigEvent.DeleteAlbum) - is Result.NetworkError -> _eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _eventFlow.emit(AlbumConfigEvent.DeleteAlbum) + is ApiResult.NetworkError -> _eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_album_delete_failed)) } } @@ -56,8 +56,8 @@ class AlbumConfigViewModel @Inject constructor( withContext(Dispatchers.IO){ val fileUrl = album.value.photo.substringAfter(BuildConfig.BASE_PHOTO_URL) when(val result = downloadPhotoUseCase(fileUrl, "${baby.name}_${album.value.date}")){ - is Result.Success -> _eventFlow.emit(AlbumConfigEvent.ShowDownSuccessNotification(result.data)) - is Result.NetworkError ->_eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _eventFlow.emit(AlbumConfigEvent.ShowDownSuccessNotification(result.data)) + is ApiResult.NetworkError ->_eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumConfigEvent.ShowSnackBar(R.string.baba_photo_download_failed)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumDetailViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumDetailViewModel.kt index 22b91535..505a5f16 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumDetailViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/AlbumDetailViewModel.kt @@ -8,7 +8,7 @@ import kids.baba.mobile.R import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs import kids.baba.mobile.domain.model.CommentInput -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AddCommentUseCase import kids.baba.mobile.domain.usecase.DeleteCommentUseCase import kids.baba.mobile.domain.usecase.GetCommentsUseCase @@ -77,8 +77,8 @@ class AlbumDetailViewModel @Inject constructor( private fun initModel() { viewModelScope.launch { when(val result = getMemberUseCase.getMe()){ - is Result.Success -> _member.value = result.data.toPresentation() - is Result.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _member.value = result.data.toPresentation() + is ApiResult.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_get_member_failed)) } } @@ -92,7 +92,7 @@ class AlbumDetailViewModel @Inject constructor( val likeDetailResult = getLikeDetailUseCase(baby.babyId, contentId) val commentsResult = getCommentsUseCase(baby.babyId, contentId) when { - likeDetailResult is Result.Success && commentsResult is Result.Success -> { + likeDetailResult is ApiResult.Success && commentsResult is ApiResult.Success -> { val likeDetail = likeDetailResult.data val comments = commentsResult.data _albumDetailUiState.update { uiState -> @@ -106,7 +106,7 @@ class AlbumDetailViewModel @Inject constructor( } } - likeDetailResult is Result.NetworkError || commentsResult is Result.NetworkError -> { + likeDetailResult is ApiResult.NetworkError || commentsResult is ApiResult.NetworkError -> { _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) } @@ -124,13 +124,13 @@ class AlbumDetailViewModel @Inject constructor( val commentInput = CommentInput(tag = commentTag.value?.memberId ?: "", comment = comment.value) when (addCommentUseCase(baby.babyId, contentId, commentInput)) { - is Result.Success -> { + is ApiResult.Success -> { getAlbumDetailData() comment.value = "" addSuccess() } - is Result.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_add_comment_failed)) } } @@ -151,8 +151,8 @@ class AlbumDetailViewModel @Inject constructor( val contentId = albumDetailUiState.value.albumDetail.album.contentId if (contentId != null) { when (deleteCommentUseCase(baby.babyId, contentId, commentId)) { - is Result.Success -> getAlbumDetailData() - is Result.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> getAlbumDetailData() + is ApiResult.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_delete_comment_failed)) } } @@ -162,7 +162,7 @@ class AlbumDetailViewModel @Inject constructor( val contentId = albumDetailUiState.value.albumDetail.album.contentId if (contentId != null) { when (val result = likeAlbumUseCase(baby.babyId, contentId)) { - is Result.Success -> { + is ApiResult.Success -> { getAlbumDetailData() _albumDetailUiState.update { uiState -> uiState.copy( @@ -173,7 +173,7 @@ class AlbumDetailViewModel @Inject constructor( } } - is Result.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(AlbumDetailEvent.ShowSnackBar(R.string.baba_like_album_failed)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyDetailViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyDetailViewModel.kt index b51e802a..7de89ccd 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyDetailViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyDetailViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.DeleteOneBabyUseCase import kids.baba.mobile.domain.usecase.GetBabyProfileUseCase import kids.baba.mobile.presentation.event.BabyDetailEvent @@ -48,7 +48,7 @@ class BabyDetailViewModel @Inject constructor( private fun load(babyId: String) = viewModelScope.launch { when (val result = getBabyProfileUseCase.get(babyId)) { - is Result.Success -> { + is ApiResult.Success -> { val familyGroup = result.data.familyGroup val myGroup = result.data.myGroup _isMyGroupEmpty.value = myGroup == null @@ -67,7 +67,7 @@ class BabyDetailViewModel @Inject constructor( } } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(BabyDetailEvent.ShowSnackBar(R.string.baba_network_failed)) } @@ -82,9 +82,9 @@ class BabyDetailViewModel @Inject constructor( fun delete() = viewModelScope.launch { when (deleteOneBabyUseCase(babyId = baby.value?.babyId ?: "")) { - is Result.Success -> _eventFlow.emit(BabyDetailEvent.SuccessDeleteBaby) + is ApiResult.Success -> _eventFlow.emit(BabyDetailEvent.SuccessDeleteBaby) - is Result.NetworkError -> _eventFlow.emit(BabyDetailEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(BabyDetailEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(BabyDetailEvent.ShowSnackBar(R.string.fail_delete_baby_errer)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyEditProfileBottomSheetViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyEditProfileBottomSheetViewModel.kt index ec62c240..8a986579 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyEditProfileBottomSheetViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyEditProfileBottomSheetViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.EditBabyNameUseCase import kids.baba.mobile.presentation.binding.ComposableNameViewData import kids.baba.mobile.presentation.event.BabyEditEvent @@ -46,9 +46,9 @@ class BabyEditProfileBottomSheetViewModel @Inject constructor( babyId = baby.value?.babyId ?: "", name = nameViewState.value )) { - is Result.Success -> _eventFlow.emit(BabyEditEvent.SuccessBabyEdit(babyName = nameViewState.value)) + is ApiResult.Success -> _eventFlow.emit(BabyEditEvent.SuccessBabyEdit(babyName = nameViewState.value)) - is Result.NetworkError -> _eventFlow.emit(BabyEditEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(BabyEditEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(BabyEditEvent.ShowSnackBar(R.string.already_have_same_name_or_format_error)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyListViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyListViewModel.kt index ec7c0e3d..c63837f9 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyListViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/BabyListViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetBabiesUseCase import kids.baba.mobile.presentation.event.BabyListEvent import kids.baba.mobile.presentation.mapper.toPresentation @@ -38,7 +38,7 @@ class BabyListViewModel @Inject constructor( val selectedBabyId: String? = savedStateHandle[SELECTED_BABY_ID_KEY] viewModelScope.launch { when (val result = getBabiesUseCase()) { - is Result.Success -> { + is ApiResult.Success -> { val babies = result.data.toPresentation() _babyList.value = babies.myBaby + babies.othersBaby @@ -61,7 +61,7 @@ class BabyListViewModel @Inject constructor( } } - is Result.NetworkError -> _eventFlow.emit(BabyListEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(BabyListEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(BabyListEvent.ShowSnackBar(R.string.baba_get_babies_failed)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditGroupBottomSheetViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditGroupBottomSheetViewModel.kt index 6c9e4c73..4bd537fe 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditGroupBottomSheetViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditGroupBottomSheetViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.GroupInfo -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.DeleteOneGroupUseCase import kids.baba.mobile.domain.usecase.PatchOneGroupUseCase import kids.baba.mobile.presentation.binding.ComposableAddButtonViewData @@ -81,9 +81,9 @@ class EditGroupBottomSheetViewModel @Inject constructor( when (deleteOneGroupUseCase.delete( groupName = groupName )) { - is Result.Success -> _eventFlow.emit(EditGroupSheetEvent.SuccessDeleteGroup) + is ApiResult.Success -> _eventFlow.emit(EditGroupSheetEvent.SuccessDeleteGroup) - is Result.NetworkError -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.invalid_delete_group_error)) } @@ -99,9 +99,9 @@ class EditGroupBottomSheetViewModel @Inject constructor( ), groupName = groupName )) { - is Result.Success -> _eventFlow.emit(EditGroupSheetEvent.SuccessPatchGroupRelation) + is ApiResult.Success -> _eventFlow.emit(EditGroupSheetEvent.SuccessPatchGroupRelation) - is Result.NetworkError -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(EditGroupSheetEvent.ShowSnackBar(R.string.already_have_same_group_or_format_error)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberProfileBottomSheetViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberProfileBottomSheetViewModel.kt index f6dfe1d1..53f80afa 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberProfileBottomSheetViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberProfileBottomSheetViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.Profile -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.EditProfileUseCase import kids.baba.mobile.presentation.binding.ComposableInputViewData import kids.baba.mobile.presentation.binding.ComposableNameViewData @@ -89,10 +89,10 @@ class EditMemberProfileBottomSheetViewModel @Inject constructor( iconColor = colorState.value ) )) { - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(EditMemberProfileEvent.SuccessEditMemberProfile) } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(EditMemberProfileEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberViewModel.kt index c58cfd0c..be5074c4 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/EditMemberViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.GroupMemberInfo -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.DeleteOneGroupMemberUseCase import kids.baba.mobile.domain.usecase.GetMemberUseCase import kids.baba.mobile.domain.usecase.PatchOneMemberRelationUseCase @@ -57,9 +57,9 @@ class EditMemberViewModel @Inject constructor( memberId = member?.memberId ?: "", relation = GroupMemberInfo(relationName = relationWithBaby.value) )) { - is Result.Success -> _eventFlow.emit(EditGroupMemberEvent.SuccessPatchMemberRelation) + is ApiResult.Success -> _eventFlow.emit(EditGroupMemberEvent.SuccessPatchMemberRelation) - is Result.NetworkError -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.invalid_format_error)) @@ -70,14 +70,14 @@ class EditMemberViewModel @Inject constructor( onDeleteButtonClickEventListener = { viewModelScope.launch { when (val myInfo = getMemberUseCase.getMe()) { - is Result.Success -> { + is ApiResult.Success -> { if (member?.memberId == myInfo.data.memberId) { _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.cannot_delete_myself)) return@launch } when (deleteOneGroupMemberUseCase.delete(memberId = member?.memberId ?: "")) { - is Result.Success -> _eventFlow.emit(EditGroupMemberEvent.SuccessDeleteMember) - is Result.NetworkError -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _eventFlow.emit(EditGroupMemberEvent.SuccessDeleteMember) + is ApiResult.NetworkError -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(EditGroupMemberEvent.ShowSnackBar(R.string.invalid_delete_member_error)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GatheringAlbumViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GatheringAlbumViewModel.kt index 1a8b4242..54b5843e 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GatheringAlbumViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GatheringAlbumViewModel.kt @@ -6,7 +6,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetAllAlbumsUseCase import kids.baba.mobile.presentation.event.GatheringAlbumEvent import kids.baba.mobile.presentation.mapper.toPresentation @@ -162,13 +162,13 @@ class GatheringAlbumViewModel @Inject constructor( val tempList: MutableList = mutableListOf() when (val result = getAllAlbumsUseCase(id = baby.babyId)) { - is Result.Success -> { + is ApiResult.Success -> { result.data.forEach { tempList.add(it.toPresentation(baby.isMyBaby)) // false is meaningless value } _allAlbumListState.value = tempList } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(GatheringAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GrowthAlbumViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GrowthAlbumViewModel.kt index 67c384e7..4f832bab 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GrowthAlbumViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/GrowthAlbumViewModel.kt @@ -6,7 +6,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.core.constant.PrefsKey import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetAlbumsFromBabyIdUseCase import kids.baba.mobile.domain.usecase.GetBabiesUseCase import kids.baba.mobile.domain.usecase.LikeAlbumUseCase @@ -52,7 +52,7 @@ class GrowthAlbumViewModel @Inject constructor( } when (val result = getAlbumsFromBabyIdUseCase.getMonthAlbum(selectedBaby.babyId, nowYear, nowMonth)) { - is Result.Success -> { + is ApiResult.Success -> { val albumList = result.data albumList.forEach { val day = it.date.dayOfMonth @@ -68,7 +68,7 @@ class GrowthAlbumViewModel @Inject constructor( } } - is Result.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_get_album_failed)) } } @@ -123,7 +123,7 @@ class GrowthAlbumViewModel @Inject constructor( fun initBabyAndAlbum(date: LocalDate) = viewModelScope.launch { val babyId = runCatching { EncryptedPrefs.getBaby(PrefsKey.BABY_KEY).babyId }.getOrNull() when (val result = getBabiesUseCase()) { - is Result.Success -> { + is ApiResult.Success -> { val myBaby = result.data.myBaby val others = result.data.others @@ -143,7 +143,7 @@ class GrowthAlbumViewModel @Inject constructor( } } - is Result.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_get_babies_failed)) } } @@ -154,7 +154,7 @@ class GrowthAlbumViewModel @Inject constructor( growthAlbumState.value.selectedBaby.babyId, album.contentId )) { - is Result.Success -> { + is ApiResult.Success -> { var selectedAlbum = growthAlbumState.value.selectedAlbum val growthAlbumList = growthAlbumState.value.growthAlbumList.map { if (it == album) { @@ -172,7 +172,7 @@ class GrowthAlbumViewModel @Inject constructor( } } - is Result.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(GrowthAlbumEvent.ShowSnackBar(R.string.baba_like_album_failed)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputBabiesInfoViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputBabiesInfoViewModel.kt index 3fc416ae..79baf754 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputBabiesInfoViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputBabiesInfoViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.SignUpRequestWithBabiesInfo import kids.baba.mobile.domain.model.SignUpRequestWithInviteCode import kids.baba.mobile.domain.model.getThrowableOrNull @@ -36,7 +36,6 @@ class InputBabiesInfoViewModel @Inject constructor( ) : ViewModel() { private val userProfile = savedStateHandle.get(KEY_USER_PROFILE) - private val signToken = savedStateHandle[KEY_SIGN_TOKEN] ?: "" private val _uiState: MutableStateFlow = MutableStateFlow(InputBabiesInfoUiState.Loading) @@ -309,8 +308,8 @@ class InputBabiesInfoViewModel @Inject constructor( ) ) viewModelScope.launch { - when(val result = getBabiesInfoByInviteCodeUseCase(inviteCode)){ - is Result.Success -> { + when (val result = getBabiesInfoByInviteCodeUseCase(inviteCode)) { + is ApiResult.Success -> { val sj = StringJoiner(", ") val babiesList = result.data.babies val relationName = result.data.relationName @@ -335,7 +334,7 @@ class InputBabiesInfoViewModel @Inject constructor( ) setUiState(InputBabiesInfoUiState.GetBabiesInfoByInviteCode) } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { addChat( ChatItem.BabaFirstChatItem( getStringResource(R.string.baba_network_failed) @@ -359,7 +358,6 @@ class InputBabiesInfoViewModel @Inject constructor( viewModelScope.launch { when ( val result = signUpUseCase.signUpWithBabiesInfo( - signToken, SignUpRequestWithBabiesInfo( userProfile.name, userProfile.iconName, @@ -367,12 +365,12 @@ class InputBabiesInfoViewModel @Inject constructor( babiesList.value ) )) { - is Result.Success -> { + is ApiResult.Success -> { setUiState(InputBabiesInfoUiState.SignUpSuccess(userProfile.name)) } else -> { val throwable = result.getThrowableOrNull() - if(throwable != null){ + if (throwable != null) { setUiState(InputBabiesInfoUiState.SignUpFailed(throwable)) } } @@ -386,18 +384,18 @@ class InputBabiesInfoViewModel @Inject constructor( viewModelScope.launch { when ( val result = signUpUseCase.signUpWithInviteCode( - signToken, SignUpRequestWithInviteCode( + SignUpRequestWithInviteCode( inviteCode, userProfile.name, userProfile.iconName ) )) { - is Result.Success -> { + is ApiResult.Success -> { setUiState(InputBabiesInfoUiState.SignUpSuccess(userProfile.name)) } else -> { val throwable = result.getThrowableOrNull() - if(throwable != null){ + if (throwable != null) { setUiState(InputBabiesInfoUiState.SignUpFailed(throwable)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputInviteCodeViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputInviteCodeViewModel.kt index 98dd5ad5..5c5a3922 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputInviteCodeViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InputInviteCodeViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.InviteCode -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AddOneBabyWithInviteCodeUseCase import kids.baba.mobile.presentation.binding.ComposableInputViewData import kids.baba.mobile.presentation.binding.ComposableTopViewData @@ -57,7 +57,7 @@ class InputInviteCodeViewModel @Inject constructor( when (addOneBabyWithInviteCodeUseCase.add( inviteCode = InviteCode(inviteCodeState.value) )) { - is Result.Success -> _eventFlow.emit( + is ApiResult.Success -> _eventFlow.emit( BabyInviteCodeEvent.SuccessAddBabyWithInviteCode( inviteCode = InviteCode( inviteCodeState.value @@ -65,7 +65,7 @@ class InputInviteCodeViewModel @Inject constructor( ) ) - is Result.NetworkError -> _eventFlow.emit(BabyInviteCodeEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(BabyInviteCodeEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(BabyInviteCodeEvent.ShowSnackBar(R.string.invalid_invite_code)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/IntroViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/IntroViewModel.kt index e7cf5415..afd477a0 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/IntroViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/IntroViewModel.kt @@ -3,7 +3,7 @@ package kids.baba.mobile.presentation.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetMemberUseCase import kids.baba.mobile.presentation.event.DeepLinkEvent import kids.baba.mobile.presentation.event.IntroEvent @@ -24,13 +24,13 @@ class IntroViewModel @Inject constructor( private val _deepLinkEvent = MutableEventFlow() val deepLinkEvent = _deepLinkEvent.asEventFlow() - suspend fun checkLogin() = getMemberUseCase.getMe() is Result.Success + suspend fun checkLogin() = getMemberUseCase.getMe(callFromServer = false) is ApiResult.Success fun handleDeeplink() = viewModelScope.launch { when (getMemberUseCase.getMe()) { - is Result.Success -> _deepLinkEvent.emit(DeepLinkEvent.GoToInviteResultPage) - is Result.Unexpected -> _deepLinkEvent.emit(DeepLinkEvent.RequestLogin) - is Result.Failure -> _deepLinkEvent.emit(DeepLinkEvent.Failure) - is Result.NetworkError -> _deepLinkEvent.emit(DeepLinkEvent.NetworkError) + is ApiResult.Success -> _deepLinkEvent.emit(DeepLinkEvent.GoToInviteResultPage) + is ApiResult.Unexpected -> _deepLinkEvent.emit(DeepLinkEvent.RequestLogin) + is ApiResult.Failure -> _deepLinkEvent.emit(DeepLinkEvent.Failure) + is ApiResult.NetworkError -> _deepLinkEvent.emit(DeepLinkEvent.NetworkError) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberResultViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberResultViewModel.kt index 3a5bbbf4..80ac4876 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberResultViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberResultViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.InviteCode -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.AddOneBabyWithInviteCodeUseCase import kids.baba.mobile.domain.usecase.GetBabiesInfoByInviteCodeUseCase import kids.baba.mobile.presentation.binding.ComposableTopViewData @@ -40,7 +40,7 @@ class InviteMemberResultViewModel @Inject constructor( private fun getInviteResult() = viewModelScope.launch { when (val babiesData = getBabiesInfoByInviteCodeUseCase(inviteCode.value)) { - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(InviteResultEvent.SuccessGetInvitationInfo(babiesData.data)) uiModel.update { it.copy( @@ -49,7 +49,7 @@ class InviteMemberResultViewModel @Inject constructor( ) } } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(InviteResultEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { @@ -62,10 +62,10 @@ class InviteMemberResultViewModel @Inject constructor( addOneBabyWithInviteCodeUseCase.add(InviteCode(inviteCode = inviteCode.value)) when (val result = addOneBabyWithInviteCodeUseCase.add(InviteCode(inviteCode = inviteCode.value))) { - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(InviteResultEvent.SuccessAddMember) } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(InviteResultEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberViewModel.kt index 01a839f2..a509f5dc 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteMemberViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.domain.model.RelationInfo -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.MakeInviteCodeUseCase import kids.baba.mobile.presentation.binding.ComposableDescView import kids.baba.mobile.presentation.binding.ComposableInputWithDescViewData @@ -67,9 +67,9 @@ class InviteMemberViewModel @Inject constructor( relationName = relationState.value ) )) { - is Result.Success -> _eventFlow.emit(InviteMemberEvent.CopyInviteCode(inviteCode.data)) + is ApiResult.Success -> _eventFlow.emit(InviteMemberEvent.CopyInviteCode(inviteCode.data)) - is Result.NetworkError -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.cannot_generate_invite_code)) } @@ -86,9 +86,9 @@ class InviteMemberViewModel @Inject constructor( relationName = relationState.value ) )) { - is Result.Success -> _eventFlow.emit(InviteMemberEvent.InviteWithKakao(inviteCode.data)) + is ApiResult.Success -> _eventFlow.emit(InviteMemberEvent.InviteWithKakao(inviteCode.data)) - is Result.NetworkError -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(InviteMemberEvent.ShowSnackBar(R.string.cannot_generate_invite_code)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteResultViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteResultViewModel.kt index fda59a75..17ef2939 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteResultViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/InviteResultViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetInvitationInfoUseCase import kids.baba.mobile.presentation.binding.ComposableTopViewData import kids.baba.mobile.presentation.event.InviteResultEvent @@ -32,7 +32,7 @@ class InviteResultViewModel @Inject constructor( init { viewModelScope.launch { when (val result = getInvitationInfoUseCase(inviteCode = inviteCodeStr)) { - is Result.Success -> { + is ApiResult.Success -> { uiModel.update { it.copy( addBabyNameDesc = result.data.babies[0].babyName, @@ -47,7 +47,7 @@ class InviteResultViewModel @Inject constructor( } _eventFlow.emit(InviteResultEvent.SuccessGetInvitation) } - is Result.NetworkError -> _eventFlow.emit(InviteResultEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(InviteResultEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(InviteResultEvent.ShowSnackBar(R.string.invalid_invite_code)) } } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/LoginViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/LoginViewModel.kt index 1326f4fb..9af49e63 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/LoginViewModel.kt @@ -6,7 +6,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.core.error.UserNotFoundException import kids.baba.mobile.core.error.kakao.KakaoLoginCanceledException -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetMemberUseCase import kids.baba.mobile.domain.usecase.LoginUseCase import kids.baba.mobile.presentation.event.LoginEvent @@ -41,17 +41,17 @@ class LoginViewModel @Inject constructor( private suspend fun loginToBaba(socialToken: String) { when (val result = loginUseCase.babaLogin(socialToken)) { - is Result.Success -> { + is ApiResult.Success -> { when(val memberResult = getMemberUseCase.getMe()){ - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(LoginEvent.MoveToWelcome(memberResult.data.name)) } - is Result.NetworkError -> _eventFlow.emit(LoginEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(LoginEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(LoginEvent.ShowSnackBar(R.string.baba_get_member_failed)) } } - is Result.Failure -> { + is ApiResult.Failure -> { if (result.throwable is UserNotFoundException) { _eventFlow.emit(LoginEvent.MoveToAgree(socialToken)) } else { @@ -59,7 +59,7 @@ class LoginViewModel @Inject constructor( } } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(LoginEvent.ShowSnackBar(R.string.baba_network_failed)) } diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/MyPageViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/MyPageViewModel.kt index 82071fe1..9c831d22 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/MyPageViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/MyPageViewModel.kt @@ -7,7 +7,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.core.constant.PrefsKey.BABY_GROUP_TITLE_KEY import kids.baba.mobile.core.utils.EncryptedPrefs -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.model.getThrowableOrNull import kids.baba.mobile.domain.usecase.GetBabiesUseCase import kids.baba.mobile.domain.usecase.GetMemberUseCase @@ -46,10 +46,10 @@ class MyPageViewModel @Inject constructor( fun loadGroups() = viewModelScope.launch { when (val result = getMyPageGroupUseCase.get()) { - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(MyPageEvent.LoadGroups(result.data.groups.toUiModel())) } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { @@ -60,11 +60,11 @@ class MyPageViewModel @Inject constructor( fun loadBabies() = viewModelScope.launch { when (val result = getBabiesUseCase()) { - is Result.Success -> { + is ApiResult.Success -> { val babies = result.data _eventFlow.emit(MyPageEvent.LoadBabies((babies.myBaby + babies.others).map { it.toPresentation() })) } - is Result.NetworkError -> _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.load_baby_error_message)) @@ -73,11 +73,11 @@ class MyPageViewModel @Inject constructor( fun getMyInfo() = viewModelScope.launch { when (val result = getMemberUseCase.getMeNoPref()) { - is Result.Success -> { + is ApiResult.Success -> { _myInfoState.value = result.data.toPresentation() _eventFlow.emit(MyPageEvent.LoadMyInfo(result.data.toPresentation())) } - is Result.NetworkError -> _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.NetworkError -> _eventFlow.emit(MyPageEvent.ShowSnackBar(R.string.baba_network_failed)) else -> { val throwable = result.getThrowableOrNull() diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/SelectCardViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/SelectCardViewModel.kt index fa885500..c8d6a8ba 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/SelectCardViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/SelectCardViewModel.kt @@ -8,7 +8,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R import kids.baba.mobile.core.error.EntityTooLargeException import kids.baba.mobile.domain.model.MediaData -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.PostBabyAlbumUseCase import kids.baba.mobile.presentation.event.PostAlbumEvent import kids.baba.mobile.presentation.extension.FileUtil @@ -81,17 +81,17 @@ class SelectCardViewModel @Inject constructor( requestHashMap["cardStyle"] = defaultCardUiModelArray[cardPosition.value].name.toPlainRequestBody() when (val result = postBabyAlbumUseCase.postAlbum(photoFile, requestHashMap)) { - is Result.Success -> { + is ApiResult.Success -> { _eventFlow.emit(PostAlbumEvent.MoveToMain) } - is Result.Failure -> { + is ApiResult.Failure -> { if (result.throwable is EntityTooLargeException) { _eventFlow.emit(PostAlbumEvent.ShowSnackBar(R.string.post_album_entity_too_large)) } else { _eventFlow.emit(PostAlbumEvent.ShowSnackBar(R.string.post_album_failed)) } } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(PostAlbumEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> { diff --git a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/TermsAgreeViewModel.kt b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/TermsAgreeViewModel.kt index 3066197d..1a49c0b8 100644 --- a/app/src/main/java/kids/baba/mobile/presentation/viewmodel/TermsAgreeViewModel.kt +++ b/app/src/main/java/kids/baba/mobile/presentation/viewmodel/TermsAgreeViewModel.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kids.baba.mobile.R -import kids.baba.mobile.domain.model.Result +import kids.baba.mobile.core.constant.PrefsKey.SIGN_TOKEN_KEY +import kids.baba.mobile.core.utils.EncryptedPrefs +import kids.baba.mobile.domain.model.ApiResult import kids.baba.mobile.domain.usecase.GetSignTokenUseCase import kids.baba.mobile.domain.usecase.GetTermsListUseCase import kids.baba.mobile.presentation.event.TermsAgreeEvent @@ -48,8 +50,8 @@ class TermsAgreeViewModel @Inject constructor( private fun getTerms() { viewModelScope.launch { when (val result = getTermsListUseCase(socialToken)) { - is Result.Success -> _termsList.value = result.data.map { it.toPresentation() } - is Result.NetworkError -> _eventFlow.emit(TermsAgreeEvent.ShowSnackBar(R.string.baba_network_failed)) + is ApiResult.Success -> _termsList.value = result.data.map { it.toPresentation() } + is ApiResult.NetworkError -> _eventFlow.emit(TermsAgreeEvent.ShowSnackBar(R.string.baba_network_failed)) else -> _eventFlow.emit(TermsAgreeEvent.ShowSnackBar(R.string.baba_terms_loading_failed)) } } @@ -87,10 +89,11 @@ class TermsAgreeViewModel @Inject constructor( } ) when (result) { - is Result.Success -> { + is ApiResult.Success -> { _signToken.value = result.data + EncryptedPrefs.putString(SIGN_TOKEN_KEY, result.data) } - is Result.NetworkError -> { + is ApiResult.NetworkError -> { _eventFlow.emit(TermsAgreeEvent.ShowSnackBar(R.string.baba_network_failed)) } else -> _eventFlow.emit(TermsAgreeEvent.ShowSnackBar(R.string.baba_terms_agree_failed))