Skip to content

Feature/#39 시간표 수정 화면 - #41

Merged
BEEEAM-J merged 4 commits into
developfrom
feature/#39-timetable-edit
Aug 3, 2025
Merged

Feature/#39 시간표 수정 화면#41
BEEEAM-J merged 4 commits into
developfrom
feature/#39-timetable-edit

Conversation

@BEEEAM-J

@BEEEAM-J BEEEAM-J commented Aug 3, 2025

Copy link
Copy Markdown
Member

📌 PR 요약

🌱 작업한 내용

  • 시간표 수정 화면 작업

🌱 PR 포인트

  • 기존에는 시간표 수정 시 PopBackStack 동작을 수행했는데, 피그마 확인해보니 토스트만 표시하는거 같아서 PopBackStack 동작 안하도록 수정했습니다.

📸 스크린샷

스크린샷
https://github.com/user-attachments/assets/68dc21a6-31a2-4b1a-996b-66008d121af4

📮 관련 이슈

RCA 룰을 사용하여 코드 리뷰를 해주세요

R (Request Changes) : 적극적으로 반영을 고려해주세요
C (Comment) : 웬만하면 반영해주세요
A (Approve) : 반영해도 좋고, 넘어가도 좋습니다. 사소한 의견입니다.

Summary by CodeRabbit

  • 신규 기능

    • 시간표 이름 입력 화면이 추가되어 시간표 생성 시 이름을 입력할 수 있습니다.
    • 시간표 편집 화면에서 학기 선택을 위한 바텀시트 UI가 도입되었습니다.
  • 기능 개선

    • 시간표 생성 및 편집 플로우가 분리되어, 학기 선택 후 이름 입력 단계를 거치도록 변경되었습니다.
    • 텍스트필드에 클리어 버튼이 추가되고, 활성화 상태에 따라 스타일이 개선되었습니다.
    • 시간표 편집 시 변경사항이 있을 때만 저장 버튼이 활성화됩니다.
    • 저장 완료 시 안내 토스트가 표시됩니다.
  • 버그 수정 및 기타

    • 불필요한 코드와 오타가 정정되었습니다.
    • UI 요소들의 스타일과 색상이 일부 개선되었습니다.

- TimetableEditor 관련 파일 및 클래스 이름을 TimetableNameInput으로 변경
- 관련 로직 및 UI 수정
- Navigation 경로 및 함수 이름 변경
- `TimetableEditorScreen` 및 관련 ViewModel, Contract를 추가하여 시간표 이름 및 학기를 편집할 수 있는 기능을 구현했습니다.
- `CchRegularTextField`에 `onClickClearButton` 파라미터를 추가하여 텍스트필드 클리어 기능을 구현했습니다.
- `TimetableEditorScreen`과 `TimetableNameInputScreen`에서 `CchRegularTextField`의 클리어 버튼 클릭 이벤트를 처리하도록 수정했습니다.
- `TextFieldClearButton`의 아이콘 크기 및 색상을 변경했습니다.
- `CchRegularTextField`에 `isActive` 파라미터를 추가하여 텍스트 필드 활성화 상태를 제어합니다.
- 시간표 이름 입력 및 편집, 강의 정보 입력 화면에서 텍스트 필드 활성화 상태를 적용합니다.
- 시간표 편집 화면에서 시간표 이름 또는 학기가 변경되었을 때만 저장 버튼이 활성화되도록 수정합니다.
@BEEEAM-J
BEEEAM-J requested a review from lluke0 August 3, 2025 05:40
@BEEEAM-J BEEEAM-J self-assigned this Aug 3, 2025
@BEEEAM-J BEEEAM-J linked an issue Aug 3, 2025 that may be closed by this pull request
@coderabbitai

coderabbitai Bot commented Aug 3, 2025

Copy link
Copy Markdown

Walkthrough

시간표 수정 화면의 기능이 대폭 확장되었습니다. 새로운 시간표 이름 입력 화면 및 ViewModel이 추가되고, 네비게이션 경로가 분리 및 확장되었습니다. 시간표 수정 UI와 상태 관리가 대폭 리팩터링되었으며, 세부 컴포넌트(버튼, 텍스트필드 등)의 디자인 및 인터랙션도 변경되었습니다.

Changes

Cohort / File(s) Change Summary
Timetable Name Input 신규 기능
.../timetablenameinput/TimetableNameInputContract.kt,
.../timetablenameinput/TimetableNameInputScreen.kt,
.../timetablenameinput/TimetableNameInputViewModel.kt,
.../di/PresentationModules.kt
시간표 이름 입력 화면 및 상태/사이드이펙트/뷰모델 신규 추가, DI 등록
네비게이션 및 화면 연결
.../App.kt,
.../MainNavigator.kt,
.../presentation/timetable/navigation/TimetableNavigation.kt
시간표 네비게이션 경로 분리 및 이름 입력 화면 경로 추가, 함수명 및 파라미터 정정
시간표 수정 화면/상태 리팩터링
.../timetableeditor/TimetableEditorContract.kt,
.../timetableeditor/TimetableEditorScreen.kt,
.../timetableeditor/TimetableEditorViewModel.kt
시간표 수정 상태에 이전 값/시트 상태 등 추가, 버튼 활성화 로직 개선, 세부 UI/UX 및 토스트/시트 처리 추가
학기 선택 화면 및 연결
.../semesterselect/SemesterSelectContract.kt,
.../semesterselect/SemesterSelectScreen.kt,
.../semesterselect/SemesterSelectViewModel.kt
네비게이션 및 사이드이펙트 명칭을 timetable editor → timetable name input으로 변경
셀 에디터 및 리스트 관련
.../celleditor/CellEditorScreen.kt,
.../timetablelist/TimetableListContract.kt,
.../timetablelist/TimetableListScreen.kt,
.../timetablelist/TimetableListViewModel.kt
텍스트필드 isActive 파라미터 적용, 불필요 import/들여쓰기 정리
디자인 시스템 컴포넌트
.../component/container/CchSelectionButton.kt,
.../component/button/TextFieldClearButton.kt,
.../component/textfield/CchRegularTextField.kt,
.../preview/designsystem/Container.kt
선택 버튼/클리어 버튼/텍스트필드 디자인, 파라미터, 명칭, 색상 등 리팩터링 및 프리뷰 적용

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant TimetableListScreen
    participant SemesterSelectScreen
    participant TimetableNameInputScreen
    participant TimetableEditorScreen

    User->>TimetableListScreen: 시간표 생성/수정 버튼 클릭
    TimetableListScreen->>SemesterSelectScreen: 학기 선택 화면 이동
    SemesterSelectScreen->>TimetableNameInputScreen: 학기 선택 후 이름 입력 화면 이동
    TimetableNameInputScreen->>TimetableEditorScreen: 이름 입력 및 시간표 생성/수정 완료 시 에디터 화면 이동
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Assessment against linked issues

Objective Addressed Explanation
시간표 수정 화면의 신규 구현 및 UI/UX 개선 (#39)
시간표 이름 입력 단계 분리 및 네비게이션 반영 (#39)
학기 선택, 이름 입력, 수정 상태 관리 및 버튼 활성화 로직 (#39)
디자인 시스템 컴포넌트 일관성 및 리팩터링 (#39)

Suggested reviewers

  • jinukeu

Poem

🐰
시간표 이름을 톡,
학기도 쏙쏙~
시트가 열리고 버튼이 빛나네!
토스트가 울리며 저장도 완벽,
토끼도 춤추는 새 UI의 탄생!
🗓️✨

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#39-timetable-edit

🪧 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.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4cc17bd and a00a5fc.

📒 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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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 the preview/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, use CCHaksaTheme for new features
Prefer typography styles over hardcoded text styles

Files:

  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/celleditor/CellEditorScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/MainNavigator.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorViewModel.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/navigation/TimetableNavigation.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetableeditor/TimetableEditorContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputViewModel.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/di/PresentationModules.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/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.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/semesterselect/SemesterSelectContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablelist/TimetableListContract.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputContract.kt
  • composeApp/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.kt
  • composeApp/src/androidMain/kotlin/com/chukchukhaksa/mobile/preview/designsystem/Container.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/button/TextFieldClearButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/container/CchSelectionButton.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/common/designsystem/component/textfield/CchRegularTextField.kt
  • composeApp/src/commonMain/kotlin/com/chukchukhaksa/mobile/presentation/timetable/timetablenameinput/TimetableNameInputScreen.kt
  • composeApp/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.kt
  • composeApp/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가 추가되었습니다.

size modifier를 위한 import가 적절히 추가되었습니다.


9-9: dp unit import가 올바릅니다.

크기 지정을 위한 dp unit 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에 추가된 isActiveonClickClearButton 콜백은 적절한 개선입니다. 저장소 내 모든 호출이 명명된 인자를 사용하고 있어 매개변수 순서가 변경되어도 기존 코드에 전혀 영향을 주지 않습니다.

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)

@coderabbitai coderabbitai Bot Aug 3, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 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.

Suggested change
// 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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

임시 유지

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@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()))

@coderabbitai coderabbitai Bot Aug 3, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 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.

Suggested change
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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

ktlint 오류

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@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

Comment on lines +124 to +130
//@Preview
//@Composable
//fun TimetableEditorScreenPreview() {
// SuwikiTheme {
// TimetableEditorScreen()
// }
//}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 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.

Suggested change
//@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.

@BEEEAM-J
BEEEAM-J merged commit ed8af7b into develop Aug 3, 2025
1 of 2 checks passed
@BEEEAM-J
BEEEAM-J deleted the feature/#39-timetable-edit branch August 3, 2025 05:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 시간표 수정 화면

1 participant