feat: 독서 기록 완료 / 기록 상세 화면 구현#114
Conversation
|
""" Walkthrough이 PR은 독서 기록 완료 후 안내 다이얼로그를 표시하고, 기록 확인 화면을 구현합니다. 이를 위해 다이얼로그 컴포넌트의 이미지 삽입 및 커스텀 콘텐츠 기능이 추가되고, NoteCompletion 관련 뷰와 뷰컨트롤러가 새로 도입되었습니다. 또한, 관련 레이아웃 및 연결 로직이 반영되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant NoteViewController
participant BKDialogViewController
participant NoteCoordinator
participant NoteCompletionViewController
User->>NoteViewController: 독서 기록 완료 액션
NoteViewController->>BKDialogViewController: 완료 다이얼로그 present
User->>BKDialogViewController: '기록 보러가기' 버튼 선택
BKDialogViewController->>NoteViewController: dismiss & delegate 호출
NoteViewController->>NoteCoordinator: didCompleteNoteCreation()
NoteCoordinator->>NoteCompletionViewController: 모달 present
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes해당 이슈(#113) 목적과 직접적으로 관련 없는 기능적 변경사항은 발견되지 않았습니다. Possibly related PRs
Suggested reviewers
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift (1)
47-70: 레이아웃 제약 조건 설정을 개선해주세요.대부분의 제약 조건이 적절하지만,
pageLabel의 너비 제약 조건이 불필요할 수 있습니다:-pageLabel.snp.makeConstraints { - $0.width.equalToSuperview() -}스택뷰의
alignment = .center설정과 함께 이미 적절한 레이아웃이 구성되므로, 명시적인 너비 제약 조건이 필요하지 않을 수 있습니다.src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (1)
18-23: 외부 플레이스홀더 이미지 URL 사용 검토하드코딩된 외부 URL을 플레이스홀더로 사용하고 있습니다. 네트워크 연결이 없거나 해당 서비스에 문제가 생길 경우를 고려해보세요.
번들 내 기본 이미지를 대안으로 제공하는 것을 고려해보세요:
var placeholderImage: URL? { switch self { - case .regular: return URL(string: "https://dummyimage.com/68x100/2f9647/ffffff") - case .compact: return URL(string: "https://dummyimage.com/46x68/2f9647/ffffff") + case .regular: return Bundle.main.url(forResource: "book-placeholder-regular", withExtension: "png") + case .compact: return Bundle.main.url(forResource: "book-placeholder-compact", withExtension: "png") } }
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (16)
src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift(4 hunks)src/Projects/BKDesign/Project.swift(1 hunks)src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift(1 hunks)src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift(5 hunks)src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift(2 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift(3 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift(2 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift(2 hunks)src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Search/View/SearchResultCell.swift(1 hunks)
🧰 Additional context used
🧠 Learnings (14)
📓 Common learnings
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#94
File: src/Projects/BKData/Sources/Repository/DefaultBookRepository.swift:15-40
Timestamp: 2025-07-21T05:16:18.481Z
Learning: clxxrlove는 Reed-iOS 프로젝트에서 기능 구현 시 우선순위를 명확하게 설정한다. 기본 기능 구현을 먼저 완료하고, 에러 처리나 안정성 개선은 이후 단계에서 진행하는 것을 선호한다.
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#56
File: src/Projects/BKPresentation/Sources/Constant/PresentationKeys.swift:3-5
Timestamp: 2025-07-07T13:53:13.006Z
Learning: clxxrlove prefers using enum over struct for constants namespace due to better runtime performance, memory layout, and compiler optimizations. Enum prevents instantiation at compile time without needing private init().
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift:52-53
Timestamp: 2025-07-28T10:44:32.256Z
Learning: clxxrlove는 EmotionRegistrationView에서 someEmotion1-4 케이스들을 임시로 구현했으며, 해당하는 그래픽 디자인이 나온 후 수정할 예정이라고 명시했다. 감정 선택 UI는 디자인 에셋 완성 후 구현하는 것을 선호한다.
src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift (2)
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift (1)
Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.
src/Projects/BKDesign/Project.swift (1)
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Resources/Assets.xcassets/chevron-right.imageset/Contents.json:1-26
Timestamp: 2025-07-08T17:15:59.793Z
Learning: In the BKDesign project, all image assets referenced in Contents.json files are properly included in the repository with the correct 1x, 2x, and 3x variants. The chevron-right icon and other design system icons are complete and ready for use.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (1)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (4)
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.
Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.
Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (3)
Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (3)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Learnt from: clxxrlove
PR: #56
File: src/Projects/BKPresentation/Sources/AuthFlow/ViewModel/LoginViewModel.swift:109-111
Timestamp: 2025-07-07T13:47:32.784Z
Learning: The LoginViewModel's authenticateWithToken case in src/Projects/BKPresentation/Sources/AuthFlow/ViewModel/LoginViewModel.swift is test code and not important for implementation according to the user.
Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift (3)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift (2)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift:52-53
Timestamp: 2025-07-28T10:44:32.256Z
Learning: clxxrlove는 EmotionRegistrationView에서 someEmotion1-4 케이스들을 임시로 구현했으며, 해당하는 그래픽 디자인이 나온 후 수정할 예정이라고 명시했다. 감정 선택 UI는 디자인 에셋 완성 후 구현하는 것을 선호한다.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift (3)
Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (3)
Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.
src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (4)
Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.
Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Extensions/UIColor+.swift:50-92
Timestamp: 2025-07-08T17:17:37.703Z
Learning: BKDesign 프로젝트에서 UIColor+ 확장의 시맨틱 컬러 메서드들(.bkContentColor, .bkBorderColor, .bkDividerColor, .bkBaseColor)이 현재 다크 모드에서도 라이트 모드 색상을 반환하는 것은 의도적인 구현입니다. 아직 다크 모드가 구현되지 않았지만, 미래의 다크 모드 지원을 위한 코드 구조로 준비되어 있습니다.
Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.
🧬 Code Graph Analysis (5)
src/Projects/BKDesign/Project.swift (1)
src/Tuist/ProjectDescriptionHelpers/TargetDependency+External.swift (1)
external(26-28)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (1)
src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (1)
didCompleteNoteCreation(26-31)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (5)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (2)
layoutSubviews(54-59)setupView(61-68)src/Projects/BKDesign/Sources/Components/Button/BKButtonSize.swift (1)
cornerRadius(111-120)src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
setupView(68-73)src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (1)
setupView(39-43)src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
addSubviews(7-9)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (5)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (2)
layoutSubviews(58-62)setupView(64-67)src/Projects/BKDesign/Sources/Components/Button/BKButtonSize.swift (1)
cornerRadius(111-120)src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
setupView(68-73)src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (1)
setupView(39-43)src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
addSubviews(7-9)
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (1)
src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
addSubviews(7-9)
🪛 SwiftLint (0.57.0)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift
[Warning] 114-114: TODOs should be resolved (- 기능 연결 이후 수정)
(todo)
⏰ 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 (41)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
77-77: 레이아웃 제약조건 개선 승인
containerView의 제약조건을edges.equalToSuperview()로 변경한 것은 적절한 개선입니다. 이전에는 bottom 제약이 없어 레이아웃이 불완전했을 수 있는데, 이제 컨테이너가 슈퍼뷰 전체 영역을 정확히 차지하게 되어 레이아웃 안정성이 향상됩니다.src/Projects/BKDesign/Project.swift (1)
18-19: Kingfisher 의존성 추가가 적절합니다.이미지 로딩 및 캐싱을 위한 Kingfisher 라이브러리 추가가 새로운 UI 컴포넌트들을 지원하는데 적합합니다.
src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift (3)
26-28: 추가된 콘텐츠 스타일 프로퍼티가 잘 구현되었습니다.다이얼로그에 이미지나 커스텀 뷰를 추가할 수 있는 유연한 구조입니다.
156-170: 이미지 비율 계산 로직이 적절합니다.UIImageView의 이미지 비율을 추출하고 적절한 contentMode를 설정하는 로직이 잘 구현되었습니다.
188-189: 레이아웃 상수 추가가 좋습니다.하드코딩된 값 대신 명명된 상수를 사용하여 유지보수성이 향상되었습니다.
src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift (1)
116-117: 클로저 타입 포맷팅이 개선되었습니다.Swift 스타일 가이드에 맞게 공백이 추가되었습니다.
src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (2)
20-20: Coordinator 패턴 적용이 적절합니다.Delegate 대신 Coordinator를 사용하여 네비게이션 로직이 더 명확해졌습니다.
26-31: 노트 작성 완료 화면 전환이 잘 구현되었습니다.fullScreen 모달 프레젠테이션을 사용한 것이 완료 화면의 중요성을 강조하는데 적합합니다.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (3)
58-62: 동적 corner radius 설정이 개선되었습니다.layoutSubviews에서 버튼 높이에 따라 corner radius를 설정하여 다양한 화면 크기에서도 일관된 모양을 유지합니다.
65-65: 뷰 계층 구조가 단순화되었습니다.containerView를 제거하고 직접 서브뷰를 추가하여 불필요한 중첩을 줄였습니다.
76-77: 제약조건 설정이 명시적으로 개선되었습니다.horizontalEdges 대신 leading/trailing을 사용하여 더 명확한 의도를 표현합니다.
Also applies to: 83-84
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift (3)
6-12: 클래스 구조와 네비게이션 설정이 적절합니다.
BaseViewController<NoteCompletionView>를 상속하고 네비게이션 바 스타일과 타이틀을 올바르게 설정했습니다.
33-35: dismiss 액션 구현이 적절합니다.모달 프레젠테이션에 맞는
dismiss(animated: true)사용이 올바릅니다.
14-26: interactivePopGestureRecognizer 비활성화 로직 검토 결과
NoteViewController와NoteCompletionViewController모두 동일하게
navigationController?.interactivePopGestureRecognizer?.isEnabled = false를 적용하고 있어 패턴이 일관적입니다.- optional chaining(
?.)으로 네비게이션 컨트롤러가 없을 경우 아무 동작도 하지 않으므로 안전합니다.- 모달 프레젠테이션에서는 실제로 스와이프 팝 제스처가 동작하지 않아 비활성화 로직이 무해하며, UI 일관성 차원에서도 유지해도 무방합니다.
따라서 별도의 네비게이션 컨트롤러 존재 여부 확인 로직 추가나
interactivePopGestureRecognizer비활성화 제거는 필요하지 않습니다.src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (3)
54-59: 동적 코너 반경 설정이 적절합니다.
layoutSubviews에서 버튼 높이에 따른 동적 코너 반경 설정은 다른 뷰(SentenceAppreciationView.swift)와 일관된 패턴입니다.masksToBounds와clipsToBounds모두 설정한 것도 올바릅니다.
62-67: 서브뷰 추가 방식이 개선되었습니다.
addSubviews확장 메서드를 사용한 직접적인 서브뷰 추가는 더 간결하고 명확합니다.
84-84: 제약 조건 명시적 설정이 좋습니다.
horizontalEdges에서 명시적인leading.trailing로의 변경은 더 명확한 의도를 나타냅니다.Also applies to: 91-91
src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift (2)
20-24: 테스트 버튼 추가가 적절합니다.이미지가 포함된 다이얼로그 테스트를 위한 버튼 구현이 올바릅니다.
102-117: 새로운 다이얼로그 기능 테스트 구현이 우수합니다.
suppliedContentStyle을 사용한 이미지 포함 다이얼로그 테스트가 잘 구현되었습니다. 마스코트 이미지를 상단에 배치하는 것이 사용자 경험에 적절합니다.src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (3)
12-12: Coordinator 패턴으로의 전환이 적절합니다.delegate에서 coordinator로의 변경은 더 나은 아키텍처 패턴입니다.
56-56: 사용자 경험 개선을 위한 다이얼로그 도입이 우수합니다.즉시 네비게이션 팝 대신 확인 다이얼로그를 표시하는 것은 더 나은 UX를 제공합니다.
72-93: 다이얼로그 구현에서 메모리 누수 방지가 잘 되었습니다.클로저에서
[weak self]사용으로 retain cycle을 방지했습니다. 두 버튼의 액션이 적절히 구분되어 있습니다:
- 닫기: 다이얼로그 해제 후 뷰컨트롤러 팝
- 기록 보러가기: 다이얼로그 해제 후 coordinator를 통한 새 화면 전환
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift (4)
7-33: UI 컴포넌트 구조가 잘 설계되었습니다.뷰 계층 구조와 스택뷰 설정이 적절합니다. 레이블 설정과 스타일링도 일관성 있게 구현되었습니다.
34-39: 뷰 설정 메서드가 올바릅니다.서브뷰 추가 순서와 계층 구조가 논리적으로 구성되었습니다.
72-78: 데이터 적용 메서드가 깔끔합니다.문장과 페이지 정보를 받아서 레이블에 적용하는 로직이 간단하고 명확합니다.
81-88: 레이아웃 상수 정의가 체계적입니다.BK 디자인 시스템의 상수들을 일관성 있게 사용했습니다.
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (3)
85-87: 레이아웃 설정 순서 개선이 적절합니다.
makeInnerViews()호출을setupLayout()마지막으로 이동한 것은 제약 조건 설정 후 뷰 구성을 완료하는 올바른 순서입니다.
94-110: 스크롤뷰 레이아웃 구조 개선이 좋습니다.중간 컨테이너 뷰를 제거하고 직접 pageView를 스크롤뷰에 추가하는 방식으로 뷰 계층을 단순화했습니다. 제약 조건과 우선순위 설정도 적절합니다.
114-120: 임시 구현 확인 완료 – 폼 수집 로직 준비됨
createFormData()가 현재 플레이스홀더를 반환하고 있으나, 아래 서브뷰들이 모두RegistrationFormProvidable을 구현하고 있어 실제 데이터 수집 로직 활성화만 남아 있습니다.
- SentenceRegistrationView:
registrationForm()구현- EmotionRegistrationView:
registrationForm()구현- SentenceAppreciationView:
registrationForm()구현추후
createFormData()에서 주석 처리된 부분을 풀고
.makeNoteForm(from: forms)호출로 전환하면 정상 동작할 것으로 보입니다.
현 단계에서는 뼈대 우선 구현 후 세부 로직 추가라는 선호사항에도 부합하므로 이 부분은 승인 처리하겠습니다.src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (3)
7-26: 잘 구조화된 UI 컴포넌트입니다.
BaseView를 상속하고 적절한 하위 뷰들을 구성했습니다.BKBookSummaryView의 재사용과 일관된 스택뷰 구성이 좋습니다.
28-47: 플레이스홀더 데이터 임시 구현 확인현재 하드코딩된 플레이스홀더 데이터를 사용하고 있습니다. 주석으로 임시 데이터임을 명시한 것이 좋습니다.
49-81: 제약 조건 설정이 적절합니다.SnapKit을 사용한 오토레이아웃 구성이 깔끔하고, 디자인 시스템의 상수들을 활용한 것이 일관성 있습니다.
src/Projects/BKPresentation/Sources/MainFlow/Search/View/SearchResultCell.swift (2)
14-31: 컴포넌트 재사용으로 인한 훌륭한 리팩토링입니다.개별 UI 요소들을
BKBookSummaryView로 교체하여 코드가 훨씬 깔끔해졌습니다. 제약 조건도 단순화되어 유지보수성이 향상되었습니다.
37-53: 셀 재사용 및 구성 로직이 개선되었습니다.
prepareForReuse()에서clearView()호출과configure메서드에서BKBookSummaryView로의 위임이 적절합니다. 공개 인터페이스를 유지하면서 구현을 단순화한 좋은 예시입니다.src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift (3)
7-29: 감정 아이콘 임시 구현 상태 확인학습된 정보에 따르면
someEmotion1-4케이스들은 그래픽 디자인 완성 후 수정 예정인 임시 구현입니다. 현재 모든 감정에 동일한 마스코트 이미지를 사용하는 것이 이를 반영합니다.
31-93: UI 컴포넌트 구성이 잘 설계되었습니다.
BaseView를 상속하고 적절한 스택뷰 구조로 감상평, 감정, 생성일을 표시하는 구성이 깔끔합니다. 디자인 시스템의 컬러와 폰트를 일관되게 사용한 것도 좋습니다.
95-150: 제약 조건과 상수 정의가 적절합니다.SnapKit을 사용한 레이아웃 구성과
LayoutConstantsenum을 통한 상수 관리가 일관된 패턴을 따르고 있습니다. 감정 아이콘 크기와 여백 설정도 적절합니다.src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (4)
7-24: 스타일 열거형 설계가 우수합니다.두 가지 스타일(
regular,compact)에 따른 썸네일 크기와 플레이스홀더 이미지 URL을 제공하는 구조가 깔끔합니다.
26-27: intrinsicContentSize 관련 문서화가 좋습니다.높이가 컨텍스트에 따라 달라질 수 있다는 점을 명확히 문서화한 것이 개발자에게 도움이 됩니다.
79-102: 이미지 로딩 및 구성 로직이 적절합니다.Kingfisher를 사용한 비동기 이미지 로딩과 라벨 설정이 잘 구현되었습니다. 썸네일의 라운드 코너 처리도 적절합니다.
140-146: 라벨 우선순위 설정이 훌륭합니다.작성자, 구분자, 출판사 라벨의 content hugging과 compression resistance 우선순위를 적절히 설정하여 텍스트 말줄임과 레이아웃이 올바르게 동작하도록 했습니다.
| titleStack.snp.makeConstraints { | ||
| $0.top.equalToSuperview() | ||
| $0.horizontalEdges.equalToSuperview() | ||
| $0.leading.trailing.equalToSuperview() |
There was a problem hiding this comment.
P4) leading.trailing == directionalHorizontalEdges여서 directionalHorizontalEdges라고 사용해도 됩니다!(사실 길이는 거기서 거기지만...)
There was a problem hiding this comment.
사실 레이아웃이 너무 안잡혀서 온갖짓을 다 해보다가 이래저래 해본거같아요 ...
|
|
||
| override func viewWillAppear(_ animated: Bool) { | ||
| super.viewWillAppear(animated) | ||
| self.tabBarController?.tabBar.isHidden = true |
There was a problem hiding this comment.
P4) tabBar나 navigationBar hidden하는 코드가 viewController 마다 반복되는데 추후에 이 부분 코드 스타일 바꿔보면 좋겠습니다(지금은 pass...)
🔗 관련 이슈
📘 작업 유형
📙 작업 내역
-> 작은 기기(SE)에서 스크롤 작동 확인, Constraint 충돌 제거 완료
🧪 테스트 내역
🎨 스크린샷 또는 시연 영상 (선택)
iPhone 13 Pro Max, CancelconfirmationDialog 반영 (실기기)
ScreenRecording_07-29-2025.14-53-47_1.MP4
iPhone 13 Pro Max (실기기)
ScreenRecording_07-29-2025.15-07-50_1.MP4
iPhone SE (3rd, 시뮬레이터)
Simulator.Screen.Recording.-.iPhone.SE.3rd.generation.-.2025-07-29.at.14.36.17.mp4
✅ PR 체크리스트
Summary by CodeRabbit
신규 기능
기능 개선
버그 수정/스타일
리팩터
기타