Skip to content

Commit b0fbc05

Browse files
committed
[BOOK-216] feat: 회원 탈퇴 API 연동
약관 동의 상태 업데이트, 사용자 프로필 조회 API endpoint 변경 반영
1 parent b430c06 commit b0fbc05

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/AuthRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ interface AuthRepository {
88

99
suspend fun logout(): Result<Unit>
1010

11+
suspend fun withdraw(): Result<Unit>
12+
1113
suspend fun agreeTerms(termsAgreed: Boolean): Result<Unit>
1214

1315
val autoLoginState: Flow<AutoLoginState>

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ internal class DefaultAuthRepository @Inject constructor(
3131
clearTokens()
3232
}
3333

34+
override suspend fun withdraw() = runSuspendCatching {
35+
service.withdraw()
36+
clearTokens()
37+
}
38+
3439
override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching {
3540
service.agreeTerms(TermsAgreementRequest(termsAgreed))
3641
Unit

core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.ninecraft.booket.core.network.response.RefreshTokenResponse
1717
import com.ninecraft.booket.core.network.response.TermsAgreementResponse
1818
import com.ninecraft.booket.core.network.response.UserProfileResponse
1919
import retrofit2.http.Body
20+
import retrofit2.http.DELETE
2021
import retrofit2.http.GET
2122
import retrofit2.http.POST
2223
import retrofit2.http.PUT
@@ -35,10 +36,14 @@ interface ReedService {
3536
@POST("api/v1/auth/signout")
3637
suspend fun logout()
3738

38-
@PUT("api/v1/auth/terms-agreement")
39+
@DELETE("api/v1/auth/withdraw")
40+
suspend fun withdraw()
41+
42+
// User endpoints (auth required)
43+
@PUT("api/v1/users/me/terms-agreement")
3944
suspend fun agreeTerms(@Body termsAgreementRequest: TermsAgreementRequest): TermsAgreementResponse
4045

41-
@GET("api/v1/auth/me")
46+
@GET("api/v1/users/me")
4247
suspend fun getUserProfile(): UserProfileResponse
4348

4449
// Book endpoints (auth required)

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,32 @@ class SettingsPresenter @AssistedInject constructor(
105105
}
106106

107107
is SettingsUiEvent.Withdraw -> {
108-
// TODO: 회원탈퇴 처리 -> 성공 시 로그인 화면으로 이동
108+
scope.launch {
109+
try {
110+
isLoading = true
111+
authRepository.withdraw()
112+
.onSuccess {
113+
navigator.resetRoot(LoginScreen)
114+
}
115+
.onFailure { exception ->
116+
val handleErrorMessage = { message: String ->
117+
Logger.e(message)
118+
sideEffect = SettingsSideEffect.ShowToast(message)
119+
}
120+
121+
handleException(
122+
exception = exception,
123+
onError = handleErrorMessage,
124+
onLoginRequired = {
125+
navigator.resetRoot(LoginScreen)
126+
},
127+
)
128+
}
129+
} finally {
130+
isLoading = false
131+
}
132+
}
133+
isWithdrawBottomSheetVisible = false
109134
}
110135
}
111136
}

0 commit comments

Comments
 (0)