Skip to content

feat - 설정 탭 리뉴얼#84

Merged
mark77234 merged 14 commits intodevfrom
feat/82
May 9, 2026
Merged

feat - 설정 탭 리뉴얼#84
mark77234 merged 14 commits intodevfrom
feat/82

Conversation

@mark77234
Copy link
Copy Markdown
Collaborator

작업내용

  • 프로필 정보 카드 (이미지, 이름, 태그)
  • 이름 변경 -> 튜토리얼 페이지 참고
  • 태그 변경 -> 튜토리얼 페이지 참고
  • 프로필 이미지 변경 -> 새 페이지 작업 필요
  • 차단목록 -> 새 페이지 작업 필요
  • 푸시알림 설정 -> 전체 설정 하나만
  • 앱 버전 -> 네이티브 버전 가져오기
  • 이용약관 -> 튜토리얼 페이지 참고
  • 개인정보처리방침 -> 튜토리얼 페이지 참고
  • 웹사이트 -> 다이얼로그 및 리다이렉트
  • 로그인 OAuth 정보
  • 문의 및 피드백 -> 피드백 다이얼로그
  • 로그아웃, 회원탈퇴 -> 탈퇴 시 다이얼로그

추가 기능

  • 친구 차단 기능 추가 -> 다이어리 ... 메뉴에 추가

상세 작업

  • 프로필 카드 두 줄 되는거 대응
  • 프로필 설정 섹션 -> 페이지로 분리 (페이지가 전체가 덮여야함)
  • 기존 기능 마이그레이션 이름 변경, 태그 변경, 프로필 이미지 변경
  • 맨 아래 세로로 로그아웃, 회원탈퇴 버튼 배치
  • 회원탈퇴 다이얼로그 추가
  • 나머지 추가기능 하나씩 작업
  • 다이어리 메뉴에 사용자 차단버튼 추가
  • 차단 목록 버튼 및 페이지
  • 알림 토글 버튼
  • 앱 버전
  • 이용약관,개인정보처리방침 버튼 및 페이지
  • 웹사이트 버튼 및 다이얼로그
  • 로그인 OAuth 정보
  • 문의 및 피드백 버튼 및 다이얼로그

Copilot AI review requested due to automatic review settings May 9, 2026 14:00
@mark77234 mark77234 linked an issue May 9, 2026 that may be closed by this pull request
28 tasks
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 PolicyDocumentView and 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 mark77234 merged commit 8884570 into dev May 9, 2026
@mark77234 mark77234 changed the title Feat/82 feat - 설정 탭 리뉴얼 May 9, 2026
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): 알림카드 세로여백 조정
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat - 설정 리뉴얼

2 participants