File tree Expand file tree Collapse file tree 4 files changed +40
-3
lines changed
api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository
impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository
network/src/main/kotlin/com/ninecraft/booket/core/network/service
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings Expand file tree Collapse file tree 4 files changed +40
-3
lines changed Original file line number Diff line number Diff 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 >
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ import com.ninecraft.booket.core.network.response.RefreshTokenResponse
1717import com.ninecraft.booket.core.network.response.TermsAgreementResponse
1818import com.ninecraft.booket.core.network.response.UserProfileResponse
1919import retrofit2.http.Body
20+ import retrofit2.http.DELETE
2021import retrofit2.http.GET
2122import retrofit2.http.POST
2223import 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)
Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments