Conversation
Closed
28 tasks
There was a problem hiding this comment.
Pull request overview
This PR introduces a full “Settings” experience in MyCollection and extends social features by adding user blocking (from feed and via a blocklist screen), along with policy document viewing and basic app/account info utilities.
Changes:
- Added a new Settings flow (profile edits, blocklist, notification toggle, app version, policy pages, website redirect dialog, feedback submission, logout/withdrawal UI).
- Implemented user blocking APIs + feed integration (block from feed menu, fetch/unblock via blocklist).
- Refactored policy document presentation into a reusable
PolicyDocumentViewand added a new random feed search screen.
Reviewed changes
Copilot reviewed 34 out of 35 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| KillingPartTests/InitialSetupFlowTests.swift | Updates MockUserService to conform to new block-related UserServicing requirements. |
| KillingPart/Views/Screens/Setup/components/PolicyDocumentView.swift | Adds reusable policy document viewer with line-based styling. |
| KillingPart/Views/Screens/Setup/components/PolicyDocumentContent.swift | Adjusts embedded policy/terms text content. |
| KillingPart/Views/Screens/Setup/components/PolicyAgreementScreen.swift | Switches policy sheet to use the new PolicyDocumentView. |
| KillingPart/Views/Screens/Main/Social/FeedSection/FeedSectionView.swift | Resets paging state on feed count changes; wires block action from feed cards. |
| KillingPart/Views/Screens/Main/Social/FeedSection/Components/SocialFeedPageCardView.swift | Adds “차단하기” action to the feed card menu. |
| KillingPart/Views/Screens/Main/Randoms/RandomSearchView.swift | Introduces a random-feed browsing screen backed by FeedViewModel(feedSource: .random). |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/SettingsView.swift | Implements the new Settings UI (profile, blocklist entry, notifications, app/account info, feedback, dialogs). |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/ServiceTermView.swift | Adds Settings navigation destination for service terms. |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/PrivacyPolicyView.swift | Adds Settings navigation destination for privacy policy. |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/ProfileSettings/NameEdit.swift | Adds name edit subpage + shared SettingsSubpageHeader. |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/ProfileSettings/TagEdit.swift | Adds tag edit subpage. |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/ProfileSettings/ProfileImageEdit.swift | Adds profile image edit subpage using PhotosPicker. |
| KillingPart/Views/Screens/Main/My/MyCollection/Settings/BlocklistView.swift | Adds blocklist UI with search, paging, and unblock confirmation sheet. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/ProfileSettingSection.swift | Removes the previous in-place profile settings section (replaced by navigation-based Settings). |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileTagSectionView.swift | Removes legacy tag editing UI component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileTagEditActionRowView.swift | Removes legacy tag edit action row component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileSettingsInfoRowView.swift | Removes legacy profile settings info row component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileSettingsInfoCardView.swift | Removes legacy profile settings info card component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileSettingsHeaderView.swift | Removes legacy profile settings header component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileSettingPageContainerView.swift | Removes legacy profile settings container component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionProfileImageColumnView.swift | Removes legacy profile image column component. |
| KillingPart/Views/Screens/Main/My/MyCollection/ProfileSetting/components/MyCollectionAccountActionButton.swift | Removes legacy logout/withdrawal button entrypoint. |
| KillingPart/Views/Screens/Main/My/MyCollection/MyCollectionView.swift | Replaces old screen-mode transitions with navigationDestination to SettingsView. |
| KillingPart/Views/Screens/Main/My/MyCollection/Components/ProfileCard/MyCollectionProfileStatItemView.swift | Improves layout robustness for long stat labels/values. |
| KillingPart/Views/Screens/Main/My/MyCollection/Components/ProfileCard/MyCollectionProfileCard.swift | Adjusts tag/stat layout to avoid two-line overflow issues. |
| KillingPart/Views/Screens/Main/My/MyCollection/Components/ProfileCard/MyCollectionEditProfileButton.swift | Changes edit button to “설정” with gear icon. |
| KillingPart/ViewModels/Social/FeedViewModel.swift | Adds blocking state + blockUser flow; injects UserServicing. |
| KillingPart/ViewModels/My/MyCollection/Settings/SettingsViewModel.swift | Adds settings logic for feedback submission and notification setting fetch/update. |
| KillingPart/ViewModels/My/MyCollection/Settings/ProfileSettings/ProfileSettingViewModel.swift | Adds name draft/update + refactors normalization/validation helpers. |
| KillingPart/ViewModels/My/MyCollection/Settings/BlocklistViewModel.swift | Adds blocklist paging/search/unblock logic. |
| KillingPart/Services/UserService.swift | Extends UserServicing + implements block/unblock/fetch-blocked endpoints. |
| KillingPart/Services/SurveyService.swift | Adds feedback (survey) submission service + error mapping. |
| KillingPart/Services/NotificationService.swift | Adds notification setting fetch/update service + error mapping. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| .stroke(Color.kpPrimary, lineWidth: 1) | ||
| } | ||
|
|
||
| Text("2~16자, 한글/영문/숫자 사용 가능") |
| } | ||
|
|
||
| private var isCompleteEnabled: Bool { | ||
| hasNameChanges && !viewModel.isProcessing |
Comment on lines
+10
to
+16
| private var hasTagChanges: Bool { | ||
| guard let user = viewModel.user else { return false } | ||
| return viewModel.normalizedTag(viewModel.tagDraft) != viewModel.normalizedTag(user.tag) | ||
| } | ||
|
|
||
| private var isCompleteEnabled: Bool { | ||
| hasTagChanges && !viewModel.isProcessing |
| .stroke(Color.kpPrimary, lineWidth: 1) | ||
| } | ||
|
|
||
| Text("영문 소문자 4자 이상, 30자 이내,특수문자 일부[.][_]") |
Comment on lines
+250
to
+264
| Button(action: onConfirm) { | ||
| Group { | ||
| if isUnblockingUser { | ||
| ProgressView() | ||
| .tint(.white) | ||
| } else { | ||
| Text("삭제") | ||
| .font(AppFont.paperlogy6SemiBold(size: 15)) | ||
| } | ||
| } | ||
| .foregroundStyle(.white) | ||
| .frame(maxWidth: .infinity) | ||
| .frame(height: 52) | ||
| .background(Color(hex: "#FF676F"), in: RoundedRectangle(cornerRadius: 12, style: .continuous)) | ||
| } |
Comment on lines
+44
to
+52
| func updateNotificationSetting(_ isEnabled: Bool) async { | ||
| guard !isUpdatingNotificationSetting else { return } | ||
|
|
||
| let previousValue = isNotificationEnabled | ||
| isNotificationEnabled = isEnabled | ||
| isUpdatingNotificationSetting = true | ||
| notificationSettingErrorMessage = nil | ||
| defer { isUpdatingNotificationSetting = false } | ||
|
|
Comment on lines
+108
to
+115
| private var styledLines: [StyledLine] { | ||
| let lines = normalizedDocumentText.components(separatedBy: .newlines) | ||
| var result: [StyledLine] = [] | ||
| var previousStyle: LineStyle = .blank | ||
|
|
||
| for (index, rawLine) in lines.enumerated() { | ||
| let trimmed = rawLine.trimmingCharacters(in: .whitespacesAndNewlines) | ||
| let baseStyle = style(for: trimmed) |
mark77234
added a commit
that referenced
this pull request
May 9, 2026
* feat - 푸시알림 작업 (#80) * feat(FCM): FCM Token 발급 및 등록/삭제 API 연동 * fix(FCM): 기존 컨벤션 적용 * fix(fcm): 테스트버전 체크 * feat - 구글로그인 추가 (#83) * feat(Google): 구글로그인 추가 * feat(1.1.10): 버전 업데이트 * Feat/82 (#84) * fix(ProfileCard): Tag, StatItem FixedSize Added * feat(Settings): 프로필 설정 섹션 -> 프로필 페이지로 마이그레이션 * feat(Setting): 디자인 업데이트 * feat(Setting): NameEdit, TagEdit UI Update and SettingsView Space Added * feat(Block): Block Api Settings * feat(Blocklist): 차단 목록 추가 및 차단 해제 API 추가 및 연동 및 페이지 추가 * feat: 다이얼로그, 바텀시트 디자인 업데이트 * feat(AppInfo,Account): 앱 정보 섹션 및 계정 섹션 추가 * feat(Settings): 카드 크기 동일하게 구현 * feat(Survey): 문의 카드 추가 * feat(Survey): 문의 카드 디자인 개선 * feat(Notification): 알림설정 추가 * feat(Settings): 차단리스트, 이름설정, 프로필이미지, 태그설정 페이지 헤더 크기 줄이기 * feat(Noti): 알림카드 세로여백 조정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
작업내용
추가 기능
상세 작업