Conversation
개요편집 버튼이 삭제되지 않은 루틴에만 조건부로 표시되도록 수정되었으며, ToastView가 선택적 메시지 매개변수를 수용하도록 개선되었습니다. 삭제된 루틴 토스트 알림 기능을 지원하기 위해 프로토콜에 isDeleted 속성이 추가되었고, 뷰 컨트롤러가 알림 구독을 통해 토스트 메시지를 표시합니다. 변경 사항
시퀀스 다이어그램sequenceDiagram
participant User
participant RoutineListVC as RoutineListViewController
participant RoutineListVM as RoutineListViewModel
participant NotificationCenter
participant ToastView
User->>RoutineListVC: 루틴 삭제 작동
RoutineListVC->>RoutineListVM: deleteRoutine 호출
RoutineListVM->>RoutineListVM: 루틴 삭제 실행
RoutineListVM->>RoutineListVM: showDeletedRoutineToastMessageView 호출
RoutineListVM->>RoutineListVM: 0.6초 지연
RoutineListVM->>NotificationCenter: .showDeletedRoutineToast 발송
NotificationCenter->>RoutineListVC: 알림 수신
RoutineListVC->>ToastView: showToastMessageView(message) 호출
ToastView->>User: 삭제 완료 토스트 메시지 표시
코드 리뷰 예상 소요 시간🎯 3 (보통) | ⏱️ ~20분 시
🚥 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.
Actionable comments posted: 0
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/RoutineList/ViewModel/RoutineListViewModel.swift (1)
76-82:⚠️ Potential issue | 🟡 Minor
routines.removeAll()로 인한 일시적 빈 상태 가능성.
removeAll()과 루프 완료 사이에 사용자가 날짜를 선택하면fetchDailyRoutine()이 빈 딕셔너리를 읽어 빈 화면이 잠깐 표시될 수 있습니다.routines딕셔너리에 대한 접근이Task(백그라운드)와 메인 스레드에서 동시에 발생할 수 있는 점도 참고해 주세요. 현재 PR에서 새로 도입된 패턴은 아니지만removeAll()추가로 경합 윈도우가 넓어졌습니다.
🧹 Nitpick comments (4)
Projects/Presentation/Sources/Common/Component/ToastView.swift (1)
65-69: 기존 API를 깨지 않으면서 메시지 동적 업데이트를 지원하는 깔끔한 확장입니다.한 가지 참고:
self.message프로퍼티는configureAttribute()이후에는 다시 읽히지 않으므로, Line 67의self.message = message할당은 현재로선 불필요합니다.messageLabel.text만 업데이트하면 충분합니다. 다만 향후 확장을 위한 방어적 코딩으로 보면 괜찮습니다.Projects/Presentation/Sources/RoutineList/ViewModel/RoutineListViewModel.swift (1)
121-123: 토스트 표시 타이밍이 데이터 갱신과 분리되어 있습니다.
fetchRoutines()는 내부적으로 새로운Task를 생성하므로 비동기로 실행됩니다.showDeletedRoutineToastMessageView()는 fetch 완료를 기다리지 않고 바로 호출되며, 내부의 0.6초 딜레이는 네트워크 속도에 따라 불안정합니다. 네트워크가 느리면 토스트가 먼저 표시되고 이전 데이터가 아직 화면에 남아있을 수 있습니다.
fetchRoutinesResultSubject가true를 emit한 후에 토스트를 표시하는 것이 더 안정적입니다.♻️ 제안: fetch 완료 후 토스트 표시
ViewModel에서 삭제 성공 시 별도 플래그를 설정하고,
fetchRoutinesResultPublisher구독 쪽에서 토스트를 트리거하는 방식을 고려해보세요:private func deleteRoutine(isDeleteAllRoutines: Bool) { guard let routineId = selectedRoutine.value?.id else { deleteRoutineResultSubject.send(false) return } Task { do { if isDeleteAllRoutines { try await routineRepository.deleteAllRoutine(routineId: routineId) } else { try await routineRepository.deleteDailyRoutine(routineId: routineId) } deleteRoutineResultSubject.send(true) + shouldShowDeleteToast = true fetchRoutines() - showDeletedRoutineToastMessageView() } catch { deleteRoutineResultSubject.send(false) } } }그리고
fetchRoutinesResultPublisher구독에서 플래그를 확인하여 토스트를 표시하면 fetch 완료와 정확히 동기화됩니다.Projects/Presentation/Sources/RoutineList/View/RoutineListViewController.swift (2)
144-151:NotificationCenter구독이 VC 인스턴스 범위를 넘어설 수 있습니다.
NotificationCenter는 글로벌 브로드캐스트이므로, 만약 네비게이션 스택에RoutineListViewController가 여러 개 존재하게 되면 모든 인스턴스에서 토스트가 표시됩니다. 현재 앱 플로우에서는 문제없을 가능성이 높지만, ViewModel의 기존 CombineOutput패턴을 활용하면 더 안전합니다 (예:deleteRoutineResultPublisher구독 시점에서 토스트 트리거). 이 부분은 ViewModel 쪽 리뷰 코멘트와도 연관됩니다.
32-33: 빈 문자열로 초기화된ToastView참고.
ToastView(message: "")로 초기화 후 실제 표시 시showToastMessageView(message:)로 메시지를 전달하고 있어 동작에는 문제없습니다.deleteToastMessage를 초기화 시점에 바로 전달하면 코드 의도가 더 명확해질 수 있습니다.♻️ 제안
- private let deleteToastMessage: String = "삭제가 완료되었습니다." - private var toastMessageView = ToastView(message: "") + private var toastMessageView = ToastView(message: "삭제가 완료되었습니다.")이 경우 notification handler에서
showToastMessageView()를 message 파라미터 없이 호출할 수 있습니다.
🌁 Background
루틴 삭제하기 기능 관련 QA 대응했어용 ~~
📱 Screenshot
1. 당일 루틴 삭제 후 토스트 메시지 확인
2. 반복 루틴 삭제 후 토스트 메시지 · 루틴 상태 확인
👩💻 Contents
📣 Related Issue
Summary by CodeRabbit
릴리스 노트
New Features
개선 사항