Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
@@ -0,0 +1,9 @@
package com.konkuk.medicarecall.data.api.member

import de.jensklingenberg.ktorfit.Response
import de.jensklingenberg.ktorfit.http.DELETE

interface MemberDeleteService {
@DELETE("member")
suspend fun deleteMember(): Response<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ import com.konkuk.medicarecall.data.api.fcm.FcmUpdateService
import com.konkuk.medicarecall.data.api.fcm.FcmValidationService
import com.konkuk.medicarecall.data.api.fcm.createFcmUpdateService
import com.konkuk.medicarecall.data.api.fcm.createFcmValidationService
import com.konkuk.medicarecall.data.api.member.MemberDeleteService
import com.konkuk.medicarecall.data.api.member.MemberRegisterService
import com.konkuk.medicarecall.data.api.member.SettingService
import com.konkuk.medicarecall.data.api.member.createMemberDeleteService
import com.konkuk.medicarecall.data.api.member.createMemberRegisterService
import com.konkuk.medicarecall.data.api.member.createSettingService
import com.konkuk.medicarecall.data.api.notice.NoticeService
Expand Down Expand Up @@ -120,4 +122,8 @@ class ApiModule {
@Single
fun provideFcmUpdateService(ktorfit: Ktorfit): FcmUpdateService =
ktorfit.createFcmUpdateService()

@Single
fun provideMemberDeleteService(ktorfit: Ktorfit): MemberDeleteService =
ktorfit.createMemberDeleteService()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.konkuk.medicarecall.data.repository

interface MemberDeleteRepository {
suspend fun deleteMember(): Result<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.konkuk.medicarecall.data.repositoryimpl

import com.konkuk.medicarecall.data.api.member.MemberDeleteService
import com.konkuk.medicarecall.data.repository.MemberDeleteRepository
import org.koin.core.annotation.Single

@Single
class MemberDeleteRepositoryImpl(
private val memberDeleteService: MemberDeleteService,
) : MemberDeleteRepository {
override suspend fun deleteMember(): Result<Unit> = runCatching {
memberDeleteService.deleteMember()
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,22 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import org.jetbrains.compose.resources.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.konkuk.medicarecall.domain.model.type.GenderType
import com.konkuk.medicarecall.resources.Res
import com.konkuk.medicarecall.resources.*
import com.konkuk.medicarecall.resources.ic_settings_back
import com.konkuk.medicarecall.ui.common.util.formatDateToKorean
import com.konkuk.medicarecall.ui.feature.settings.mydata.component.LogoutConfirmDialog
import com.konkuk.medicarecall.ui.feature.settings.component.SettingInfoItem
import com.konkuk.medicarecall.ui.feature.settings.component.SettingsTopAppBar
import com.konkuk.medicarecall.ui.feature.settings.mydata.component.LogoutConfirmDialog
import com.konkuk.medicarecall.ui.feature.settings.mydata.viewmodel.SettingsMyDataViewModel
import com.konkuk.medicarecall.ui.theme.MediCareCallTheme
import com.konkuk.medicarecall.ui.theme.figmaShadow
import com.konkuk.medicarecall.domain.model.type.GenderType
import org.jetbrains.compose.resources.painterResource
import org.koin.compose.viewmodel.koinViewModel

@Composable
Expand Down Expand Up @@ -78,7 +77,21 @@ fun SettingsMyDataScreen(
onBackClick = onBack,
onEditClick = navigateToUserInfoSetting,
onLogoutClick = { showLogoutDialog = true },
onServiceWithdrawClick = {},
onServiceWithdrawClick = {
viewModel.deleteUser(
onSuccess = {
viewModel.logout(
onSuccess = {
showLogoutDialog = false
navigateToLoginAfterLogout()
},
onError = { error ->
},
)
},
onError = {},
)
Comment on lines +80 to +93
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

실패 콜백이 비어 있어 탈퇴/로그아웃 실패 시 사용자 흐름이 끊깁니다.

Line 88-89, Line 92에서 onError를 비워두면 실패가 완전히 무시됩니다. 특히 로그아웃은 로컬 토큰이 이미 정리될 수 있어(관련 구현상) 화면만 남는 불일치 상태가 생길 수 있습니다.

🩹 최소 보완안
         onServiceWithdrawClick = {
             viewModel.deleteUser(
                 onSuccess = {
                     viewModel.logout(
                         onSuccess = {
                             showLogoutDialog = false
                             navigateToLoginAfterLogout()
                         },
-                        onError = { error ->
-                        },
+                        onError = { _ ->
+                            // 로컬 세션 정리 상태와 UI 상태를 맞춤
+                            showLogoutDialog = false
+                            navigateToLoginAfterLogout()
+                        },
                     )
                 },
-                onError = {},
+                onError = { _ ->
+                    // TODO: 스낵바/다이얼로그 등 사용자 피드백 연결
+                },
             )
         },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/settings/mydata/screen/SettingsMyDataScreen.kt`
around lines 80 - 93, The empty failure callbacks for onServiceWithdrawClick
(calls to viewModel.deleteUser and nested viewModel.logout) swallow errors and
break user flow; implement onError handlers for viewModel.deleteUser and
viewModel.logout to handle failures (e.g., display an error UI/message, keep
showLogoutDialog true to avoid closing the dialog prematurely, and avoid
navigating via navigateToLoginAfterLogout on logout failure) and ensure any
necessary local cleanup is still done or retried; update the onError lambdas in
the deleteUser and logout calls to call the viewModel/error-dispatch method or
UI toast/snackbar and to preserve correct dialog/navigation state (referencing
onServiceWithdrawClick, viewModel.deleteUser, viewModel.logout,
showLogoutDialog, navigateToLoginAfterLogout).

},
onLogoutDismiss = { showLogoutDialog = false },
onLogoutConfirm = {
viewModel.logout(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.konkuk.medicarecall.ui.feature.settings.mydata.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.konkuk.medicarecall.data.repository.MemberDeleteRepository
import com.konkuk.medicarecall.data.repository.UserRepository
import com.konkuk.medicarecall.domain.model.UserInfo
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -13,6 +14,7 @@ import org.koin.android.annotation.KoinViewModel
@KoinViewModel
class SettingsMyDataViewModel(
private val userRepository: UserRepository,
private val memberDeleteRepository: MemberDeleteRepository,
) : ViewModel() {
fun refresh() = getUserData()

Expand Down Expand Up @@ -45,4 +47,12 @@ class SettingsMyDataViewModel(
}
}
}

fun deleteUser(onSuccess: () -> Unit, onError: (Throwable) -> Unit) {
viewModelScope.launch {
memberDeleteRepository.deleteMember()
.onSuccess { onSuccess() }
.onFailure { onError(it) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import org.jetbrains.compose.resources.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.konkuk.medicarecall.resources.Res
import com.konkuk.medicarecall.resources.*
import com.konkuk.medicarecall.resources.ic_settings_back
import com.konkuk.medicarecall.ui.feature.settings.component.SettingsTopAppBar
import com.konkuk.medicarecall.ui.feature.settings.subscription.component.SubscribeCard
Expand Down
Loading