Feature/#39 시간표 수정 화면 - #41
Conversation
- TimetableEditor 관련 파일 및 클래스 이름을 TimetableNameInput으로 변경 - 관련 로직 및 UI 수정 - Navigation 경로 및 함수 이름 변경
- `TimetableEditorScreen` 및 관련 ViewModel, Contract를 추가하여 시간표 이름 및 학기를 편집할 수 있는 기능을 구현했습니다.
- `CchRegularTextField`에 `onClickClearButton` 파라미터를 추가하여 텍스트필드 클리어 기능을 구현했습니다. - `TimetableEditorScreen`과 `TimetableNameInputScreen`에서 `CchRegularTextField`의 클리어 버튼 클릭 이벤트를 처리하도록 수정했습니다. - `TextFieldClearButton`의 아이콘 크기 및 색상을 변경했습니다.
- `CchRegularTextField`에 `isActive` 파라미터를 추가하여 텍스트 필드 활성화 상태를 제어합니다. - 시간표 이름 입력 및 편집, 강의 정보 입력 화면에서 텍스트 필드 활성화 상태를 적용합니다. - 시간표 편집 화면에서 시간표 이름 또는 학기가 변경되었을 때만 저장 버튼이 활성화되도록 수정합니다.
Walkthrough시간표 수정 화면의 기능이 대폭 확장되었습니다. 새로운 시간표 이름 입력 화면 및 ViewModel이 추가되고, 네비게이션 경로가 분리 및 확장되었습니다. 시간표 수정 UI와 상태 관리가 대폭 리팩터링되었으며, 세부 컴포넌트(버튼, 텍스트필드 등)의 디자인 및 인터랙션도 변경되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant TimetableListScreen
participant SemesterSelectScreen
participant TimetableNameInputScreen
participant TimetableEditorScreen
User->>TimetableListScreen: 시간표 생성/수정 버튼 클릭
TimetableListScreen->>SemesterSelectScreen: 학기 선택 화면 이동
SemesterSelectScreen->>TimetableNameInputScreen: 학기 선택 후 이름 입력 화면 이동
TimetableNameInputScreen->>TimetableEditorScreen: 이름 입력 및 시간표 생성/수정 완료 시 에디터 화면 이동
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Assessment against linked issues
Suggested reviewers
Poem
✨ Finishing Touches
🧪 Generate unit tests
🪧 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
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (21)
composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt(3 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt(6 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt(3 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt(2 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListScreen.kt(0 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt(1 hunks)composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt(1 hunks)
💤 Files with no reviewable changes (1)
- composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListScreen.kt
🧰 Additional context used
📓 Path-based instructions (5)
**/*.kt
📄 CodeRabbit Inference Engine (CLAUDE.md)
**/*.kt: Use the Kotlin official code style
Use immutable state with data classes
Files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt
📄 CodeRabbit Inference Engine (CLAUDE.md)
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt: Use Koin 4.1.0-Beta10 for dependency injection with feature-based modules
Organize dependency injection modules in the di directory
Files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt
📄 CodeRabbit Inference Engine (CLAUDE.md)
composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt: Preview components in thepreview/designsystem/package
Organize previews for UI components in the preview/designsystem directory
Files:
composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/**/*.kt
📄 CodeRabbit Inference Engine (CLAUDE.md)
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/**/*.kt: When creating new UI components, useCCHaksaThemefor new features
Prefer typography styles over hardcoded text styles
Files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/**/*.kt
📄 CodeRabbit Inference Engine (CLAUDE.md)
Organize UI components and themes in the designsystem directory
Files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
🧠 Learnings (18)
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : organize feat...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Organize feature modules (MVI screens) in the feature directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/util/**/*.kt : organize ...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/util/**/*.kt : Organize utility functions in the util directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
📚 Learning: applies to composeapp/src/androidmain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt :...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Preview components in the `preview/designsystem/` package
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/model/**/*.kt : organize...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/model/**/*.kt : Organize shared data models in the model directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/designsystem/**/*.kt : o...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/**/*.kt : Organize UI components and themes in the designsystem directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : use room 2.7.1 w...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Use Room 2.7.1 with SQLite for local storage
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt : organize dependenc...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt : Organize dependency injection modules in the di directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/domain/**/*.kt : organize use c...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/domain/**/*.kt : Organize use cases and domain models in the domain directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/*...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/**/*.kt : Prefer typography styles over hardcoded text styles
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/androidmain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt :...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Organize previews for UI components in the preview/designsystem directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : each screen s...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Each screen should implement the MVI contract: interface [Feature]Contract with State and SideEffect, and class [Feature]Store : MviStore<State, SideEffect>
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : organize reposit...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Organize repository implementations in the data directory
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
📚 Learning: applies to **/*.kt : use immutable state with data classes...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to **/*.kt : Use immutable state with data classes
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/*...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/**/*.kt : When creating new UI components, use `CCHaksaTheme` for new features
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.ktcomposeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt : use koin 4.1.0-bet...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt : Use Koin 4.1.0-Beta10 for dependency injection with feature-based modules
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.ktcomposeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
📚 Learning: applies to composeapp/src/commonmain/composeresources/drawable/*.{png,jpg,jpeg,svg} : store images a...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/composeResources/drawable/*.{png,jpg,jpeg,svg} : Store images as drawable resources managed through Compose Resources
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
📚 Learning: applies to composeapp/src/commonmain/kotlin/com/chukchukhaksa/mobile/common/designsystem/theme/**/*....
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/theme/**/*.kt : Follow existing color naming conventions (100-600 scale) when creating new colors
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
📚 Learning: each use case should have a single responsibility...
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Each use case should have a single responsibility
Applied to files:
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
⏰ 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 (52)
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt (1)
15-16: 포맷팅 변경 확인 완료들여쓰기 조정으로 가독성이 약간 향상되었을 뿐, 기능적 변화는 없습니다. 별다른 문제 없이 승인합니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt (1)
24-49: 컴포넌트 리팩터링이 잘 구현되었습니다.
SuwikiSelectionContainer에서CchSelectionButton으로의 이름 변경과 함께 디자인 시스템 가이드라인을 잘 따르고 있습니다.CchTheme타이포그래피와 새로운 색상 체계 사용이 적절합니다.composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt (2)
8-8: 프리뷰 컴포넌트 업데이트가 적절합니다.
CchSelectionButton으로의 컴포넌트 변경에 맞춰 import가 올바르게 업데이트되었습니다.
42-42: 프리뷰 사용이 올바르게 변경되었습니다.새로운
CchSelectionButton컴포넌트를 사용하여 프리뷰가 정확히 업데이트되었습니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt (2)
8-8: 새로운 ViewModel import가 적절합니다.
TimetableNameInputViewModel의 import가 올바르게 추가되었습니다.
18-18: DI 모듈 등록이 올바릅니다.Koin의
viewModelOf함수를 사용하여TimetableNameInputViewModel이 적절히 등록되었습니다. 기존 패턴과 일치하며 가이드라인을 준수합니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt (5)
3-3: 필요한 import가 추가되었습니다.
sizemodifier를 위한 import가 적절히 추가되었습니다.
9-9: dp unit import가 올바릅니다.크기 지정을 위한
dpunit import가 추가되었습니다.
12-12: 새로운 색상 import가 적절합니다.
Gray500색상 import가 올바르게 추가되었습니다.
24-24: 명시적인 크기 지정이 개선사항입니다.
.size(24.dp)modifier를 추가하여 버튼의 크기를 명확히 정의한 것은 일관성과 사용성 측면에서 좋은 개선입니다.
28-28: 색상 업데이트가 시각적 계층 구조를 개선합니다.
Gray95에서Gray500으로의 tint 색상 변경이 더 나은 시각적 대비를 제공합니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt (2)
177-177: 활성 상태 표시가 UX를 개선합니다.
lectureName.isNotEmpty()를 사용하여 텍스트 필드의 활성 상태를 설정하는 것은 사용자에게 명확한 시각적 피드백을 제공합니다.
198-198: 일관성 있는 활성 상태 구현입니다.교수명 필드에서도 동일한 패턴으로
professorName.isNotEmpty()를 사용하여 활성 상태를 설정한 것이 일관성 있고 적절합니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/App.kt (2)
61-61: 새로운 네비게이션 파라미터 추가가 적절합니다.
navigateTimetableNameInput파라미터 추가로 새로운 시간표 이름 입력 화면으로의 네비게이션이 지원됩니다. 네비게이션 플로우 확장에 맞는 변경사항입니다.
69-69: 네비게이션 메소드명 오타 수정이 완료되었습니다.
navigatetimetable에서navigateTimetable로 수정되어 네이밍 일관성이 개선되었습니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt (1)
17-17: SideEffect 이름 변경이 새로운 네비게이션 플로우와 일치합니다.
NavigateTimetableEditor에서NavigateTimetableNameInput으로 변경되어 학기 선택 후 시간표 이름 입력 화면으로 이동하는 새로운 플로우를 정확히 반영합니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt (1)
19-23: ViewModel 메소드명과 SideEffect 업데이트가 적절합니다.
navigateTimetableEditor에서navigateTimetableNameInput으로 메소드명 변경과 함께 해당하는 SideEffect도 일관성 있게 업데이트되었습니다. null 체크 로직은 그대로 유지되어 안전성이 보장됩니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt (1)
33-33: UI 레이어의 네비게이션 콜백 업데이트가 MVI 패턴을 일관성 있게 유지합니다.파라미터명, SideEffect 처리, 그리고 ViewModel 메소드 참조가 모두 새로운
TimetableNameInput네비게이션 플로우에 맞게 일관성 있게 업데이트되었습니다.Also applies to: 38-38, 45-45
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt (2)
15-15: 새로운 네비게이션 메소드 추가가 기존 패턴과 일관성을 유지합니다.
navigateTimetableNameInput메소드가 다른 네비게이션 메소드들과 동일한 패턴으로 구현되었고, 기본 파라미터 사용도 일관성 있게 적용되었습니다.Also applies to: 28-30
48-50: 메소드명 오타 수정으로 네이밍 일관성이 개선되었습니다.
navigatetimetable에서navigateTimetable로 수정되어 camelCase 네이밍 컨벤션을 준수하게 되었습니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt (2)
29-39: 새로운 학기 선택 바텀시트 관리 함수들이 잘 구현되었습니다.MVI 패턴에 따라 상태를 적절히 업데이트하고 있으며, 함수명도 명확합니다.
74-74: 네비게이션 동작 변경이 PR 목표와 일치합니다.Figma 디자인에 따라 뒤로가기 대신 토스트만 표시하도록 변경된 것이 적절합니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt (2)
37-64: MVI 패턴을 올바르게 구현한 Route 컴포저블입니다.상태와 사이드 이펙트 수집이 lifecycle-aware하게 잘 구현되어 있고, 각 사이드 이펙트에 대한 처리도 적절합니다.
66-122: 디자인 시스템 컴포넌트를 올바르게 활용한 UI 구현입니다.CCHaksaTheme 컴포넌트들을 적절히 사용하고 있으며, 키보드 인셋 처리와 레이아웃 구성도 잘 되어 있습니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt (3)
38-42: 활성 상태 기반 스타일링 로직이 UX를 개선합니다.
value.isEmpty()대신isActive매개변수로 스타일을 결정하는 것이 더 명확하고 제어 가능한 방식입니다.
71-73: 조건부 클리어 버튼 표시가 적절하게 구현되었습니다.
isActive상태에 따라 클리어 버튼을 표시하는 로직이 올바르게 구현되어 있습니다.
34-36: 순서 변경에 따른 영향 없음 – 코드 변경 승인
CchRegularTextField에 추가된isActive및onClickClearButton콜백은 적절한 개선입니다. 저장소 내 모든 호출이 명명된 인자를 사용하고 있어 매개변수 순서가 변경되어도 기존 코드에 전혀 영향을 주지 않습니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt (3)
8-13: MVI 상태 패턴이 올바르게 구현되었습니다.불변 데이터 클래스를 사용하고 있으며,
buttonEnabled계산 속성이 상태 로직을 잘 캡슐화하고 있습니다.
15-18: 확장 함수를 통한 상태 변환이 잘 구현되었습니다.
TimetableEditorArgument에서TimetableNameInputState로의 변환이 명확하고 관심사의 분리가 잘 되어 있습니다.
20-25: 사이드 이펙트가 적절하게 정의되었습니다.각 사이드 이펙트가 명확한 용도를 가지고 있으며, sealed interface 패턴을 올바르게 사용하고 있습니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt (4)
17-27: ViewModel이 MVI 패턴을 올바르게 구현하고 있습니다.의존성 주입, SavedStateHandle 사용, 그리고 MVI 스토어 초기화가 모두 적절하게 구현되어 있습니다.
29-31: 상태 업데이트 함수가 간결하고 명확합니다.MVI 패턴에 따라 상태를 불변으로 업데이트하는 방식이 올바르게 구현되어 있습니다.
33-61: 유스케이스 처리와 에러 핸들링이 적절합니다.편집 모드에 따른 유스케이스 분기 처리와 Result 패턴을 활용한 에러 핸들링이 잘 구현되어 있습니다. 단일 책임 원칙도 잘 지켜지고 있습니다.
63-65: 네비게이션 사이드 이펙트 처리가 명확합니다.백스택 팝 기능이 간단하고 명확하게 구현되어 있습니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt (4)
10-12: 새로운 상태 속성들이 적절히 추가되었습니다.
preName,isSheetOpenSemester,preSelectedSemesterPosition속성들이 이전 값 추적과 UI 상태 관리를 위해 올바르게 추가되었습니다.
16-16: 버튼 활성화 로직이 개선되었습니다.이름과 학기 선택 변경사항을 모두 고려하도록 로직이 향상되어, 사용자가 실제로 변경사항이 있을 때만 저장 버튼이 활성화됩니다.
21-24: toState() 확장 함수가 새로운 속성들로 올바르게 업데이트되었습니다.이전 값들(
preName,preSelectedSemesterPosition)을 현재 값으로 초기화하여 변경사항 감지가 정확히 작동하도록 구현되었습니다.
28-28: 부수효과 변경이 PR 목표에 부합합니다.
ShowEditSaveToast로 변경하여 네비게이션 대신 토스트 메시지를 표시하도록 하는 것이 PR 설명의 요구사항과 일치합니다.composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorScreen.kt (7)
35-38: 함수 시그니처가 새로운 요구사항에 맞게 업데이트되었습니다.
navigateTimetable콜백이 제거되고 필요한 핸들러들만 유지되어 책임이 명확해졌습니다.
45-45: 토스트 메시지가 PR 목표에 맞게 구현되었습니다.네비게이션 대신 "변경사항이 저장되었습니다" 토스트 메시지를 표시하도록 변경되어 Figma 디자인 요구사항에 부합합니다.
53-58: 학기 선택 관련 콜백들이 올바르게 구성되었습니다.바텀시트 표시/숨김과 학기 선택 처리가 적절한 콜백 체인으로 구현되어 있어 사용자 플로우가 매끄럽습니다.
89-93: CchSelectionButton으로 학기 선택 UI가 개선되었습니다.기존의 정적 텍스트 대신 상호작용 가능한 선택 버튼으로 변경되어 사용자 경험이 향상되었습니다.
95-102: CchRegularTextField에 활성 상태와 클리어 기능이 추가되었습니다.
isActive속성으로 변경사항 시각적 피드백을 제공하고, 클리어 버튼으로 사용성이 개선되었습니다.
110-110: 버튼 텍스트가 편집 맥락에 적합하게 변경되었습니다."변경사항 저장하기"로 변경되어 시간표 편집 화면의 목적을 명확히 표현합니다.
117-124: 학기 선택 바텀시트가 조건부로 올바르게 렌더링됩니다.상태에 따른 조건부 렌더링과 필요한 콜백들이 적절히 전달되어 학기 선택 기능이 완성되었습니다.
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt (7)
16-16: TimetableNameInputRoute import가 추가되었습니다.새로운 시간표 이름 입력 화면을 지원하기 위한 import가 올바르게 추가되었습니다.
22-24: 새로운 시간표 이름 입력 네비게이션 함수가 추가되었습니다.
navigateTimetableNameInput함수가 기존 패턴과 일관되게 구현되어 있습니다.
55-55: 네비게이션 그래프 매개변수가 새로운 플로우를 지원합니다.
navigateTimetableNameInput매개변수 추가로 분리된 네비게이션 플로우를 지원합니다.
77-94: 시간표 이름 입력 라우트가 올바르게 정의되었습니다.새로운 composable이 적절한 라우트 패턴과 인자 정의로 구현되어 있으며, 필요한 핸들러들이 전달됩니다.
96-112: 시간표 편집기가 별도 라우트로 분리되었습니다.편집기가 독립적인 composable로 분리되어 책임이 명확해지고 네비게이션 구조가 개선되었습니다.
157-157: 학기 선택 플로우가 새로운 구조에 맞게 업데이트되었습니다.
navigateTimetableNameInput으로 변경되어 학기 선택 → 이름 입력 → 편집 플로우가 구현되었습니다.
170-170: 새로운 라우트 빌더 함수가 추가되었습니다.
timetableNameInputRoute함수가 기존 패턴과 일관되게 구현되어 라우트 생성이 체계적입니다.
| useCase | ||
| .onSuccess { | ||
| mviStore.postSideEffect(TimetableEditorSideEffect.NavigateTimetable) | ||
| // mviStore.postSideEffect(TimetableEditorSideEffect.PopBackStack) |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
주석 처리된 코드를 제거해주세요.
더 이상 사용되지 않는 코드는 완전히 제거하는 것이 코드베이스 유지보수에 좋습니다.
다음과 같이 수정하세요:
-// mviStore.postSideEffect(TimetableEditorSideEffect.PopBackStack)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // mviStore.postSideEffect(TimetableEditorSideEffect.PopBackStack) |
🤖 Prompt for AI Agents
In
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
at line 73, remove the commented-out line of code entirely instead of leaving it
commented. This cleans up unused code and improves maintainability.
There was a problem hiding this comment.
@BEEEAM-J 네, 이해했습니다. 임시로 유지하시는 것으로 하겠습니다. 향후 개발 과정에서 필요에 따라 다시 검토하시면 됩니다.
🧠 Learnings used
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Each screen should implement the MVI contract: interface [Feature]Contract with State and SideEffect, and class [Feature]Store : MviStore<State, SideEffect>
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Organize feature modules (MVI screens) in the feature directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/domain/**/*.kt : Organize use cases and domain models in the domain directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/model/**/*.kt : Organize shared data models in the model directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Use Room 2.7.1 with SQLite for local storage
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Preview components in the `preview/designsystem/` package
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Organize repository implementations in the data directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Use Firebase via GitLive KMP wrappers for remote data
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to **/*.kt : Use immutable state with data classes
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Organize previews for UI components in the preview/designsystem directory
|
|
||
| fun navigateTimetableEditor(timetable: Timetable) { | ||
| mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument())) | ||
| mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument())) |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
들여쓰기 불일치
Kotlin 공식 코드 스타일(4 스페이스 단위)을 따르려면 함수 내부 한 단계 들여쓰기는 8 스페이스(클래스 기준 +4)여야 합니다. 현재 6 스페이스로 다른 메서드와 불일치합니다.
- mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument()))
+ mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument()))📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument())) | |
| mviStore.postSideEffect(TimetableListSideEffect.NavigateTimetableEditor(timetable.toTimetableEditorArgument())) |
🤖 Prompt for AI Agents
In
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
at line 60, the indentation of the line posting the side effect uses 6 spaces
instead of the required 8 spaces according to Kotlin official style. Adjust the
indentation to 8 spaces to maintain consistency with other methods and follow
the 4-space per indentation level rule.
There was a problem hiding this comment.
@BEEEAM-J ktlint 오류를 확인해 주셔서 감사합니다! 제가 제안한 수정사항(6 스페이스를 8 스페이스로 변경)이 해당 ktlint 오류를 해결할 것입니다. Kotlin 공식 코드 스타일에 따른 일관된 들여쓰기가 적용되면 linting 검사를 통과할 수 있습니다.
🐰✨
╱|、
(˚ˎ。7
|、˜〵
じしˍ,)ノ
🧠 Learnings used
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Each screen should implement the MVI contract: interface [Feature]Contract with State and SideEffect, and class [Feature]Store : MviStore<State, SideEffect>
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/feature/**/*.kt : Organize feature modules (MVI screens) in the feature directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/model/**/*.kt : Organize shared data models in the model directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Preview components in the `preview/designsystem/` package
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Organize repository implementations in the data directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/data/**/*.kt : Use Room 2.7.1 with SQLite for local storage
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/**/*.kt : Organize previews for UI components in the preview/designsystem directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/domain/**/*.kt : Organize use cases and domain models in the domain directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/**/*.kt : Organize UI components and themes in the designsystem directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/**/*.kt : Organize dependency injection modules in the di directory
Learnt from: CR
PR: cchaksa/cchaksa-kmp#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-03T02:53:00.597Z
Learning: Applies to **/*.kt : Use the Kotlin official code style
| //@Preview | ||
| //@Composable | ||
| //fun TimetableEditorScreenPreview() { | ||
| // SuwikiTheme { | ||
| // TimetableEditorScreen() | ||
| // } | ||
| //} |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
주석 처리된 프리뷰 코드를 정리해주세요.
사용하지 않는 프리뷰 코드는 완전히 제거하거나 올바르게 구현해주세요.
다음과 같이 제거하세요:
-//@Preview
-//@Composable
-//fun TimetableEditorScreenPreview() {
-// SuwikiTheme {
-// TimetableEditorScreen()
-// }
-//}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| //@Preview | |
| //@Composable | |
| //fun TimetableEditorScreenPreview() { | |
| // SuwikiTheme { | |
| // TimetableEditorScreen() | |
| // } | |
| //} |
🤖 Prompt for AI Agents
In
composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
around lines 124 to 130, the preview code is commented out and unused. Remove
this commented-out preview code entirely to clean up the file, or if the preview
is needed, uncomment and implement it properly. Since the comment suggests
removal, delete these lines to tidy the code.
📌 PR 요약
🌱 작업한 내용
🌱 PR 포인트
📸 스크린샷
📮 관련 이슈
RCA 룰을 사용하여 코드 리뷰를 해주세요
R (Request Changes): 적극적으로 반영을 고려해주세요C (Comment): 웬만하면 반영해주세요A (Approve): 반영해도 좋고, 넘어가도 좋습니다. 사소한 의견입니다.Summary by CodeRabbit
신규 기능
기능 개선
버그 수정 및 기타