@@ -4,7 +4,6 @@ import android.util.Log
44import androidx.lifecycle.ViewModel
55import androidx.lifecycle.viewModelScope
66import com.kuit.ourmenu.data.model.auth.SignInType
7- import com.kuit.ourmenu.data.model.base.OurMenuApiFailureException
87import com.kuit.ourmenu.data.oauth.KakaoRepository
98import com.kuit.ourmenu.data.repository.AuthRepository
109import com.kuit.ourmenu.data.repository.UserRepository
@@ -15,12 +14,14 @@ import kotlinx.coroutines.flow.MutableStateFlow
1514import kotlinx.coroutines.flow.asStateFlow
1615import kotlinx.coroutines.flow.update
1716import kotlinx.coroutines.launch
17+ import kotlinx.coroutines.runBlocking
1818import javax.inject.Inject
1919
2020@HiltViewModel
2121class 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