feat(creator-channel): 차단·신고 메뉴를 연결한다

This commit is contained in:
Yu Sung
2026-08-14 16:41:33 +09:00
parent 080f36e690
commit 4b209dcd72
4 changed files with 197 additions and 1 deletions

View File

@@ -850,3 +850,58 @@
- 기대 결과: `** BUILD SUCCEEDED **`.
- 2026-08-03: Phase 22 구현을 완료했다. RED 확인으로 `rg -n "CreatorChannelHeaderSection\(|onTapFollowerCount|followerList\(userId: creator\.creatorId\)|followerCount\(creator\.followerCount\.comma\(\)\)" "SodaLive/Sources/V2/CreatorChannel"`를 먼저 실행해 헤더 생성과 팔로워 수 표시만 있고 `onTapFollowerCount``.followerList(userId: creator.creatorId)` 연결이 없음을 확인했다. `CreatorChannelHeaderSection`에는 `onTapFollowerCount` closure와 팔로워 수 텍스트 tap gesture만 추가했고, `CreatorChannelView`에서는 내 채널일 때만 `AppState.shared.setAppStep(step: .followerList(userId: creator.creatorId))`를 호출하도록 연결했다. GREEN 확인으로 `rg -n "onTapFollowerCount|followerList\(userId: creator\.creatorId\)|FollowerListView\(userId:" "SodaLive/Sources/V2/CreatorChannel" "SodaLive/Sources/ContentView.swift"`가 헤더 콜백, 내 채널 라우팅, 기존 `FollowerListView` destination을 모두 찾았다. `git diff --check`는 출력 없이 통과했고, `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build``** BUILD SUCCEEDED **`로 완료됐다. 프로젝트에 테스트 번들 타깃이 없어 XCTest는 추가/실행하지 못했고, 로그인된 내 채널 계정이 필요한 실제 기기 탭 수동 검증은 수행하지 않았다.
### Phase 23: title bar 사용자 차단/신고 메뉴 연결
- [x] **Task 23.1: 기존 프로필 신고 메뉴와 액션 흐름 연결**
- 대상 파일:
- 수정: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
- 수정: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelViewModel.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/Home/Models/CreatorChannelHomeResponse.swift`
- 확인: `SodaLive/Sources/Report/ProfileReportMenuView.swift`
- 확인: `SodaLive/Sources/Explorer/Profile/UserProfileView.swift`
- 확인: `SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift`
- 작업 내용:
- `CreatorChannelView.titleBar`의 빈 `onTapMore`를 메뉴 표시 상태와 연결한다.
- 다른 크리에이터 채널에서만 기존 `ProfileReportMenuView`를 최상위 `ZStack` overlay에 표시한다.
- 메뉴는 `사용자 차단하기`, `사용자 신고하기`, `프로필 신고하기`를 제공하고 `.sheet`를 사용하지 않는다.
- 사용자 차단은 `UserBlockConfirmDialogView`, 사용자 신고는 `UserReportDialogView`, 프로필 신고는 `ProfileReportDialogView`를 재사용한다.
- 차단과 신고 요청은 기존 `UserProfileViewModel.userBlock(userId:)``report(type:userId:reason:)`의 Repository 흐름을 `CreatorChannelViewModel`에 필요한 만큼만 적용한다.
- 사용자 차단 API 성공 callback에서 `CreatorChannelView`의 기존 `dismiss()`를 호출해 진입 이전 화면으로 돌아간다.
- `CreatorChannelHomeResponse`에 차단 상태를 추가하지 않고, `ProfileReportMenuView`는 이번 요구사항의 고정 `사용자 차단하기` 항목으로 사용한다.
- 차단 성공 후 `AppState` navigation path를 초기화하거나 `.main` route를 강제로 설정하지 않는다.
- 새 BottomSheet View, 새 route, 새 API를 만들지 않는다.
- 검증 기준:
- 실행 명령: `rg -n "onTapMore|ProfileReportMenuView|UserBlockConfirmDialogView|UserReportDialogView|ProfileReportDialogView|userBlock\(userId:|report\(type:" SodaLive/Sources/V2/CreatorChannel SodaLive/Sources/Report/ProfileReportMenuView.swift`
- 기대 결과: 빈 `onTapMore`가 제거되고 기존 메뉴/다이얼로그 및 차단/신고 요청 연결과 차단 성공 시 `dismiss()` 호출이 확인된다. `CreatorChannelHomeResponse`에는 차단 상태가 추가되지 않는다.
- 수동 확인: 다른 크리에이터 채널에서 더보기 버튼을 누르면 하단 메뉴가 표시되고 DIM 탭으로 닫히며, 내 채널에서는 더보기 메뉴가 표시되지 않는다. 사용자 차단 성공 시 현재 채널이 닫히고 진입 이전 화면으로 돌아간다.
- [x] **Task 23.2: overlay 계약과 Debug 빌드 검증**
- 대상 파일:
- 확인: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelViewModel.swift`
- 작업 내용:
- 변경 전 RED로 `onTapMore`가 빈 closure이고 메뉴 연결이 없음을 확인한다.
- 변경 후 메뉴가 `.sheet`가 아닌 `CreatorChannelView`의 overlay 계층에 포함되는지 확인한다.
- whitespace 오류를 확인하고 공식 Debug 빌드를 실행한다.
- 검증 기준:
- 실행 명령: `git diff --check`
- 기대 결과: 출력 없이 exit code 0이다.
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`
- 기대 결과: `** BUILD SUCCEEDED **`.
- 사용자 수동 UI 검토:
- [x] 다른 크리에이터 채널의 title bar에 더보기 버튼이 표시된다.
- [x] 더보기 버튼을 누르면 화면 하단에 `사용자 차단하기`, `사용자 신고하기`, `프로필 신고하기`가 표시된다.
- [x] 메뉴 바깥 DIM 영역을 누르면 메뉴가 닫힌다.
- [x] `사용자 차단하기`를 누르면 대상 크리에이터 닉네임이 포함된 차단 확인창이 표시된다.
- [x] 차단 확인창에서 취소하면 현재 크리에이터 채널에 머문다.
- [x] 차단에 성공하면 현재 크리에이터 채널만 닫히고 직전 화면으로 돌아간다. 직전 화면이 다른 크리에이터 채널이어도 허용한다.
- [x] `사용자 신고하기`를 누르면 신고 사유를 선택할 수 있는 사용자 신고창이 표시된다.
- [x] `프로필 신고하기`를 누르면 프로필 신고 확인창이 표시된다.
- [x] 내 크리에이터 채널에서는 title bar 더보기 버튼과 차단/신고 메뉴가 표시되지 않는다.
- 2026-08-14: `UserProfileView`의 기존 `ProfileReportMenuView` overlay와 차단/신고 다이얼로그 연결을 확인했다. `CreatorChannelView.titleBar``onTapMore: {}` 누락을 같은 흐름에 연결하는 후속 Phase 23을 추가했으며, 새 문서나 새 BottomSheet View를 만들지 않는 것으로 범위를 정했다. 코드 구현과 빌드 검증은 아직 수행하지 않았다.
- 2026-08-14: 사용자 제안에 따라 차단 성공 시 현재 `CreatorChannelView`의 기존 `dismiss()`로 진입 이전 화면에 복귀하도록 Task 23.1을 보강했다. 화면을 즉시 닫으므로 `CreatorChannelHomeResponse` 차단 상태와 차단 해제 메뉴는 추가하지 않으며, navigation path 초기화나 강제 홈 route도 제외한다.
- 2026-08-14: 사용자 요청에 따라 UI 검증은 자동 캡처·자동 시각 리뷰 대신 Task 23.2의 사용자 수동 UI 검토 체크리스트로 수행한다. 체크리스트 확인 전까지 Phase 23 UI 검증은 완료로 표시하지 않는다.
- 2026-08-14: Task 23.1 구현과 독립 코드 리뷰를 완료했다. `CreatorChannelView`의 빈 `onTapMore`를 기존 `ProfileReportMenuView`와 세 신고/차단 다이얼로그에 연결했고, `CreatorChannelViewModel`에는 기존 Repository를 사용하는 차단/신고 요청만 추가했다. 차단 성공 callback은 현재 채널의 `dismiss()`만 호출한다. GREEN source contract와 `git diff --check`가 exit 0이었고, `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`에서 `** BUILD SUCCEEDED **`를 확인했다. Task 23.2는 사용자 수동 UI 검토 9개 항목이 남아 있어 미완료로 유지한다.
- 2026-08-14: 사용자가 Task 23.2의 수동 UI 검토 9개 항목을 모두 확인했다. 자동 검증과 사용자 수동 검토가 모두 완료되어 Phase 23을 완료 처리했다.