Skip to content

Commit a275ff8

Browse files
committed
[FEAT]: 로그아웃 로직 구현, viewmodel 의존성 추가
1 parent dfe59f8 commit a275ff8

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/MyPageScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ fun MyPageScreen(
148148
modifier = Modifier.weight(1f),
149149
shape = RoundedCornerShape(10.dp),
150150
onClick = {
151-
// TODO: 로그아웃 로직 연결
151+
viewModel.logout()
152152
},
153153
colors = ButtonDefaults.buttonColors(
154154
containerColor = Color(0xFFF5F5F5),

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/MyPageViewModel.kt

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ import kotlinx.coroutines.flow.StateFlow
77
import kotlinx.coroutines.flow.asStateFlow
88
import kotlinx.coroutines.flow.update
99
import kotlinx.coroutines.launch
10+
import org.whosin.client.core.auth.TokenExpiredManager
11+
import org.whosin.client.core.datastore.TokenManager
1012
import org.whosin.client.core.network.ApiResult
1113
import org.whosin.client.data.dto.response.ClubData
14+
import org.whosin.client.data.repository.AuthRepository
1215
import org.whosin.client.data.repository.MemberRepository
1316

1417
data class MyPageUiState(
@@ -20,7 +23,9 @@ data class MyPageUiState(
2023
)
2124

2225
class 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

Comments
 (0)