@@ -7,8 +7,11 @@ import kotlinx.coroutines.flow.StateFlow
77import kotlinx.coroutines.flow.asStateFlow
88import kotlinx.coroutines.flow.update
99import kotlinx.coroutines.launch
10+ import org.whosin.client.core.auth.TokenExpiredManager
11+ import org.whosin.client.core.datastore.TokenManager
1012import org.whosin.client.core.network.ApiResult
1113import org.whosin.client.data.dto.response.ClubData
14+ import org.whosin.client.data.repository.AuthRepository
1215import org.whosin.client.data.repository.MemberRepository
1316
1417data class MyPageUiState (
@@ -20,7 +23,9 @@ data class MyPageUiState(
2023)
2124
2225class MyPageViewModel (
23- private val repository : MemberRepository
26+ private val memberRepository : MemberRepository ,
27+ private val authRepository : AuthRepository ,
28+ private val tokenManager : TokenManager
2429): ViewModel() {
2530 private val _uiState = MutableStateFlow (MyPageUiState ())
2631 val uiState: StateFlow <MyPageUiState > = _uiState .asStateFlow()
@@ -43,7 +48,7 @@ class MyPageViewModel(
4348 fun getMyInfo () {
4449 viewModelScope.launch {
4550 _uiState .update{ it.copy(isLoading = true ) }
46- when (val result = repository .getMyInfo()) {
51+ when (val result = memberRepository .getMyInfo()) {
4752 is ApiResult .Success -> {
4853 val response = result.data.data
4954 _uiState .update { it ->
@@ -79,7 +84,7 @@ class MyPageViewModel(
7984 val newClubs = clubList?.map {
8085 it.clubId
8186 }
82- when (val result = repository .updateMyInfo(newNickName = newNickName, clubList = newClubs)) {
87+ when (val result = memberRepository .updateMyInfo(newNickName = newNickName, clubList = newClubs)) {
8388 is ApiResult .Success -> {
8489 _uiState .update {
8590 it.copy(isEditable = false )
@@ -108,4 +113,33 @@ class MyPageViewModel(
108113 println (" MyPageViewModel: 클럽 삭제 - clubId: $clubId " )
109114 }
110115
116+ // 로그아웃
117+ fun logout (){
118+ viewModelScope.launch {
119+ val refreshToken = tokenManager.getRefreshToken()
120+ if (refreshToken.isNullOrEmpty()) {
121+ // 리프레시 토큰이 없으면 바로 토큰 삭제 및 로그인 화면으로 이동
122+ tokenManager.clearToken()
123+ TokenExpiredManager .setTokenExpired()
124+ return @launch
125+ }
126+
127+ when (val result = authRepository.logout(refreshToken)) {
128+ is ApiResult .Success -> {
129+ println (" MyPageViewModel: 로그아웃 성공" )
130+ // 토큰 삭제 및 로그인 화면으로 이동
131+ tokenManager.clearToken()
132+ TokenExpiredManager .setTokenExpired()
133+ }
134+ is ApiResult .Error -> {
135+ _uiState .value = _uiState .value.copy(
136+ errorMessage = result.message ? : " 로그아웃에 실패했습니다."
137+ )
138+ println (" MyPageViewModel: 로그아웃 실패 - ${result.message} " )
139+ }
140+ }
141+ }
142+ }
143+
144+ // TODO: 회원 탈퇴
111145}
0 commit comments