Skip to content

Refactor: v1.3.0 추가 QA 피드백 반영 - #180

Merged
dogmania merged 4 commits into
developfrom
feat/#175-schedule-alarm-manager
Apr 17, 2026
Merged

Refactor: v1.3.0 추가 QA 피드백 반영#180
dogmania merged 4 commits into
developfrom
feat/#175-schedule-alarm-manager

Conversation

@dogmania

@dogmania dogmania commented Apr 17, 2026

Copy link
Copy Markdown
Member

작업내용

  • 캘린더 SwipeableDeleteItem 디자인 반영
  • 반복 일정 삭제 시 토스트 렌더링

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 반복 알람 삭제 시 성공 알림 메시지 추가
    • 삭제 확인 대화상자에 명확한 확인 텍스트 추가
  • Bug Fixes

    • 삭제 작업 영역의 시각적 표현 개선
  • Chores

    • 버전 코드 업데이트 (34 → 35)

@dogmania dogmania self-assigned this Apr 17, 2026
@dogmania dogmania added the REFACTOR 코드 개선 label Apr 17, 2026
@coderabbitai

coderabbitai Bot commented Apr 17, 2026

Copy link
Copy Markdown

Walkthrough

SwipeableDeleteItem 컴포넌트에 삭제 영역 텍스트 간격과 스타일을 커스터마이징 가능한 매개변수를 추가하고, 일정 삭제 성공 시 토스트 알림을 표시하는 사이드 이펙트 처리를 추가했으며, 반복 일정 삭제 관련 문자열 상수를 추가 및 업데이트하고 앱 버전을 35로 상향했습니다.

Changes

Cohort / File(s) Summary
SwipeableDeleteItem 커스터마이징
core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.kt
삭제 영역 UI 렌더링을 DeleteActionContent 컴포저블로 추상화하고, deleteTextSpacingdeleteTextStyle 매개변수를 추가하여 삭제 버튼의 텍스트 간격과 스타일을 제어 가능하게 변경.
문자열 리소스 업데이트
core/design-system/src/commonMain/kotlin/com/ondot/designsystem/theme/String.kt
반복 일정 삭제 성공 알림 문자열 SUCCESS_DELETE_REPEAT_SCHEDULE 추가 및 삭제 확인 대화 내용 DELETE_REPEAT_SCHEDULE_CONTENT 개선.
캘린더 사이드 이펙트 처리
feature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.kt, feature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/CalendarScreen.kt
일정 삭제 성공 시 토스트 알림을 표시하는 CalendarSideEffect.ShowToast 사이드 이펙트를 방출하고, CalendarScreen에서 이를 수집하여 ToastManager로 표시.
CalendarBottomSheet 구성 업데이트
feature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/component/CalendarBottomSheet.kt
SwipeableDeleteItem의 deleteTextSpacing4.dp, deleteTextStyleBodySmallR1, deleteWidth60.dp로 명시적으로 설정.
버전 업데이트
gradle.properties, iosApp/iosApp.xcodeproj/project.pbxproj
Android 및 iOS 버전 코드를 34에서 35로 업데이트.

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: 토스트 알림 표시
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 'Refactor: v1.3.0 추가 QA 피드백 반영'으로, SwipeableDeleteItem 컴포넌트 디자인 리팩터링과 반복 일정 삭제 토스트 기능 추가라는 주요 변경사항들을 포괄적으로 설명합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#175-schedule-alarm-manager

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@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: 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_SCHEDULESUCCESS_DELETE_REPEAT_SCHEDULE무조건 둘 다 발행합니다. 그런데 deleteScheduleCalendarBottomSheet에서 비반복 일정(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))
                     }

ScheduleisRepeat에 상응하는 필드가 없다면, 호출 지점(DeleteScheduleItem intent)에 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: DeleteActionContenttextColor/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

📥 Commits

Reviewing files that changed from the base of the PR and between b925015 and 18304d3.

📒 Files selected for processing (7)
  • core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/SwipeableDeleteItem.kt
  • core/design-system/src/commonMain/kotlin/com/ondot/designsystem/theme/String.kt
  • feature/calendar/src/commonMain/kotlin/com/ondot/calendar/contract/CalendarViewModel.kt
  • feature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/CalendarScreen.kt
  • feature/calendar/src/commonMain/kotlin/com/ondot/calendar/ui/component/CalendarBottomSheet.kt
  • gradle.properties
  • iosApp/iosApp.xcodeproj/project.pbxproj

@dogmania
dogmania merged commit 713ca16 into develop Apr 17, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

REFACTOR 코드 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant