Skip to content

Commit 30d15e8

Browse files
committed
feat: 로그아웃/회원 탈퇴 구현 완료 #68
1 parent 692d99e commit 30d15e8

5 files changed

Lines changed: 79 additions & 30 deletions

File tree

app/src/main/java/com/kuit/ourmenu/OurMenuApp.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.kuit.ourmenu
22

33
import android.app.Application
4+
import android.util.Log
45
import coil3.ImageLoader
56
import coil3.PlatformContext
67
import coil3.SingletonImageLoader
78
import coil3.memory.MemoryCache
89
import coil3.util.DebugLogger
910
import com.kakao.sdk.common.KakaoSdk
11+
import com.kakao.sdk.common.util.Utility
1012
import com.kakao.vectormap.KakaoMapSdk
1113
import dagger.hilt.android.HiltAndroidApp
1214

@@ -16,11 +18,10 @@ class OurMenuApp : Application(), SingletonImageLoader.Factory {
1618
super.onCreate()
1719
KakaoSdk.init(this, BuildConfig.KAKAO_APP_KEY)
1820
KakaoMapSdk.init(this, BuildConfig.KAKAO_APP_KEY)
19-
/*
20-
* 이 부분을 주석 해제해서 keyHash 값 읽으시면 됩니다.
21-
* val keyHash = Utility.getKeyHash(this)
22-
* Log.d("KeyHash", keyHash)
23-
* */
21+
// 이 부분을 주석 해제해서 keyHash 값 읽으시면 됩니다
22+
val keyHash = Utility.getKeyHash(this)
23+
Log.d("KeyHash", keyHash)
24+
2425

2526
}
2627

app/src/main/java/com/kuit/ourmenu/data/oauth/KakaoModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class KakaoRepository @Inject constructor(
7171
}
7272

7373
fun logout(
74+
successLogout: () -> Unit,
7475
errorLogout: (Throwable) -> Unit,
7576
) {
7677
if (AuthApiClient.instance.hasToken()) {
@@ -80,12 +81,14 @@ class KakaoRepository @Inject constructor(
8081
errorLogout(error)
8182
} else {
8283
Log.i("KakaoTag", "로그아웃 성공. SDK에서 토큰 삭제됨")
84+
successLogout()
8385
}
8486
}
8587
}
8688
}
8789

8890
fun unlink(
91+
successUnlink: () -> Unit,
8992
errorUnlink: (Throwable) -> Unit,
9093
) {
9194
if (AuthApiClient.instance.hasToken()) {
@@ -95,6 +98,7 @@ class KakaoRepository @Inject constructor(
9598
errorUnlink(error)
9699
} else {
97100
Log.i("KakaoTag", "회원 탈퇴 성공. SDK에서 토큰 삭제됨")
101+
successUnlink()
98102
}
99103
}
100104
}

app/src/main/java/com/kuit/ourmenu/data/repository/AuthRepository.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ class AuthRepository @Inject constructor(
4141
}
4242

4343
suspend fun logout() = runCatching {
44-
kakaoRepository.logout { error ->
45-
throw error
46-
}
4744
authService.logout().handleBaseResponse().getOrThrow()
4845
}
4946

app/src/main/java/com/kuit/ourmenu/data/repository/UserRepository.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ class UserRepository @Inject constructor(
4242
}
4343

4444
suspend fun deleteUser() = runCatching {
45-
kakaoRepository.unlink { error ->
46-
throw error
47-
}
4845
userService.deleteUser().handleBaseResponse().getOrThrow()
4946
}
5047
}

app/src/main/java/com/kuit/ourmenu/ui/my/viewmodel/MyPageViewModel.kt

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.util.Log
44
import androidx.lifecycle.ViewModel
55
import androidx.lifecycle.viewModelScope
66
import com.kuit.ourmenu.data.model.auth.SignInType
7-
import com.kuit.ourmenu.data.model.base.OurMenuApiFailureException
87
import com.kuit.ourmenu.data.oauth.KakaoRepository
98
import com.kuit.ourmenu.data.repository.AuthRepository
109
import com.kuit.ourmenu.data.repository.UserRepository
@@ -15,12 +14,14 @@ import kotlinx.coroutines.flow.MutableStateFlow
1514
import kotlinx.coroutines.flow.asStateFlow
1615
import kotlinx.coroutines.flow.update
1716
import kotlinx.coroutines.launch
17+
import kotlinx.coroutines.runBlocking
1818
import javax.inject.Inject
1919

2020
@HiltViewModel
2121
class MyPageViewModel @Inject constructor(
2222
private val userRepository: UserRepository,
2323
private val authRepository: AuthRepository,
24+
private val kakaoRepository: KakaoRepository,
2425
) : ViewModel() {
2526

2627
private val _uiState = MutableStateFlow(MyPageUiState())
@@ -101,29 +102,64 @@ class MyPageViewModel @Inject constructor(
101102

102103
fun logout() {
103104
viewModelScope.launch {
104-
authRepository.logout().fold(
105-
onSuccess = {
106-
updateLogoutModalVisible(false)
107-
Log.d("MyPageViewModel", "logout: $it")
108-
},
109-
onFailure = {
110-
Log.d("MyPageViewModel", "logout: $it")
111-
}
112-
)
105+
var kakaoResult = true
106+
107+
runBlocking {
108+
kakaoRepository.logout(
109+
errorLogout = {
110+
Log.d("MyPageViewModel", "Kakao logout failed: $it")
111+
kakaoResult = false
112+
},
113+
successLogout = {
114+
Log.d("MyPageViewModel", "Kakao logout success")
115+
kakaoResult = true
116+
}
117+
)
118+
}
119+
120+
if (kakaoResult) {
121+
authRepository.logout().fold(
122+
onSuccess = {
123+
Log.d("MyPageViewModel", "logout Success: $it")
124+
setLogoutSuccess()
125+
},
126+
onFailure = {
127+
Log.d("MyPageViewModel", "logout Failure: $it")
128+
kakaoRepository.getKakaoLogin { }
129+
}
130+
)
131+
}
113132
}
114133
}
115134

116135
fun deleteAccount() {
117136
viewModelScope.launch {
118-
userRepository.deleteUser().fold(
119-
onSuccess = {
120-
updateDeleteAccountModalVisible(false)
121-
Log.d("MyPageViewModel", "deleteAccount: $it")
122-
},
123-
onFailure = {
124-
Log.d("MyPageViewModel", "deleteAccount: $it")
125-
}
126-
)
137+
var kakaoResult = true
138+
139+
runBlocking {
140+
kakaoRepository.unlink(
141+
errorUnlink = {
142+
Log.d("MyPageViewModel", "Kakao unlink failed: $it")
143+
kakaoResult = false
144+
},
145+
successUnlink = {
146+
Log.d("MyPageViewModel", "Kakao unlink success")
147+
kakaoResult = true
148+
}
149+
)
150+
}
151+
if (kakaoResult) {
152+
userRepository.deleteUser().fold(
153+
onSuccess = {
154+
Log.d("MyPageViewModel", "deleteAccount: $it")
155+
setDeleteAccountSuccess()
156+
},
157+
onFailure = {
158+
Log.d("MyPageViewModel", "deleteAccount: $it")
159+
kakaoRepository.getKakaoLogin { }
160+
}
161+
)
162+
}
127163
}
128164
}
129165

@@ -172,6 +208,20 @@ class MyPageViewModel @Inject constructor(
172208
}
173209
}
174210

211+
fun setLogoutSuccess() {
212+
updateLogoutModalVisible(false)
213+
_uiState.update {
214+
it.copy(isLogoutSuccess = true)
215+
}
216+
}
217+
218+
fun setDeleteAccountSuccess() {
219+
updateDeleteAccountModalVisible(false)
220+
_uiState.update {
221+
it.copy(isDeleteAccountSuccess = true)
222+
}
223+
}
224+
175225
fun updateLogoutModalVisible(visible: Boolean) {
176226
_uiState.update {
177227
it.copy(showLogoutModal = visible)

0 commit comments

Comments
 (0)