feat(creator): 채널 표시와 상대 시간을 정리한다

This commit is contained in:
2026-08-26 16:30:03 +09:00
parent 9939910c71
commit 1f88d721d7
48 changed files with 679 additions and 233 deletions
@@ -0,0 +1,97 @@
# Phase 1 크리에이터 채널 표시 계약 리뷰
## 1. 리뷰 정보
| 항목 | 내용 |
|---|---|
| 리뷰 대상 | Phase 1 / `P1-T1`~`P1-GATE` |
| 기준 commit 또는 working tree | 현재 working tree |
| 리뷰 일자 | 2026-08-26 |
| 리뷰어 | Sisyphus / Oracle |
| 기준 문서 | `prd.md`, `plan-task.md` |
| 리뷰 상태 | 판정 완료 |
## 2. 리뷰 목적과 범위
### 목적
- FanTalk report locale, empty count, Donation badge 숫자-only 계약이 PRD와 일치하는지 확인한다.
- 완료 체크박스와 실제 코드·test·검증 기록이 일치하는지 확인한다.
### 포함 범위
- 코드: FanTalk adapter, Donation card binder, Donation item layout, ko/en/ja strings
- 테스트: FanTalk locale/action/ViewModel, Donation layout/action/mapper/ViewModel
- 문서: PRD Phase 1 요구사항, `plan-task.md` Phase 1
- 수동 검증: 사용자 직접 확인한 FanTalk report 문구 변경
### 제외 범위
- 상대 시간 통합 Phase 2
- 계측 test, 기기·에뮬레이터 UI 조작, 스크린샷, 시각 QA
## 3. 판정 기준
| 심각도 | 기준 |
|---|---|
| Blocker | 완료 판정을 무효화하는 요구사항 위반 |
| High | 주요 기능 회귀 |
| Medium | 제한 조건의 표시 오류 |
| Low | 문서·유지보수성 문제 |
## 4. 검토한 근거
### 문서와 코드
- 요구사항: `FAN-001`, `FAN-002`, `DON-001`, `DON-002`, `DON-003`, `LOC-001`, `LOC-002`
- 계획: `P1-T1`, `P1-T2`, `P1-T3`, `P1-GATE`
- 코드: `CreatorChannelFanTalkAdapter.kt`, `CreatorChannelDonationCardBinder.kt`, `item_creator_channel_donation.xml`, `values*/strings.xml`
- 테스트: `CreatorChannelFanTalkAdapterLocaleTest`, `CreatorChannelFanTalkActionTest`, `CreatorChannelFanTalkViewModelTest`, `CreatorChannelDonationFragmentLayoutTest`, `CreatorChannelDonationActionTest`, `CreatorChannelDonationMapperTest`, `CreatorChannelDonationViewModelTest`
### 실행 환경
```text
OS: macOS / darwin
검증 방식: Gradle local unit test, resource merge, Kotlin compile, ktlint, git diff check
제외: androidTest, device/emulator, screenshot, visual QA
```
### 실행한 검증
| 명령 또는 검증 | 결과 | 핵심 증거 |
|---|---|---|
| `CreatorChannelFanTalkAdapterLocaleTest` RED | 성공 | `expected:<[Report]> but was:<[신고]>` |
| `CreatorChannelDonationFragmentLayoutTest` RED | 성공 | `expected:<1,000[]> but was:<1,000[캔]>` |
| FanTalk/Donation focused tests | 성공 | `BUILD SUCCESSFUL` |
| Phase 1 Gate 6개 명령 | 성공 | FanTalk.*, Donation.*, resource merge, compile, ktlint, diff check PASS |
| 사용자 수동 확인 | 성공 | 신고 버튼 문구 변경 확인 |
## 5. 발견 사항 요약
확정 발견 사항 없음.
## 6. 발견 사항 상세
확정 발견 사항 없음. FanTalk report는 현재 `root.context` locale로 재바인딩되고, Donation badge는 숫자만 표시하며 fallback message는 유지된다. Empty count 계약은 production 변경 없이 기존 ViewModel test와 Fragment source 대조로 확인됐다.
## 7. 확정 항목의 plan·goal 전환
전환 항목 없음.
## 8. 리뷰 종료 판정
| 판정 항목 | 결과 | 근거 |
|---|---|---|
| 리뷰 범위 전체 확인 | 충족 | Phase 1 code/test/docs 검토 |
| 후보 항목 판정 완료 | 충족 | 확정 발견 사항 없음 |
| 확정 항목 plan 반영 | 해당 없음 | 전환 항목 없음 |
| 보류 항목의 담당·재개 조건 기록 | 해당 없음 | 보류 항목 없음 |
| 검증 명령과 결과 기록 | 충족 | `plan-task.md` Task별 기록과 Verification Log |
**최종 결론:** 확정 발견 사항 없음
**남은 항목:** 없음
## 9. 수정 후 검증 기록
수정 항목 없음.
@@ -0,0 +1,103 @@
# Phase 2 상대 시간 통합 리뷰
## 1. 리뷰 정보
| 항목 | 내용 |
|---|---|
| 리뷰 대상 | Phase 2 / `P2-T1`~`P2-GATE` |
| 기준 commit 또는 working tree | 현재 working tree |
| 리뷰 일자 | 2026-08-26 |
| 리뷰어 | Sisyphus / Oracle |
| 기준 문서 | `prd.md`, `plan-task.md` |
| 리뷰 상태 | 판정 완료 |
## 2. 리뷰 목적과 범위
### 목적
- `v2` 크리에이터 채널 상대 시간이 raw UTC와 표시 View/Activity Context의 공통 formatter 경로로 통일됐는지 확인한다.
- 완료 체크박스와 실제 코드·test·검증 기록이 일치하는지 확인한다.
### 포함 범위
- 코드: FanTalk, Community, Donation, Home 표시부와 `AppDI.kt``v2` ViewModel 등록
- 테스트: FanTalk/Community/Donation mapper, ViewModel, adapter/activity locale, pagination/action 회귀, `RelativeTimeFormatterTest`
- 문서: PRD Phase 2 요구사항, `plan-task.md` Phase 2
- 수동 검증: 없음
### 제외 범위
- `RelativeTimeFormatter.kt` 구현 변경
- 레거시 화면 상대 시간 호출부
- 계측 test, 기기·에뮬레이터 UI 조작, 스크린샷, 시각 QA
## 3. 판정 기준
| 심각도 | 기준 |
|---|---|
| Blocker | 완료 판정을 무효화하는 요구사항 위반 |
| High | 주요 기능 회귀 또는 DI/navigation 오류 |
| Medium | 특정 화면의 locale 표시 오류 |
| Low | 문서·유지보수성 문제 |
## 4. 검토한 근거
### 문서와 코드
- 요구사항: `TIME-001`~`TIME-004`, `LOC-001`, `LOC-002`
- 계획: `P2-T1`, `P2-T2`, `P2-T3`, `P2-GATE`
- 코드: FanTalk/Community/Donation UI models, mappers, ViewModels, adapters, Activities, `AppDI.kt`, Home section adapter
- 테스트: FanTalk.*, Community.*, Donation.*, `CreatorChannelHomeMapperTest`, `RelativeTimeFormatterTest`
### 실행 환경
```text
OS: macOS / darwin
검증 방식: Gradle local unit test, resource merge, Kotlin compile, ktlint, git diff check, rg inventory
제외: androidTest, device/emulator, screenshot, visual QA
```
### 실행한 검증
| 명령 또는 검증 | 결과 | 핵심 증거 |
|---|---|---|
| FanTalk RED | 성공 | `createdAtUtc`/생성자 compile 실패 |
| Community RED | 성공 | `relativeTimeTextFormatter`, `createdAtUtc`, `createdAtText` compile 실패 |
| Donation RED | 성공 | old mapper 인자와 `createdAtUtc` compile 실패 |
| `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.common.RelativeTimeFormatterTest" --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"` | 성공 | 최종 단독 재실행 `BUILD SUCCESSFUL` |
| `./gradlew :app:mergeDebugResources` | 성공 | `BUILD SUCCESSFUL` |
| `./gradlew :app:compileDebugKotlin` | 성공 | `BUILD SUCCESSFUL` |
| `./gradlew :app:ktlintCheck` | 성공 | line length 수정 후 `BUILD SUCCESSFUL` |
| `git diff --check` | 성공 | 출력 없음 |
| `rg -n "UtcRelativeTimeTextFormatter|relativeTimeTextFormatter\.format" app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel` | 성공 | 출력 없음 |
| `rg -n "formatUtcRelativeTimeText" app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel` | 성공 | FanTalk, Community, Donation, Home 표시부 포함 |
## 5. 발견 사항 요약
확정 발견 사항 없음.
## 6. 발견 사항 상세
확정 발견 사항 없음. FanTalk·Community·Donation presentation data는 raw UTC를 보존하고, 각 adapter/Activity가 현재 View Context로 `formatUtcRelativeTimeText()`를 호출한다. Home section의 기존 bind-time formatter 호출은 유지됐다. `RelativeTimeFormatter.kt`와 레거시 호출부는 수정하지 않았다.
## 7. 확정 항목의 plan·goal 전환
전환 항목 없음.
## 8. 리뷰 종료 판정
| 판정 항목 | 결과 | 근거 |
|---|---|---|
| 리뷰 범위 전체 확인 | 충족 | Phase 2 code/test/docs 검토 |
| 후보 항목 판정 완료 | 충족 | 확정 발견 사항 없음 |
| 확정 항목 plan 반영 | 해당 없음 | 전환 항목 없음 |
| 보류 항목의 담당·재개 조건 기록 | 해당 없음 | 보류 항목 없음 |
| 검증 명령과 결과 기록 | 충족 | `plan-task.md` Task별 기록과 Verification Log |
**최종 결론:** 확정 발견 사항 없음
**남은 항목:** 없음
## 9. 수정 후 검증 기록
수정 항목 없음.