Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ interface AuthRepository {

suspend fun logout(): Result<Unit>

suspend fun withdraw(): Result<Unit>

suspend fun agreeTerms(termsAgreed: Boolean): Result<Unit>

val autoLoginState: Flow<AutoLoginState>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ internal class DefaultAuthRepository @Inject constructor(
clearTokens()
}

override suspend fun withdraw() = runSuspendCatching {
service.withdraw()
clearTokens()
}

override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching {
service.agreeTerms(TermsAgreementRequest(termsAgreed))
Unit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.ninecraft.booket.core.network.response.RefreshTokenResponse
import com.ninecraft.booket.core.network.response.TermsAgreementResponse
import com.ninecraft.booket.core.network.response.UserProfileResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
Expand All @@ -35,10 +36,14 @@ interface ReedService {
@POST("api/v1/auth/signout")
suspend fun logout()

@PUT("api/v1/auth/terms-agreement")
@DELETE("api/v1/auth/withdraw")
suspend fun withdraw()

// User endpoints (auth required)
@PUT("api/v1/users/me/terms-agreement")
suspend fun agreeTerms(@Body termsAgreementRequest: TermsAgreementRequest): TermsAgreementResponse

@GET("api/v1/auth/me")
@GET("api/v1/users/me")
suspend fun getUserProfile(): UserProfileResponse

// Book endpoints (auth required)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,32 @@ class SettingsPresenter @AssistedInject constructor(
}

is SettingsUiEvent.Withdraw -> {
// TODO: 회원탈퇴 처리 -> 성공 시 로그인 화면으로 이동
scope.launch {
try {
isLoading = true
authRepository.withdraw()
.onSuccess {
navigator.resetRoot(LoginScreen)
}
.onFailure { exception ->
val handleErrorMessage = { message: String ->
Logger.e(message)
sideEffect = SettingsSideEffect.ShowToast(message)
}

handleException(
exception = exception,
onError = handleErrorMessage,
onLoginRequired = {
navigator.resetRoot(LoginScreen)
},
)
}
} finally {
isLoading = false
}
}
isWithdrawBottomSheetVisible = false
}
}
}
Expand Down
Loading