Conversation
워크스루루틴 업데이트 시 알림 토스트를 표시하는 기능이 추가되었습니다. 새로운 알림 상수를 정의하고, 루틴 생성 후 알림을 발행하며, 루틴 목록 화면에서 이를 구독하여 데이터를 새로고침하고 토스트 메시지를 표시합니다. 변경 사항
시퀀스 다이어그램sequenceDiagram
participant RCV as RoutineCreationViewController
participant RCVM as RoutineCreationViewModel
participant NC as NotificationCenter
participant RLVC as RoutineListViewController
RCV->>RCVM: showUpdateRoutineToastMessageView
RCVM->>RCVM: showUpdatedRoutineToastMessageView()
Note over RCVM: 0.6초 지연 후
RCVM->>NC: post(.showUpdatedRoutineToast)
NC->>RLVC: 알림 전달
RLVC->>RLVC: 루틴 목록 새로고침
RLVC->>RLVC: updateToastMessage 표시
RLVC->>RCV: pop view controller
예상 코드 리뷰 노력🎯 2 (Simple) | ⏱️ ~12분 시
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 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.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Projects/Presentation/Sources/RoutineCreation/View/RoutineCreationViewController.swift (1)
144-162:⚠️ Potential issue | 🟠 Major버그: 새 루틴 등록 시에도 "수정 완료" 토스트가 표시됩니다.
else분기는isFromMypage == false인 모든 경우에 실행됩니다. 첫 번째init은 새 루틴 등록(updateInfo == nil)과 루틴 수정(updateInfo존재) 모두에서isFromMypage = false로 설정하므로, 새 루틴 등록 시에도showUpdateRoutineToastMessageView가 호출되어 "루틴 수정이 완료되었습니다" 토스트가 표시됩니다.예:
RoutineListViewController의emptyView에서 새 루틴을 등록하면 이 경로를 탑니다.제안: 수정 모드일 때만 업데이트 토스트를 표시
} else { - viewModel.action(input: .showUpdateRoutineToastMessageView) + if navigationTitle == "루틴 수정" { + viewModel.action(input: .showUpdateRoutineToastMessageView) + } self.navigationController?.popViewController(animated: true) }또는
updateInfo의 존재 여부를 별도 프로퍼티(isEditMode등)로 저장해두고 판별하는 것이 더 명확합니다.
🧹 Nitpick comments (2)
Projects/Presentation/Sources/RoutineList/View/RoutineListViewController.swift (1)
154-162:fetchDailyRoutine이 중복 호출될 수 있습니다.Line 158의
fetchRoutineList완료 시,fetchRoutinesResultPublisher구독(Line 123-130)에 의해fetchDailyRoutine이 이미 트리거됩니다. Line 159에서fetchDailyRoutine을 추가로 직접 호출하면 불필요한 이중 네트워크 요청이 발생할 수 있습니다.제안: 직접 호출 제거
NotificationCenter.default.publisher(for: .showUpdatedRoutineToast) .receive(on: DispatchQueue.main) .sink { [weak self] _ in guard let self else { return } self.viewModel.action(input: .fetchRoutineList) - self.viewModel.action(input: .fetchDailyRoutine) self.toastMessageView.showToastMessageView(message: updateToastMessage) } .store(in: &cancellables)Projects/Presentation/Sources/RoutineCreation/ViewModel/RoutineCreationViewModel.swift (1)
298-305: 타이밍 기반 지연(0.6초)은registerRoutine의 완료를 보장하지 않습니다.
registerRoutine()은Task내에서 비동기로 실행되지만 완료 시그널이 없습니다. 네트워크 상태에 따라 0.6초 내에 저장이 완료되지 않으면, 알림을 받은RoutineListViewController가 아직 반영되지 않은 데이터를 fetch하게 됩니다.기존
showRecommendedRoutineToastMessageView(0.1초)도 동일한 문제가 있으므로 기존 패턴의 한계이긴 하나, 이상적으로는registerRoutine완료 후 콜백/퍼블리셔를 통해 토스트를 트리거하는 것이 안전합니다.
🌁 Background
루틴 수정 후 루틴 리스트에 반영이 안되는 버그를 수정했어요 ~
추가적으로 토스트 메시지도 띄웠어요 ~~
📱 Screenshot
1. 당일루틴 수정 (반복 X)
2. 반복 루틴 수정, 당일부터 적용
3. 수정된 루틴 다음 날부터 적용
👩💻 Contents
📣 Related Issue
Summary by CodeRabbit
릴리스 노트