[FEAT] 미션 수행 화면 리팩토링 및 미션 미리보기 화면 구현#236
Conversation
Walkthrough미션 미리보기 기능이 추가되고, 미션 수행 화면과 관련 ViewModel이 리팩토링되었습니다. 미션 관련 네비게이션 경로가 파라미터화되었으며, 미션 모드(REAL/PREVIEW) 개념이 도입되어 UI 및 동작이 이에 따라 분기됩니다. 문자열 리소스도 추가 및 국제화되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant HomeScreen
participant AlarmAddEditViewModel
participant OrbitNavigator
participant MissionScreen
participant MissionViewModel
HomeScreen->>AlarmAddEditViewModel: NavigateToMissionPreview(missionType, missionCount)
AlarmAddEditViewModel->>HomeScreen: SideEffect.NavigateToMissionPreview(missionType, missionCount)
HomeScreen->>OrbitNavigator: navigateToMissionPreview(missionType, missionCount)
OrbitNavigator->>MissionScreen: MissionRoute(missionType, missionCount, missionMode=PREVIEW)
MissionScreen->>MissionViewModel: loadMissionInfo(missionType, missionCount, missionMode=PREVIEW)
MissionScreen-->>HomeScreen: (미리보기 종료 시 back navigation)
sequenceDiagram
participant MissionScreen
participant MissionViewModel
MissionScreen->>MissionViewModel: User action (Shake/Tap)
MissionViewModel->>MissionScreen: State 업데이트 (진행도, 애니메이션 등)
alt missionMode == PREVIEW
MissionScreen->>OrbitNavigator: 미리보기 종료(back)
else missionMode == REAL
MissionScreen->>MissionViewModel: 미션 완료 시 Fortune 화면 이동
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Possibly related PRs
Suggested reviewers
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 0
🔭 Outside diff range comments (1)
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (1)
27-201: 테스트 코드 미작성 확인 – MissionViewModel 테스트 추가 필요MissionViewModel을 검증하는 단위/통합 테스트 파일이 리포지토리에 존재하지 않습니다. 다음 항목에 대해 테스트 코드를 작성해주세요:
MissionMode.fromRaw(…)정상/예외 케이스handleMissionProgress로직: 카운트 증가, 마지막 과제 완료 시 애니메이션 및 딜레이 처리completeMission분기: REAL 모드(postFortune 호출) vs PREVIEW 모드(뒤로가기) 동작- 기타 핵심 액션(
processAction)이 State 및 SideEffect에 미치는 영향 확인테스트 패키지 경로 예시:
feature/mission/src/test/kotlin/com/yapp/mission/MissionViewModelTest.kt
🧹 Nitpick comments (4)
core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt (1)
61-74: 미션 미리보기 네비게이션 함수가 잘 구현되었지만 개선 여지가 있습니다.함수 구현은 전반적으로 좋으나,
"PREVIEW"문자열이 하드코딩되어 있습니다.MissionModeenum의 상수를 사용하는 것이 더 안전할 것 같습니다.다음과 같이 개선할 수 있습니다:
fun navigateToMissionPreview( missionType: Int, missionCount: Int, navOptions: NavOptions? = null, ) { navController.navigate( MissionRoute( missionType = "$missionType", missionCount = "$missionCount", - missionMode = "PREVIEW", + missionMode = MissionMode.PREVIEW.name, ), navOptions, ) }core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt (1)
6-14: MissionRoute 매개변수화가 잘 구현되었습니다.
data object에서data class로의 변경이 적절하며, 미션 매개변수를 전달할 수 있게 되었습니다. 기본값 설정으로 기존 코드와의 호환성도 유지됩니다.문자열 상수 대신 enum을 사용하면 타입 안전성을 높일 수 있습니다:
enum class MissionMode { REAL, PREVIEW } data class MissionRoute( val missionType: String, val missionCount: String, val missionMode: String = MissionMode.REAL.name, )feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (2)
32-40:fromRaw메소드를 더 간결하게 리팩토링할 수 있습니다현재 구현도 동작하지만, Kotlin의
entries속성을 활용하면 더 간결하게 작성할 수 있습니다.companion object { fun fromRaw(raw: String?): MissionMode { - return try { - valueOf(raw ?: "REAL") - } catch (_: IllegalArgumentException) { - REAL - } + return raw?.let { entries.find { it.name == raw } } ?: REAL } }
50-50:savedStateHandle의 접근 제한자를private으로 유지하는 것이 좋습니다ViewModel의 의존성은 캡슐화를 위해 private으로 유지하는 것이 일반적입니다. 현재 코드에서는 내부적으로만 사용되고 있으므로 외부 접근이 필요하지 않아 보입니다.
- val savedStateHandle: SavedStateHandle, + private val savedStateHandle: SavedStateHandle,
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt(1 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt(5 hunks)feature/mission/src/main/java/com/yapp/mission/MissionContract.kt(2 hunks)feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt(3 hunks)feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt(17 hunks)feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt(4 hunks)feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt(0 hunks)feature/mission/src/main/res/values/strings.xml(1 hunks)
💤 Files with no reviewable changes (1)
- feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt
🧰 Additional context used
🧠 Learnings (9)
📓 Common learnings
Learnt from: DongChyeon
PR: YAPP-Github/Orbit-Android#234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionContract.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/res/values/strings.xml (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
🔇 Additional comments (22)
feature/mission/src/main/java/com/yapp/mission/MissionContract.kt (2)
8-8: 미션 모드 추가가 적절합니다.
MissionMode.REAL을 기본값으로 하는missionMode속성 추가가 잘 구현되었습니다. 기존 기능에 영향을 주지 않으면서 미리보기 모드를 지원할 수 있게 되었습니다.
24-24: 뒤로가기 액션 추가가 적절합니다.
NavigateBack액션이 기존 패턴을 따라 일관성 있게 구현되었습니다. 이미 정의된NavigateBackSideEffect와 잘 연동될 것으로 보입니다.feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt (2)
28-31: 명명된 매개변수 사용으로 가독성이 향상되었습니다.
MissionRoute호출 시 명명된 매개변수를 사용하여 코드의 명확성이 개선되었습니다.navigator와viewModel매개변수가 명시적으로 전달되어 이해하기 쉬워졌습니다.
43-43: 라우트 상수 사용이 일관성 있습니다.
MissionRoute.route상수를 사용하여 네비게이션 옵션을 설정한 것이 적절합니다.MissionRoute가 매개변수화된 데이터 클래스로 변경된 것과 일치하며, 라우트 관리의 일관성을 유지합니다.Also applies to: 53-53
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt (2)
184-184: 미션 미리보기 액션 처리가 적절합니다.
NavigateToMissionPreview액션 케이스가 기존 패턴을 따라 일관성 있게 추가되었습니다. 매개변수 전달도 올바르게 구현되었습니다.
215-220: 미션 미리보기 네비게이션 함수가 잘 구현되었습니다.
navigateToMissionPreview함수가 적절한 매개변수와 함께 구현되었습니다. 사이드 이펙트 포스팅도 올바르게 처리되어 있으며, private 접근 제한자 사용이 적절합니다.core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt (1)
14-14: 필요한 import가 적절히 추가되었습니다.
MissionRouteimport 추가가 새로운 네비게이션 함수에 필요한 의존성을 올바르게 해결합니다.feature/mission/src/main/res/values/strings.xml (1)
1-14: 문자열 리소스가 잘 구성되었습니다!한국어 문자열 리소스가 적절하게 정의되었고, 명명 규칙이 일관되게 적용되었습니다. 특히 미션 관련 UI 텍스트들이 체계적으로 구성되어 있습니다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt (1)
88-88: 미션 미리보기 네비게이션 액션과 사이드 이펙트가 적절히 추가되었습니다!기존 Contract 패턴을 잘 따르고 있으며, 미션 타입과 횟수를 파라미터로 전달하는 구조가 명확합니다.
Also applies to: 107-110
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt (2)
107-112: 미션 미리보기 네비게이션 처리가 올바르게 구현되었습니다!NavigateToMissionPreview 사이드 이펙트가 적절히 처리되고 있으며, missionType.value를 사용하여 네비게이션 파라미터를 전달하는 방식이 적절합니다.
250-257: 미션 미리보기 콜백 시그니처가 일관되게 업데이트되었습니다!onPreviewMission 콜백이 missionType과 missionCount를 모두 받도록 변경되어 미션 미리보기 기능을 완전히 지원합니다.
feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt (1)
71-71: 미션 미리보기 콜백 시그니처가 일관되게 업데이트되었습니다!기존 학습 내용과 일치하게, selectedMissionType과 selectedMissionCount가 작업 상태로 관리되고 있으며, 이들이 미리보기 네비게이션에 적절히 전달되고 있습니다. 콜백 시그니처 변경이 모든 관련 위치에서 일관되게 적용되었습니다.
Also applies to: 150-151, 478-478, 572-572, 658-658
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (6)
63-65: MissionRoute에 Navigator 파라미터가 적절히 추가되었습니다!미션 미리보기 화면에서의 네비게이션을 지원하기 위해 필수적인 변경사항입니다.
76-89: 미션 모드에 따른 백 핸들러 분기 처리가 잘 구현되었습니다!PREVIEW 모드에서는 바로 뒤로 가고, REAL 모드에서는 종료 다이얼로그를 표시하는 로직이 명확합니다.
151-176: 미리보기 모드 종료 버튼이 적절히 구현되었습니다!네비게이션 바 인셋을 고려한 패딩 처리와 CircleShape 버튼 디자인이 일관된 UI를 제공합니다.
239-254: 미션 모드에 따른 상단바 조건부 렌더링이 올바르게 구현되었습니다!REAL 모드에서만 나가기 아이콘과 텍스트를 표시하는 로직이 명확합니다.
275-281: 문자열 리소스가 일관되게 적용되었습니다!하드코딩된 문자열이 모두 리소스로 대체되어 국제화 지원이 개선되었습니다.
Also applies to: 350-353, 396-396, 410-412
430-448: 미리보기 Composable이 개발에 유용하게 추가되었습니다!REAL과 PREVIEW 두 가지 모드에 대한 프리뷰가 제공되어 개발 시 UI 확인이 용이합니다.
Also applies to: 450-469
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (4)
77-94: 미션 정보 로드 로직이 잘 구현되었습니다파라미터 파싱과 기본값 처리가 안전하게 구현되어 있습니다.
toIntOrNull()을 사용한 null-safe 파싱과 적절한 기본값 설정이 좋습니다.
66-75: 액션 처리 로직 통합이 훌륭합니다기존의 분리된 shake/click 핸들러를
handleMissionProgress로 통합한 것은 코드 중복을 제거하고 유지보수성을 향상시킵니다.
108-138: 연속적인 액션 처리 시 동시성 이슈를 검토해주세요사용자가 빠르게 연속으로 탭하거나 흔들 경우,
delay중에 다른 액션이 처리되어 상태 불일치가 발생할 수 있습니다. 액션 처리 중 중복 실행을 방지하는 로직이 필요할 수 있습니다.다음과 같은 방법을 고려해보세요:
- 처리 중 플래그를 추가하여 중복 실행 방지
- 디바운싱 또는 스로틀링 적용
165-173: 미션 완료 시 모드별 처리가 적절합니다REAL 모드에서만 운세를 포스팅하고, PREVIEW 모드에서는 뒤로 이동하는 로직이 미리보기 기능의 목적에 잘 부합합니다.
There was a problem hiding this comment.
Actionable comments posted: 0
🔭 Outside diff range comments (1)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)
137-149: 불필요해진shouldNavigateToMission매개변수 및 메서드 제거 필요현재
createNotification(alarm, shouldNavigateToMission())호출부는 여전히shouldNavigateToMission()값을 전달하지만, 내부의 조건 분기 로직이 주석 처리되어 해당 값이 전혀 사용되지 않고 있습니다. 이로 인해 다음 항목들을 정리해야 합니다:
createNotification시그니처에서shouldNavigateToMission: Boolean매개변수 제거- 호출부(
startForeground직전)에서shouldNavigateToMission()호출 제거 후createNotification(alarm)형태로 변경- 더 이상 사용되지 않는
private suspend fun shouldNavigateToMission()메서드 삭제- 주석 처리된 기존 분기 코드 및
createAlarmDismissPendingIntentimport 정리위 수정으로 코드 가독성과 유지보수성을 확보할 수 있습니다.
🧹 Nitpick comments (1)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)
151-156: 항상 미션 화면으로 이동하는 변경사항 승인미션 미리보기 기능 구현에 따라 알람 해제 시 항상 미션 화면으로 이동하도록 변경된 것으로 보입니다.
createNavigateToMissionPendingIntent를 사용하여 미션 타입과 카운트 정보를 전달하는 구현이 올바릅니다.다만, 더 이상 사용되지 않는
createAlarmDismissPendingIntentimport도 제거하는 것이 좋겠습니다.사용하지 않는 import를 제거하세요:
- import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissPendingIntent
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt(1 hunks)domain/src/main/java/com/yapp/domain/MissionMode.kt(1 hunks)feature/mission/src/main/java/com/yapp/mission/MissionContract.kt(2 hunks)feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt(17 hunks)feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt(5 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- feature/mission/src/main/java/com/yapp/mission/MissionContract.kt
- core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt
- feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: DongChyeon
PR: YAPP-Github/Orbit-Android#234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
🧬 Code Graph Analysis (2)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)
core/alarm/src/main/java/com/yapp/alarm/pendingIntent/interaction/AlarmDismissPendingIntent.kt (1)
createNavigateToMissionPendingIntent(35-53)
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt (1)
FlipCard(25-96)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (9)
domain/src/main/java/com/yapp/domain/MissionMode.kt (1)
3-13: LGTM! 깔끔한 enum 구현입니다.
MissionModeenum이 잘 구현되었습니다.fromRaw메서드는 null 안전성을 보장하고 적절한 기본값을 제공합니다.entries사용도 최신 Kotlin 관례를 따르고 있습니다.feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (8)
64-90: 미션 모드별 네비게이션 로직이 잘 구현되었습니다.
MissionRoute에OrbitNavigator파라미터가 추가되고BackHandler에서 미션 모드에 따른 분기 처리가 적절히 구현되었습니다. 프리뷰 모드에서는 즉시 뒤로가기, 실제 모드에서는 종료 다이얼로그를 보여주는 UX가 직관적입니다.
152-177: 프리뷰 모드 종료 버튼이 잘 구현되었습니다.프리뷰 모드에서만 표시되는 하단 종료 버튼이 적절히 구현되었습니다.
WindowInsets를 활용한 패딩 계산과 디자인 시스템을 따른 스타일링이 좋습니다.
203-203: FlipCard 컴포넌트 사용법이 올바르게 업데이트되었습니다.
FlipCard에서eventDispatcher파라미터가 제거된 것이 컴포넌트의 현재 시그니처와 일치합니다.
219-258: 미션 모드에 따른 조건부 UI 렌더링이 적절합니다.
MissionTopAppBar에서REAL모드일 때만 종료 버튼을 표시하는 로직이 올바르게 구현되었습니다. 문자열 리소스 사용도 국제화를 위해 좋은 개선입니다.
276-282: 문자열 리소스 활용이 잘 구현되었습니다.하드코딩된 문자열을
stringResource로 교체하고 미션 카운트를 파라미터로 전달하는 방식이 적절합니다. 국제화와 유지보수성 향상에 도움이 됩니다.
351-354: 다이얼로그 문자열 리소스화가 완료되었습니다.종료 다이얼로그의 모든 텍스트가 문자열 리소스로 교체되어 일관성과 현지화 지원이 개선되었습니다.
397-397: 나머지 UI 컴포넌트의 문자열 리소스화가 완료되었습니다.성공 오버레이와 에러 다이얼로그의 텍스트도 문자열 리소스로 교체되어 전체 화면의 국제화 작업이 일관되게 완료되었습니다.
Also applies to: 411-411, 413-413
431-470: 프리뷰 함수들이 두 가지 미션 모드를 적절히 지원합니다.
MissionRouteReal과MissionRoutePreview함수가 각각 실제 모드와 프리뷰 모드의 상태를 올바르게 설정하여 개발 및 테스트에 도움이 됩니다.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #236 +/- ##
============================================
- Coverage 4.23% 4.21% -0.02%
Complexity 53 53
============================================
Files 50 50
Lines 4462 4480 +18
Branches 659 660 +1
============================================
Hits 189 189
- Misses 4263 4281 +18
Partials 10 10
🚀 New features to boost your workflow:
|
Related issue 🛠
closed #235
어떤 변경사항이 있었나요?
CheckPoint ✅
PR이 다음 요구 사항을 충족하는지 확인하세요.
Work Description ✏️
2025-07-23.9.49.45.mov
Uncompleted Tasks 😅
To Reviewers 📢
Summary by CodeRabbit
신규 기능
개선 및 변경
버그 수정
문서 및 리소스