Skip to content

[FEAT] 미션 수행 화면 리팩토링 및 미션 미리보기 화면 구현#238

Merged
DongChyeon merged 6 commits into
developfrom
feat/#235-mission-preview
Jul 27, 2025
Merged

[FEAT] 미션 수행 화면 리팩토링 및 미션 미리보기 화면 구현#238
DongChyeon merged 6 commits into
developfrom
feat/#235-mission-preview

Conversation

@DongChyeon
Copy link
Copy Markdown
Member

@DongChyeon DongChyeon commented Jul 27, 2025

Related issue 🛠

closed #235

어떤 변경사항이 있었나요?

  • 🐞 BugFix Something isn't working
  • 🎨 Design Markup & styling
  • 📃 Docs Documentation writing and editing (README.md, etc.)
  • ✨ Feature Feature
  • 🔨 Refactor Code refactoring
  • ⚙️ Setting Development environment setup
  • ✅ Test Test related (Junit, etc.)

CheckPoint ✅

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 컨벤션에 맞게 작성했습니다. (필수)
  • merge할 브랜치의 위치를 확인해 주세요(main❌/develop⭕) (필수)
  • Approve된 PR은 assigner가 머지하고, 수정 요청이 온 경우 수정 후 다시 push를 합니다. (필수)
  • BugFix의 경우, 버그의 원인을 파악하였습니다. (선택)

Work Description ✏️

2025-07-23.9.49.45.mov
  • 기존에 미션 수행 화면에서 탭, 흔들기 미션 로직이 분리되어있던 것을 통합했습니다.
  • 미션 설정 바텀시트에서 미션 미리보기 화면으로 이동할 수 있도록 처리했습니다.
  • 미션 화면의 하드코딩된 문자열을 문자열 리소스로 교체했습니다.

Uncompleted Tasks 😅

  • N/A

To Reviewers 📢

Summary by CodeRabbit

  • 신규 기능

    • 알람 추가/수정 화면에서 미션 미리보기 기능이 추가되었습니다.
    • 미션 화면에 미션 모드(REAL, PREVIEW) 개념이 도입되어, 미리보기 모드에서는 별도의 종료 버튼 및 뒤로가기 동작이 지원됩니다.
    • 미션 화면에서 뒤로가기 내비게이션 기능이 추가되었습니다.
  • UI/UX 개선

    • 미션 관련 UI 텍스트가 한국어 리소스로 교체되어 더 일관된 사용자 경험을 제공합니다.
    • 미션 화면 상단바 및 버튼 등에서 모드에 따라 표시되는 요소가 달라집니다.
    • 미션 미리보기 화면 내비게이션 흐름이 개선되었습니다.
  • 버그 수정

    • 알람 알림에서 미션 이동 시 관련 동작이 일관적으로 처리됩니다.
  • 기타

    • 미션 진행 방식이 통합되어, 탭/흔들기 미션 모두 동일한 흐름으로 진행됩니다.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 27, 2025

Walkthrough

미션 미리보기 기능이 새롭게 추가되고, 미션 수행 화면 및 관련 뷰모델이 리팩토링되었습니다. 미션 모드(REAL, PREVIEW) 개념이 도입되어 UI와 로직이 분기됩니다. 각종 네비게이션 함수, 상태, 액션, 사이드이펙트, 문자열 리소스 등이 이에 맞게 확장 및 수정되었습니다.

Changes

파일/경로 요약 변경 요약
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt 알람 해제 인텐트 생성 로직을 항상 createNavigateToMissionPendingIntent로 통일, 분기 제거
core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt navigateToMissionPreview 함수 추가
core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt, domain/.../MissionMode.kt MissionRoute를 파라미터화된 data class로 변경, MissionMode enum 신설
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt 미션 미리보기 관련 액션 및 사이드이펙트 추가
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt 미리보기 사이드이펙트 처리 및 콜백 파라미터 확장, 액션 디스패치 로직 추가
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt 미리보기 액션 핸들러 및 상태 갱신, 사이드이펙트 발생 로직 추가
feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt 미리보기 콜백 파라미터 및 내부 호출부 시그니처 확장
feature/mission/src/main/java/com/yapp/mission/MissionContract.kt 상태에 missionMode 추가, NavigateBack 액션 추가
feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt MissionRoute 네비게이션 파라미터 및 popUpTo 대상 명확화
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt 미션 모드 기반 UI/네비게이션 분기, 백핸들러, 미션탑앱바 시그니처 변경, 문자열 리소스 적용, 프리뷰 컴포저블 추가
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt 미션 모드 처리, 미션 진행 로직 통합, 백네비게이션/미션완료 분기, 파라미터화된 초기화 및 상태 갱신
feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt eventDispatcher 파라미터 제거
feature/mission/src/main/res/values/strings.xml 미션 관련 한글 문자열 리소스 14개 추가

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant AlarmAddEditScreen
    participant AlarmAddEditViewModel
    participant OrbitNavigator
    participant MissionScreen
    participant MissionViewModel

    User->>AlarmAddEditScreen: 미리보기 버튼 클릭 (missionType, missionCount)
    AlarmAddEditScreen->>AlarmAddEditViewModel: Action.NavigateToMissionPreview(missionType, missionCount)
    AlarmAddEditViewModel->>AlarmAddEditScreen: SideEffect.NavigateToMissionPreview(missionType, missionCount)
    AlarmAddEditScreen->>OrbitNavigator: navigateToMissionPreview(missionType, missionCount)
    OrbitNavigator->>MissionScreen: MissionRoute(missionType, missionCount, missionMode=PREVIEW)
    MissionScreen->>MissionViewModel: 초기화 (missionType, missionCount, missionMode)
Loading
sequenceDiagram
    participant User
    participant MissionScreen
    participant MissionViewModel

    User->>MissionScreen: 뒤로가기 (PREVIEW 모드)
    MissionScreen->>MissionViewModel: Action.NavigateBack
    MissionViewModel->>MissionScreen: SideEffect.NavigateBack
    MissionScreen->>User: 화면 종료
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

Suggested reviewers

  • MoonsuKang

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#235-mission-preview

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (3)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)

137-149: 주석 처리된 코드를 제거하세요.

더 이상 사용하지 않는 코드는 삭제하는 것이 좋습니다.

다음과 같이 주석 처리된 코드를 제거하세요:

-        /*val alarmDismissPendingIntent = if (shouldNavigateToMission) {
-            createNavigateToMissionPendingIntent(
-                applicationContext = applicationContext,
-                notificationId = alarm.id,
-                missionType = alarm.missionType.value,
-                missionCount = alarm.missionCount,
-            )
-        } else {
-            createAlarmDismissPendingIntent(
-                applicationContext = applicationContext,
-                pendingIntentId = alarm.id,
-            )
-        }*/
core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt (1)

61-74: 타입 안전성을 위해 enum 값 사용을 고려해보세요.

함수 구현은 올바르지만, 하드코딩된 "PREVIEW" 문자열 대신 MissionMode.PREVIEW.name을 사용하면 더 안전합니다.

     fun navigateToMissionPreview(
         missionType: Int,
         missionCount: Int,
         navOptions: NavOptions? = null,
     ) {
         navController.navigate(
             MissionRoute(
                 missionType = "$missionType",
                 missionCount = "$missionCount",
-                missionMode = "PREVIEW",
+                missionMode = MissionMode.PREVIEW.name,
             ),
             navOptions,
         )
     }

이를 위해 MissionMode import가 필요합니다:

+import com.yapp.domain.MissionMode
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)

77-91: 불필요한 return@BackHandler 제거

return@BackHandler는 여기서 불필요합니다. 조건문 블록이 끝나면 자연스럽게 리턴됩니다.

 BackHandler {
     if (state.missionMode == MissionMode.PREVIEW) {
         navigator.navigateBack()
-        return@BackHandler
     }

     viewModel.processAction(
         if (state.showExitDialog) {
             MissionContract.Action.HideExitDialog
         } else {
             MissionContract.Action.ShowExitDialog
         },
     )
 }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9378db1 and a214096.

📒 Files selected for processing (14)
  • core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (2 hunks)
  • 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)
  • domain/src/main/java/com/yapp/domain/MissionMode.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 (5 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/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/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/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/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/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/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/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 패턴이다.

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 패턴이다.

⏰ 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 (28)
domain/src/main/java/com/yapp/domain/MissionMode.kt (1)

1-13: 미션 모드 enum 구현이 적절합니다.

enum 클래스와 companion object의 구현이 올바르며, fromRaw 함수에서 null-safe 처리와 기본값 반환이 적절히 구현되어 있습니다.

core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)

151-156: 알람 해제 로직 변경사항 및 UX 영향 검토 필요

이번 PR에서 알람 해제 시 항상 미션 화면으로 이동하도록 분기 로직이 제거되었습니다. 아래 위치를 중심으로 변경 사항이 의도한 대로 동작하는지, UX에 부정적 영향은 없는지 확인해주세요.

  • core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt
    • startForeground 호출부: createNotification(alarm, shouldNavigateToMission())
    • 151–156라인: alarmDismissPendingIntent를 항상 createNavigateToMissionPendingIntent로 설정
    • createNotification 함수 내부에 주석 처리된 if (shouldNavigateToMission) 분기
    • shouldNavigateToMission() 함수 정의 및 사용처

위 변경으로 사용자는 언제나 미션 화면으로 이동하게 됩니다. 팀 내에서 UX 흐름을 점검하고, 분기 로직 제거에 따른 기대 동작·부작용 여부를 검증해주세요.

feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt (2)

28-31: 네비게이션 파라미터 전달 방식 개선이 적절합니다.

명명된 파라미터를 사용하여 코드 가독성이 향상되었습니다.


43-43: popUpTo 대상 수정이 올바릅니다.

MissionRoute가 데이터 클래스로 변경됨에 따라 MissionRoute.route를 사용하는 것이 적절합니다.

Also applies to: 53-53

feature/mission/src/main/res/values/strings.xml (1)

1-14: 한국어 문자열 리소스가 적절히 구성되었습니다.

미션 기능에 필요한 문자열들이 올바르게 정의되어 있으며, 동적 카운트를 위한 플레이스홀더(%1$d) 사용도 적절합니다.

feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt (2)

184-184: 미션 미리보기 액션 처리가 적절히 추가되었습니다.

새로운 액션이 기존 패턴과 일관성 있게 처리되고 있습니다.


215-228: 미션 미리보기 네비게이션 로직이 올바르게 구현되었습니다.

현재 시간을 초기 시간으로 업데이트한 후 사이드 이펙트를 발생시키는 로직이 적절하며, 기존 아키텍처 패턴과 일관성을 유지하고 있습니다.

feature/mission/src/main/java/com/yapp/mission/MissionContract.kt (2)

3-3: 미션 모드 개념 도입이 적절합니다.

MissionMode import와 missionMode 속성 추가가 올바르게 구현되었습니다. 기본값을 MissionMode.REAL로 설정한 것은 기존 코드와의 호환성을 보장하는 좋은 선택입니다.

Also applies to: 9-9


25-25: 네비게이션 액션 추가가 일관성 있게 구현되었습니다.

NavigateBack 액션이 기존 액션들과 동일한 패턴으로 올바르게 정의되었습니다.

core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt (1)

3-3: 라우트 파라미터화가 적절하게 구현되었습니다.

data object에서 data class로의 변환이 올바르게 수행되었습니다:

  • 미션 파라미터들이 String 타입으로 일관성 있게 정의됨
  • missionMode의 기본값 설정으로 기존 코드와의 호환성 보장
  • companion object를 통한 route 상수 관리

Also applies to: 7-15

feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt (1)

88-88: MVI 패턴에 따른 액션/사이드이펙트 추가가 올바릅니다.

NavigateToMissionPreview 액션과 사이드이펙트가 일관된 파라미터 타입으로 정의되었고, 기존 MVI 패턴을 잘 따르고 있습니다. 이전 학습 내용에서 확인된 UX 패턴과도 일치합니다.

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 콜백이 새로운 파라미터를 받아 올바른 액션을 디스패치하도록 업데이트되었습니다. 기존 패턴과 일관성을 유지하고 있습니다.

feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (8)

152-177: 미리보기 모드 나가기 버튼 구현이 적절합니다

NavigationBar 인셋을 고려한 패딩 처리와 버튼 스타일링이 잘 구현되었습니다.


190-204: MissionContent 리팩토링이 적절합니다

MissionTopAppBar에 mode 파라미터 전달과 FlipCard의 eventDispatcher 제거가 올바르게 처리되었습니다.


219-258: MissionTopAppBar 모드 분기 처리가 적절합니다

미션 모드에 따른 조건부 렌더링과 문자열 리소스 사용이 올바르게 구현되었습니다.


275-295: 미션 지시문 지역화 처리가 적절합니다

하드코딩된 문자열을 string resource로 교체하여 지역화를 지원합니다.


350-372: 종료 다이얼로그 지역화 처리가 적절합니다

모든 텍스트가 string resource로 교체되어 일관된 지역화를 지원합니다.


397-397: 성공 메시지 지역화 처리가 적절합니다

하드코딩된 성공 메시지를 string resource로 교체했습니다.


411-413: 에러 다이얼로그 지역화 처리가 적절합니다

에러 다이얼로그의 제목과 확인 버튼 텍스트가 string resource로 교체되었습니다.


431-470: 미션 모드별 프리뷰 함수 추가가 유용합니다

REAL과 PREVIEW 모드를 각각 확인할 수 있는 프리뷰 함수들이 추가되어 개발 시 UI 검증이 용이해졌습니다.

feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt (2)

71-71: 미션 미리보기 콜백 시그니처 변경이 적절합니다

미션 미리보기 기능에 미션 타입과 횟수를 모두 전달하도록 변경되었습니다.


149-151: 미션 미리보기 호출 구현이 적절합니다

선택된 미션 타입과 카운트가 onPreviewMission 콜백으로 올바르게 전달됩니다.

Also applies to: 478-479

feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (5)

35-49: SavedStateHandle을 통한 미션 정보 로드가 적절합니다

navigation 파라미터를 통해 전달된 미션 정보를 올바르게 로드하고 초기화합니다.


51-60: 액션 처리 리팩토링이 적절합니다

NavigateBack 액션 추가와 미션 진행 처리 통합이 코드를 간결하게 만들었습니다.


62-79: 미션 정보 파싱 및 기본값 처리가 적절합니다

SavedStateHandle에서 가져온 raw 값들을 안전하게 파싱하고 적절한 기본값을 설정합니다.


93-123: 미션 진행 처리 통합이 효과적입니다

TAP과 SHAKE 미션의 공통 로직을 통합하여 코드 중복을 제거하고 유지보수성을 향상시켰습니다.


150-158: 미션 완료 처리의 모드별 분기가 적절합니다

REAL 모드에서는 포춘을 생성하고, PREVIEW 모드에서는 바로 뒤로가기를 수행하는 로직이 명확합니다.

@YAPP-Github YAPP-Github deleted a comment from coderabbitai Bot Jul 27, 2025
@DongChyeon DongChyeon force-pushed the feat/#235-mission-preview branch from a214096 to cc8cf3c Compare July 27, 2025 15:14
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a214096 and cc8cf3c.

📒 Files selected for processing (14)
  • core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (2 hunks)
  • 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)
  • domain/src/main/java/com/yapp/domain/MissionMode.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 (5 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
🚧 Files skipped from review as they are similar to previous changes (12)
  • core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt
  • domain/src/main/java/com/yapp/domain/MissionMode.kt
  • core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt
  • feature/mission/src/main/res/values/strings.xml
  • feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt
  • core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt
  • feature/mission/src/main/java/com/yapp/mission/MissionContract.kt
  • feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt
  • feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt
  • feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt
  • feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.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 (1)
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 (12)
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (12)

13-13: Import 추가사항들이 적절하게 구성되어 있습니다.

새로운 기능 구현을 위한 필요한 import들이 올바르게 추가되었습니다. 특히 미션 모드와 네비게이션 관련 import들이 적절히 포함되어 있습니다.

Also applies to: 16-17, 22-22, 25-27, 42-42, 50-50, 52-52, 61-61


64-67: MissionRoute 함수 시그니처 변경이 올바릅니다.

navigator: OrbitNavigator 파라미터 추가로 네비게이션 로직을 외부에서 주입받을 수 있게 되어 의존성 역전 원칙을 잘 따르고 있습니다.


77-90: BackHandler 로직 구현이 미션 모드에 따라 적절히 분기됩니다.

미리보기 모드에서는 즉시 뒤로가기를 수행하고, 실제 미션 모드에서는 종료 다이얼로그를 표시하는 로직이 명확하게 구현되어 있습니다. 사용자 경험 측면에서 올바른 구현입니다.


133-136: MissionContent 호출 단순화가 적절합니다.

매개변수 전달이 명확하고 깔끔하게 정리되었습니다.


152-177: 미리보기 모드 전용 종료 버튼 구현이 우수합니다.

미리보기 모드에서만 표시되는 하단 종료 버튼의 구현이 잘 되어 있습니다:

  • 네비게이션 바 패딩을 고려한 적절한 위치 설정
  • CircleShape과 적절한 색상 구성
  • 명확한 조건부 렌더링

190-193: MissionTopAppBar에 미션 모드 전달이 올바릅니다.

미션 모드에 따른 UI 분기를 위해 적절히 매개변수가 전달되고 있습니다.


203-203: FlipCard 컴포넌트 호출 단순화가 적절합니다.

관련 코드 스니펫에서 확인된 바와 같이 FlipCard 컴포넌트의 시그니처가 변경되어 eventDispatcher 매개변수가 제거되었습니다. 이는 뷰모델에서의 미션 진행 처리 로직 개선과 일치합니다.


219-222: MissionTopAppBar 함수 시그니처 개선이 우수합니다.

미션 모드를 매개변수로 받아 조건부 UI 렌더링을 가능하게 하는 설계가 좋습니다. 함수의 책임이 명확해졌습니다.


231-255: 실제 미션 모드에서만 종료 UI 표시 로직이 정확합니다.

미리보기 모드에서는 종료 버튼을 숨기고 실제 미션 모드에서만 표시하는 조건부 렌더링이 올바르게 구현되었습니다. 각 모드에 적합한 UX를 제공합니다.


276-282: 하드코딩된 문자열의 리소스화가 완벽합니다.

모든 하드코딩된 문자열이 적절한 리소스 ID로 대체되어 국제화와 유지보수성이 크게 향상되었습니다. 특히:

  • 미션 안내 문구의 동적 포매팅 (stringResource(id, missionCount))
  • 다이얼로그 메시지들의 리소스화
  • 일관된 네이밍 컨벤션 적용

Also applies to: 291-291, 351-354, 397-397, 411-411, 413-413


431-449: 새로운 프리뷰 컴포저블 추가가 적절합니다.

실제 미션 모드를 위한 별도의 프리뷰 컴포저블이 추가되어 개발 시 두 모드의 UI를 모두 확인할 수 있게 되었습니다.


457-457: 기존 프리뷰 컴포저블의 미션 모드 설정이 정확합니다.

미리보기 모드로 명시적으로 설정되어 해당 모드의 UI를 올바르게 미리볼 수 있습니다.

Comment thread feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt
@codecov
Copy link
Copy Markdown

codecov Bot commented Jul 27, 2025

Codecov Report

❌ Patch coverage is 0% with 32 lines in your changes missing coverage. Please review.
✅ Project coverage is 4.21%. Comparing base (6215002) to head (cc8cf3c).
⚠️ Report is 11 commits behind head on develop.

Files with missing lines Patch % Lines
...m/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt 0.00% 10 Missing ⚠️
.../com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt 0.00% 9 Missing ⚠️
.../main/java/com/yapp/alarm/services/AlarmService.kt 0.00% 5 Missing ⚠️
...om/yapp/home/alarm/addedit/AlarmAddEditContract.kt 0.00% 5 Missing ⚠️
...m/component/bottomsheet/AlarmMissionBottomSheet.kt 0.00% 3 Missing ⚠️

❌ Your project status has failed because the head coverage (4.21%) is below the target coverage (60.00%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff              @@
##             develop    #238      +/-   ##
============================================
- 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              
Files with missing lines Coverage Δ
...m/component/bottomsheet/AlarmMissionBottomSheet.kt 0.00% <0.00%> (ø)
.../main/java/com/yapp/alarm/services/AlarmService.kt 0.00% <0.00%> (ø)
...om/yapp/home/alarm/addedit/AlarmAddEditContract.kt 0.00% <0.00%> (ø)
.../com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt 0.00% <0.00%> (ø)
...m/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt 0.00% <0.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@DongChyeon DongChyeon merged commit eb4dc28 into develop Jul 27, 2025
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 미션 수행 화면 리팩토링 및 미션 미리보기 화면 구현

1 participant