Refactor: v1.3.0 추가 QA 피드백 반영 - #180
Conversation
WalkthroughSwipeableDeleteItem 컴포넌트에 삭제 영역 텍스트 간격과 스타일을 커스터마이징 가능한 매개변수를 추가하고, 일정 삭제 성공 시 토스트 알림을 표시하는 사이드 이펙트 처리를 추가했으며, 반복 일정 삭제 관련 문자열 상수를 추가 및 업데이트하고 앱 버전을 35로 상향했습니다. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant CalendarScreen
participant CalendarViewModel
participant Database
participant ToastManager
User->>CalendarScreen: 삭제 버튼 클릭
CalendarScreen->>CalendarViewModel: deleteSchedule(scheduleId)
CalendarViewModel->>Database: 일정 삭제
Database-->>CalendarViewModel: 성공
CalendarViewModel->>CalendarViewModel: 마커 범위 조회
CalendarViewModel->>CalendarViewModel: ShowToast(SUCCESS_DELETE_REPEAT_SCHEDULE)
CalendarViewModel-->>CalendarScreen: sideEffect 방출
CalendarScreen->>ToastManager: show(message, ToastType.INFO)
ToastManager->>User: 토스트 알림 표시
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
iosApp/iosApp.xcodeproj/project.pbxproj (2)
605-605:⚠️ Potential issue | 🟡 Minor위젯 익스텐션 Release 구성도 버전 업데이트 필요
Release 구성에서도
CURRENT_PROJECT_VERSION이 24로 유지되고 있습니다. Line 573의 Debug 구성과 동일한 이슈입니다. Line 618의MARKETING_VERSION도 1.2.0으로 메인 앱과 불일치합니다.위젯이 이번 v1.3.0 릴리스에 포함된다면, Debug와 Release 구성 모두에서 버전을 35로, 마케팅 버전을 1.3.0으로 업데이트해야 합니다.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@iosApp/iosApp.xcodeproj/project.pbxproj` at line 605, 위젯 익스텐션의 Release 구성에서 CURRENT_PROJECT_VERSION과 MARKETING_VERSION이 업데이트되지 않았으니, 위젯 익스텐션의 Release 및 Debug 구성 모두에서 CURRENT_PROJECT_VERSION 값을 35로 변경하고 MARKETING_VERSION 값을 1.3.0으로 맞춰 수정하세요 (검색에 사용할 식별자: CURRENT_PROJECT_VERSION, MARKETING_VERSION, 위젯 익스텐션 구성 섹션).
573-573:⚠️ Potential issue | 🟡 Minor위젯 익스텐션 버전을 메인 앱과 동기화해야 합니다
OnDotAlarmWidgetExtension타겟의 버전이 메인 앱과 불일치합니다:
CURRENT_PROJECT_VERSION: 24 (메인 앱: 35)MARKETING_VERSION: 1.2.0 (메인 앱: 1.3.0)위젯 익스텐션은 5개의 Swift 파일(OnDotAlarmWidget, OnDotAlarmWidgetControl, OnDotAlarmWidgetLiveActivity, OnDotAlarmWidgetBundle, AppIntent)을 포함하고 있으며, 타이머 제어, Live Activity, App Intents 등의 기능이 구현되어 있습니다. v1.3.0 릴리스에 포함되는 경우, 메인 앱과 버전을 일치시켜야 합니다.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@iosApp/iosApp.xcodeproj/project.pbxproj` at line 573, The OnDotAlarmWidgetExtension target's version keys are out of sync with the main app; update the extension's CURRENT_PROJECT_VERSION to 35 and MARKETING_VERSION to 1.3.0 (the same values as the main app) where those build settings are defined for the OnDotAlarmWidgetExtension target; also ensure the extension's Info.plist (CFBundleVersion and CFBundleShortVersionString) and the target's Build Settings reflect these same values so the widget and main app versions are identical.feature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.kt (1)
421-434:⚠️ Potential issue | 🔴 Critical중복 토스트 발행 — 반복 일정이 아닌 경우에도 "반복 알람이 삭제되었습니다" 토스트가 뜹니다.
현재 성공 브랜치는
SUCCESS_DELETE_SCHEDULE과SUCCESS_DELETE_REPEAT_SCHEDULE을 무조건 둘 다 발행합니다. 그런데deleteSchedule은CalendarBottomSheet에서 비반복 일정(onDelete 즉시 호출) 경로와 반복 일정(다이얼로그 확인 후onDelete(id, false)) 경로 모두에서 호출되므로, 비반복 일정 삭제 시에도 "반복 알람이 삭제되었습니다." 토스트가 함께 표시되고, 두 토스트가 연달아 쌓이는 UX 문제가 발생합니다.PR 목적("반복 일정 삭제 시 토스트 렌더링 추가")을 감안하면
targetSchedule.isRepeat여부에 따라 분기하는 것이 맞아 보입니다.🛠 제안 수정
when (val result = scheduleRepository.deleteScheduleAppResult(scheduleId)) { is AppResult.Success -> { - emitEffect( - CalendarSideEffect.ShowToast( - SUCCESS_DELETE_SCHEDULE, - ToastType.INFO, - ), - ) + val message = + if (targetSchedule.isRepeat) SUCCESS_DELETE_REPEAT_SCHEDULE + else SUCCESS_DELETE_SCHEDULE + emitEffect(CalendarSideEffect.ShowToast(message, ToastType.INFO)) // 마커 데이터는 UI에서 optimistic 계산이 어려워서 다시 조회 getScheduleMarkersInRange(selectedDate, false) - - emitEffect(CalendarSideEffect.ShowToast(SUCCESS_DELETE_REPEAT_SCHEDULE, ToastType.INFO)) }
Schedule에isRepeat에 상응하는 필드가 없다면, 호출 지점(DeleteScheduleItemintent)에isRepeat플래그를 함께 전달하는 방향도 대안입니다.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.kt` around lines 421 - 434, The success branch currently emits both SUCCESS_DELETE_SCHEDULE and SUCCESS_DELETE_REPEAT_SCHEDULE unconditionally; change it to emit SUCCESS_DELETE_REPEAT_SCHEDULE only when the deleted schedule is a repeat (check targetSchedule.isRepeat), otherwise emit only SUCCESS_DELETE_SCHEDULE and call getScheduleMarkersInRange(selectedDate, false) as before; if Schedule has no isRepeat field, update the DeleteScheduleItem intent to carry an isRepeat flag and use that flag in the success handling instead (symbols to touch: scheduleRepository.deleteScheduleAppResult, getScheduleMarkersInRange, targetSchedule.isRepeat or the new isRepeat flag on DeleteScheduleItem).
🧹 Nitpick comments (1)
core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.kt (1)
180-204:DeleteActionContent의textColor/iconSize를 상위 파라미터로 노출 고려.
SwipeableDeleteItem에서는 해당 두 값을 커스터마이즈할 수 없어 항상Gray0/24.dp로 고정됩니다. 현재 호출부에서 요구가 없다면 그대로 두어도 무방하지만, 향후 요구가 생기면SwipeableDeleteItem시그니처까지 함께 확장해야 하는 점만 인지하면 됩니다.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.kt` around lines 180 - 204, DeleteActionContent currently hardcodes textColor=Gray0 and iconSize=24.dp which prevents SwipeableDeleteItem from customizing them; update DeleteActionContent signature to accept textColor and iconSize (keep defaults Gray0 and 24.dp) and then propagate those new parameters through the SwipeableDeleteItem call site (e.g., the SwipeableDeleteItem composable or wherever DeleteActionContent is invoked) so callers can pass custom colors/sizes without changing internal defaults.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@core/design-system/src/commonMain/kotlin/com/ondot/designsystem/theme/String.kt`:
- Line 82: The new constant SUCCESS_DELETE_REPEAT_SCHEDULE uses "반복 알람이
삭제되었습니다." which is inconsistent with SUCCESS_DELETE_SCHEDULE ("일정이 삭제되었습니다.");
update SUCCESS_DELETE_REPEAT_SCHEDULE to match terminology (e.g., change its
value to "반복 일정이 삭제되었습니다.") so both constants use "일정" unless a distinction
between 알람 and 일정 is intentionally required, and ensure you update any
references to SUCCESS_DELETE_REPEAT_SCHEDULE if they rely on the previous
wording.
- Line 183: The string constant DELETE_REPEAT_SCHEDULE_CONTENT contains an extra
space before the second newline which causes a trailing blank when
center-aligned in OnDotDialog; open the constant
(DELETE_REPEAT_SCHEDULE_CONTENT) in String.kt and remove the unwanted space
immediately before the second "\n" so the text reads without "도 "→"도\n" (or
otherwise ensure no trailing whitespace before newlines) to restore correct
visual alignment in OnDotDialog.
---
Outside diff comments:
In
`@feature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.kt`:
- Around line 421-434: The success branch currently emits both
SUCCESS_DELETE_SCHEDULE and SUCCESS_DELETE_REPEAT_SCHEDULE unconditionally;
change it to emit SUCCESS_DELETE_REPEAT_SCHEDULE only when the deleted schedule
is a repeat (check targetSchedule.isRepeat), otherwise emit only
SUCCESS_DELETE_SCHEDULE and call getScheduleMarkersInRange(selectedDate, false)
as before; if Schedule has no isRepeat field, update the DeleteScheduleItem
intent to carry an isRepeat flag and use that flag in the success handling
instead (symbols to touch: scheduleRepository.deleteScheduleAppResult,
getScheduleMarkersInRange, targetSchedule.isRepeat or the new isRepeat flag on
DeleteScheduleItem).
In `@iosApp/iosApp.xcodeproj/project.pbxproj`:
- Line 605: 위젯 익스텐션의 Release 구성에서 CURRENT_PROJECT_VERSION과 MARKETING_VERSION이
업데이트되지 않았으니, 위젯 익스텐션의 Release 및 Debug 구성 모두에서 CURRENT_PROJECT_VERSION 값을 35로
변경하고 MARKETING_VERSION 값을 1.3.0으로 맞춰 수정하세요 (검색에 사용할 식별자:
CURRENT_PROJECT_VERSION, MARKETING_VERSION, 위젯 익스텐션 구성 섹션).
- Line 573: The OnDotAlarmWidgetExtension target's version keys are out of sync
with the main app; update the extension's CURRENT_PROJECT_VERSION to 35 and
MARKETING_VERSION to 1.3.0 (the same values as the main app) where those build
settings are defined for the OnDotAlarmWidgetExtension target; also ensure the
extension's Info.plist (CFBundleVersion and CFBundleShortVersionString) and the
target's Build Settings reflect these same values so the widget and main app
versions are identical.
---
Nitpick comments:
In
`@core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.kt`:
- Around line 180-204: DeleteActionContent currently hardcodes textColor=Gray0
and iconSize=24.dp which prevents SwipeableDeleteItem from customizing them;
update DeleteActionContent signature to accept textColor and iconSize (keep
defaults Gray0 and 24.dp) and then propagate those new parameters through the
SwipeableDeleteItem call site (e.g., the SwipeableDeleteItem composable or
wherever DeleteActionContent is invoked) so callers can pass custom colors/sizes
without changing internal defaults.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 58ef3038-f106-4444-ab36-7101badc4749
📒 Files selected for processing (7)
core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.ktcore/design-system/src/commonMain/kotlin/com/ondot/designsystem/theme/String.ktfeature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.ktfeature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/CalendarScreen.ktfeature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/component/CalendarBottomSheet.ktgradle.propertiesiosApp/iosApp.xcodeproj/project.pbxproj
작업내용
Summary by CodeRabbit
릴리스 노트
New Features
Bug Fixes
Chores