Skip to content

Commit d58c543

Browse files
committed
Refactor: API 서비스 및 데이터 소스 레이어 내 BaseResponse 제거 및 Result 타입 적용
1 parent 487d9b0 commit d58c543

22 files changed

Lines changed: 92 additions & 167 deletions

File tree

core/network/src/main/java/com/threegap/bitnagil/network/auth/TokenAuthenticator.kt

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,10 @@ class TokenAuthenticator(
4343
return null
4444
}
4545

46-
return runCatching {
47-
reissueService.reissueToken(refreshToken)
48-
}.fold(
49-
onSuccess = { baseResponse ->
50-
if (baseResponse.data != null && baseResponse.code == SUCCESS_CODE) {
51-
tokenProvider.saveTokens(
52-
accessToken = baseResponse.data.accessToken,
53-
refreshToken = baseResponse.data.refreshToken,
54-
)
55-
buildRequestWithToken(response.request, baseResponse.data.accessToken)
56-
} else {
57-
handleTokenExpiration()
58-
null
59-
}
46+
return reissueService.reissueToken(refreshToken).fold(
47+
onSuccess = { authToken ->
48+
tokenProvider.saveTokens(accessToken = authToken.accessToken, refreshToken = authToken.refreshToken)
49+
buildRequestWithToken(response.request, authToken.accessToken)
6050
},
6151
onFailure = {
6252
handleTokenExpiration()
@@ -95,6 +85,5 @@ class TokenAuthenticator(
9585
private const val MAX_RETRY = 2
9686
private const val AUTHORIZATION = "Authorization"
9787
private const val TOKEN_PREFIX = "Bearer"
98-
private const val SUCCESS_CODE = "CO000"
9988
}
10089
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.threegap.bitnagil.network.token
22

33
import com.threegap.bitnagil.network.model.AuthToken
4-
import com.threegap.bitnagil.network.model.BaseResponse
54
import retrofit2.http.Header
65
import retrofit2.http.POST
76

87
interface ReissueService {
98
@POST("/api/v1/auth/token/reissue")
109
suspend fun reissueToken(
1110
@Header("Refresh-Token") refreshToken: String,
12-
): BaseResponse<AuthToken>
11+
): Result<AuthToken>
1312
}

data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,25 @@ import com.threegap.bitnagil.data.auth.model.request.WithdrawalReasonRequest
77
import com.threegap.bitnagil.data.auth.model.response.LoginResponse
88
import com.threegap.bitnagil.data.auth.service.AuthService
99
import com.threegap.bitnagil.data.auth.service.LoginService
10-
import com.threegap.bitnagil.data.common.safeApiCall
11-
import com.threegap.bitnagil.data.common.safeUnitApiCall
1210
import javax.inject.Inject
1311

1412
class AuthRemoteDataSourceImpl @Inject constructor(
1513
private val authService: AuthService,
1614
private val loginService: LoginService,
1715
) : AuthRemoteDataSource {
16+
1817
override suspend fun login(socialAccessToken: String, loginRequest: LoginRequest): Result<LoginResponse> =
19-
safeApiCall {
20-
loginService.postLogin(socialAccessToken, loginRequest)
21-
}
18+
loginService.postLogin(socialAccessToken, loginRequest)
2219

2320
override suspend fun submitAgreement(termsAgreementRequest: TermsAgreementRequest): Result<Unit> =
24-
safeUnitApiCall {
25-
authService.submitAgreement(termsAgreementRequest)
26-
}
21+
authService.submitAgreement(termsAgreementRequest)
2722

2823
override suspend fun logout(): Result<Unit> =
29-
safeUnitApiCall {
30-
authService.postLogout()
31-
}
24+
authService.postLogout()
3225

3326
override suspend fun withdrawal(reason: String): Result<Unit> =
34-
safeUnitApiCall {
35-
authService.postWithdrawal(WithdrawalReasonRequest(reason))
36-
}
27+
authService.postWithdrawal(WithdrawalReasonRequest(reason))
3728

3829
override suspend fun reissueToken(refreshToken: String): Result<LoginResponse> =
39-
safeApiCall {
40-
loginService.postReissueToken(refreshToken)
41-
}
30+
loginService.postReissueToken(refreshToken)
4231
}

data/src/main/java/com/threegap/bitnagil/data/auth/repositoryimpl/AuthRepositoryImpl.kt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,25 @@ class AuthRepositoryImpl @Inject constructor(
1414
private val authRemoteDataSource: AuthRemoteDataSource,
1515
private val authLocalDataSource: AuthLocalDataSource,
1616
) : AuthRepository {
17+
1718
override suspend fun login(socialAccessToken: String, socialType: String): Result<AuthSession> =
1819
authRemoteDataSource.login(socialAccessToken, LoginRequest(socialType))
1920
.map { it.toDomain() }
2021

2122
override suspend fun submitAgreement(termsAgreement: TermsAgreement): Result<Unit> =
22-
authRemoteDataSource.submitAgreement(
23-
termsAgreement.toDto(),
24-
)
25-
26-
override suspend fun logout(): Result<Unit> {
27-
return authRemoteDataSource.logout().also {
28-
if (it.isSuccess) authLocalDataSource.clearAuthToken()
29-
}
30-
}
31-
32-
override suspend fun withdrawal(reason: String): Result<Unit> {
33-
return authRemoteDataSource.withdrawal(reason).also {
34-
if (it.isSuccess) authLocalDataSource.clearAuthToken()
35-
}
36-
}
23+
authRemoteDataSource.submitAgreement(termsAgreement.toDto())
24+
25+
override suspend fun logout(): Result<Unit> =
26+
authRemoteDataSource.logout()
27+
.onSuccess { authLocalDataSource.clearAuthToken() }
28+
29+
override suspend fun withdrawal(reason: String): Result<Unit> =
30+
authRemoteDataSource.withdrawal(reason)
31+
.onSuccess { authLocalDataSource.clearAuthToken() }
3732

3833
override suspend fun reissueToken(refreshToken: String): Result<AuthSession> =
39-
authRemoteDataSource.reissueToken(refreshToken).map { it.toDomain() }
34+
authRemoteDataSource.reissueToken(refreshToken)
35+
.map { it.toDomain() }
4036

4137
override suspend fun getRefreshToken(): String? =
4238
authLocalDataSource.getRefreshToken()

data/src/main/java/com/threegap/bitnagil/data/auth/service/AuthService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@ package com.threegap.bitnagil.data.auth.service
22

33
import com.threegap.bitnagil.data.auth.model.request.TermsAgreementRequest
44
import com.threegap.bitnagil.data.auth.model.request.WithdrawalReasonRequest
5-
import com.threegap.bitnagil.network.model.BaseResponse
65
import retrofit2.http.Body
76
import retrofit2.http.POST
87

98
interface AuthService {
109
@POST("/api/v1/auth/agreements")
1110
suspend fun submitAgreement(
1211
@Body termsAgreementRequest: TermsAgreementRequest,
13-
): BaseResponse<Unit>
12+
): Result<Unit>
1413

1514
@POST("/api/v1/auth/withdrawal")
16-
suspend fun postWithdrawal(@Body request: WithdrawalReasonRequest): BaseResponse<Unit>
15+
suspend fun postWithdrawal(@Body request: WithdrawalReasonRequest): Result<Unit>
1716

1817
@POST("/api/v1/auth/logout")
19-
suspend fun postLogout(): BaseResponse<Unit>
18+
suspend fun postLogout(): Result<Unit>
2019
}

data/src/main/java/com/threegap/bitnagil/data/auth/service/LoginService.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.threegap.bitnagil.data.auth.service
22

33
import com.threegap.bitnagil.data.auth.model.request.LoginRequest
44
import com.threegap.bitnagil.data.auth.model.response.LoginResponse
5-
import com.threegap.bitnagil.network.model.BaseResponse
65
import retrofit2.http.Body
76
import retrofit2.http.Header
87
import retrofit2.http.POST
@@ -12,10 +11,10 @@ interface LoginService {
1211
suspend fun postLogin(
1312
@Header("SocialAccessToken") socialAccessToken: String,
1413
@Body loginRequest: LoginRequest,
15-
): BaseResponse<LoginResponse>
14+
): Result<LoginResponse>
1615

1716
@POST("/api/v1/auth/token/reissue")
1817
suspend fun postReissueToken(
1918
@Header("Refresh-Token") refreshToken: String,
20-
): BaseResponse<LoginResponse>
19+
): Result<LoginResponse>
2120
}
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.threegap.bitnagil.data.emotion.datasourceImpl
22

3-
import com.threegap.bitnagil.data.common.safeApiCall
43
import com.threegap.bitnagil.data.emotion.datasource.EmotionRemoteDataSource
54
import com.threegap.bitnagil.data.emotion.model.dto.EmotionDto
65
import com.threegap.bitnagil.data.emotion.model.request.RegisterEmotionRequest
@@ -12,21 +11,13 @@ import javax.inject.Inject
1211
class EmotionRemoteDataSourceImpl @Inject constructor(
1312
private val emotionService: EmotionService,
1413
) : EmotionRemoteDataSource {
15-
override suspend fun getEmotions(): Result<List<EmotionDto>> {
16-
return safeApiCall {
17-
emotionService.getEmotions()
18-
}
19-
}
14+
override suspend fun getEmotions(): Result<List<EmotionDto>> = emotionService.getEmotions()
2015

2116
override suspend fun registerEmotion(emotion: String): Result<RegisterEmotionResponse> {
2217
val registerEmotionRequest = RegisterEmotionRequest(emotionMarbleType = emotion)
23-
return safeApiCall {
24-
emotionService.postEmotions(registerEmotionRequest)
25-
}
18+
return emotionService.postEmotions(registerEmotionRequest)
2619
}
2720

2821
override suspend fun fetchDailyEmotion(currentDate: String): Result<DailyEmotionResponse> =
29-
safeApiCall {
30-
emotionService.fetchDailyEmotion(currentDate)
31-
}
22+
emotionService.fetchDailyEmotion(currentDate)
3223
}

data/src/main/java/com/threegap/bitnagil/data/emotion/service/EmotionService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@ import com.threegap.bitnagil.data.emotion.model.dto.EmotionDto
44
import com.threegap.bitnagil.data.emotion.model.request.RegisterEmotionRequest
55
import com.threegap.bitnagil.data.emotion.model.response.DailyEmotionResponse
66
import com.threegap.bitnagil.data.emotion.model.response.RegisterEmotionResponse
7-
import com.threegap.bitnagil.network.model.BaseResponse
87
import retrofit2.http.Body
98
import retrofit2.http.GET
109
import retrofit2.http.POST
1110
import retrofit2.http.Path
1211

1312
interface EmotionService {
1413
@GET("/api/v1/emotion-marbles")
15-
suspend fun getEmotions(): BaseResponse<List<EmotionDto>>
14+
suspend fun getEmotions(): Result<List<EmotionDto>>
1615

1716
@POST("/api/v1/emotion-marbles")
1817
suspend fun postEmotions(
1918
@Body request: RegisterEmotionRequest,
20-
): BaseResponse<RegisterEmotionResponse>
19+
): Result<RegisterEmotionResponse>
2120

2221
@GET("/api/v2/emotion-marbles/{searchDate}")
2322
suspend fun fetchDailyEmotion(
2423
@Path("searchDate") date: String,
25-
): BaseResponse<DailyEmotionResponse>
24+
): Result<DailyEmotionResponse>
2625
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.threegap.bitnagil.data.file.datasourceImpl
22

3-
import com.threegap.bitnagil.data.common.safeApiCall
43
import com.threegap.bitnagil.data.file.datasource.FileDataSource
54
import com.threegap.bitnagil.data.file.model.request.FileInfoRequest
65
import com.threegap.bitnagil.data.file.service.FileService
@@ -9,7 +8,6 @@ import javax.inject.Inject
98
class FileDataSourceImpl @Inject constructor(
109
private val fileService: FileService,
1110
) : FileDataSource {
12-
override suspend fun fetchPresignedUrls(fileInfos: List<FileInfoRequest>): Result<Map<String, String>> {
13-
return safeApiCall { fileService.fetchPresignedUrls(fileInfos) }
14-
}
11+
override suspend fun fetchPresignedUrls(fileInfos: List<FileInfoRequest>): Result<Map<String, String>> =
12+
fileService.fetchPresignedUrls(fileInfos)
1513
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.threegap.bitnagil.data.file.service
22

33
import com.threegap.bitnagil.data.file.model.request.FileInfoRequest
4-
import com.threegap.bitnagil.network.model.BaseResponse
54
import retrofit2.http.Body
65
import retrofit2.http.POST
76

87
interface FileService {
98
@POST("/api/v2/files/presigned-urls")
109
suspend fun fetchPresignedUrls(
1110
@Body fileInfos: List<FileInfoRequest>,
12-
): BaseResponse<Map<String, String>>
11+
): Result<Map<String, String>>
1312
}

0 commit comments

Comments
 (0)