feat(creator-channel): 홈 빈 상태 동작을 보강한다

This commit is contained in:
Yu Sung
2026-08-14 18:41:04 +09:00
parent 2203fc9089
commit 6db26c55a8
7 changed files with 183 additions and 16 deletions

View File

@@ -23,7 +23,7 @@
- 여러 화면에서 재사용할 근거가 명확한 UI만 `SodaLive/Sources/V2/Component/**`로 올린다.
- 기존 V2 홈의 `TargetType`, Repository, ViewModel, `ApiResponse<T>` 디코딩 패턴을 따른다.
- `Long` 계열 id/count는 Swift `Int`로 통일한다.
- 빈 섹션은 section title과 empty state까지 포함해 표시하지 않는다.
- 빈 섹션은 기본적으로 표시하지 않되, 채널 후원과 팬레터는 지정된 다국어 empty state를 표시한다.
- API 실패 시 전체 화면 error state로 전환하지 않고 title bar, tab-bar, 홈 외 tab placeholder처럼 서버 데이터 없이 가능한 기본 shell을 유지한다.
- `화보` 탭, 화보 섹션, 활동의 화보 row는 구현하지 않는다.
- DM 버튼과 DM 진입은 구현하지 않는다.
@@ -593,7 +593,7 @@
- 대화하기 액션은 최신 코드 기준처럼 `CreatorChannelHeaderSection` 내부에 유지한다.
- `CreatorChannelHomeView`에서 홈 탭 콘텐츠 순서를 최신 코드 기준과 동일하게 조립한다.
- 홈 탭 콘텐츠 순서: 현재 라이브, 최신 오디오, 채널 후원, 공지, 스케줄, 오디오, 시리즈, 커뮤니티, 팬Talk, 소개, 활동, SNS.
- 각 섹션은 자신의 데이터가 없으면 숨긴다.
- 각 섹션은 자신의 데이터가 없으면 숨긴다.
- API 실패 placeholder 상태에서는 데이터 기반 섹션을 표시하지 않는다.
- 검증 기준:
- 실행 명령: `rg -n "ZStack|overlay|Color\\.clear|backgroundProgress|CreatorChannelTitleBar|CreatorChannelHeaderSection|CreatorChannelTabBar|CreatorChannelHomeView|CreatorChannelTalkActionSection|CreatorChannelCurrentLiveSection|CreatorChannelLatestAudioSection|CreatorChannelDonationSection|CreatorChannelNoticeSection|CreatorChannelScheduleSection|CreatorChannelAudioSection|CreatorChannelSeriesSection|CreatorChannelCommunitySection|CreatorChannelFanTalkSection|CreatorChannelIntroduceSection|CreatorChannelActivitySection|CreatorChannelSnsSection" SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift SodaLive/Sources/V2/CreatorChannel/Home/CreatorChannelHomeView.swift`
@@ -905,3 +905,62 @@
- 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을 완료 처리했다.
### Phase 24: 홈 후원·팬레터 empty state 다국어 보강
- [x] **Task 24.1: empty state 다국어 문구 정의**
- 대상 파일:
- 수정: `SodaLive/Sources/I18n/I18n.swift`
- 작업 내용:
- 홈 후원 문구를 한국어 `처음으로 크리에이터를\n후원해 보세요!`, 영어 `Be the first to\nsupport this creator!`, 일본어 `最初のサポートをしてみましょう!`로 정의한다.
- 홈 팬레터 문구를 한국어 `당신의 첫 응원을\n기다리고 있어요!`, 영어 `We're waiting for\nyour first fan letter!`, 일본어 `あなたの最初のファンレターを待っています!`로 정의한다.
- 팬레터 작성 버튼을 한국어 `응원남기기`, 영어 `Send a fan letter`, 일본어 `ファンレターを送る`로 정의한다.
- `\n`이 지정된 언어에서만 명시적 줄바꿈을 유지한다.
- 검증 기준:
- 실행 명령: `rg -n "처음으로 크리에이터를|Be the first to|最初のサポート|당신의 첫 응원을|We're waiting for|あなたの最初のファンレター|응원남기기|Send a fan letter|ファンレターを送る" SodaLive/Sources/I18n/I18n.swift`
- 기대 결과: 두 empty state 문구와 팬레터 작성 버튼이 `pick(ko:en:ja:)` 기반으로 확인된다.
- [x] **Task 24.2: 홈 후원 empty 문구 다국어 적용**
- 대상 파일:
- 수정: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelDonationSection.swift`
- 작업 내용:
- `CreatorChannelDonationEmptyCard`의 한국어 하드코딩 문구를 Task 24.1의 I18n 값으로 교체한다.
- 후원 버튼 문구는 기존 `I18n.ContentDetail.DonationDialog.title`을 유지하고 중복 I18n 키를 만들지 않는다.
- 후원 버튼은 `Color.white` 배경과 black 아이콘·텍스트를 유지한다.
- 검증 기준:
- 실행 명령: `rg -n "CreatorChannelDonationEmptyCard|I18n\.|처음으로 크리에이터를|ContentDetail\.DonationDialog\.title" SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelDonationSection.swift`
- 기대 결과: empty 문구는 I18n을 사용하고 후원 버튼은 기존 title을 재사용하며 한국어 문구가 View에 하드코딩되어 있지 않다.
- [x] **Task 24.3: 홈 팬레터 empty card와 작성 연결 추가**
- 대상 파일:
- 수정: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
- 수정: `SodaLive/Sources/V2/CreatorChannel/Home/CreatorChannelHomeView.swift`
- 수정: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelFanTalkSection.swift`
- 작업 내용:
- `latestFanTalk == nil`일 때 섹션을 숨기지 않고 홈 후원 empty card와 동일한 구조의 팬레터 empty card를 표시한다.
- empty card에 Task 24.1의 문구와 작성 버튼을 표시하고 기존 팬레터 작성 route로 연결한다.
- 내 크리에이터 채널에서는 empty card를 유지하되 작성 버튼을 숨긴다.
- 작성 버튼은 `Color.white` 배경과 black 아이콘·텍스트를 사용한다.
- 신규 route, API, 공용 abstraction을 추가하지 않는다.
- 검증 기준:
- 실행 명령: `rg -n "latestFanTalk|isOwnCreatorChannel|onTapWrite|creatorChannelFanTalkWrite|I18n\." SodaLive/Sources/V2/CreatorChannel/Home/CreatorChannelHomeView.swift SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelFanTalkSection.swift`
- 기대 결과: 팬레터 empty card, 기존 작성 route 연결, 내 채널 버튼 숨김 조건이 확인된다.
- [x] **Task 24.4: 정적 검사와 Debug 빌드 검증**
- 대상 파일:
- 확인: `SodaLive/Sources/I18n/I18n.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/CreatorChannelView.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/Home/CreatorChannelHomeView.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelDonationSection.swift`
- 확인: `SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelFanTalkSection.swift`
- 작업 내용:
- 세 언어 문구, 줄바꿈, 기존 route와 기존 후원 버튼 title 재사용 여부를 정적 검사한다.
- whitespace 오류와 공식 Debug 빌드를 검증한다.
- 검증 기준:
- 실행 명령: `git diff --check`
- 기대 결과: 출력 없이 exit code 0이다.
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`
- 기대 결과: `** BUILD SUCCEEDED **`.
- 2026-08-14: 사용자 인터뷰로 홈 후원·팬레터 empty state의 ko/en/ja 문구, 팬레터 작성 버튼 연결, 내 채널 버튼 숨김, 기존 후원 버튼 I18n 재사용을 확정해 Phase 24에 미완료 후속 Task로 추가했다. 이번 작업은 문서만 보강했으며 Swift 구현과 빌드는 수행하지 않았다.
- 2026-08-14: Phase 24 구현을 완료했다. 홈 후원·팬레터 empty 문구에 ko/en/ja I18n을 적용하고, 팬레터 작성 버튼을 기존 작성 route에 연결했으며 내 채널에서는 버튼을 숨겼다. 홈 두 CTA는 `Color.white` 배경과 black 아이콘·텍스트를 사용한다. 23개 정적 계약, `git diff --check`, iPhone 16 Pro 시뮬레이터 `SodaLive-dev` Debug 빌드가 통과했고, 15개 ko/en/ja 캡처와 두 독립 시각 리뷰에서 차단 항목 없이 PASS를 확인했다.