docs(home): 크리에이터 랭킹 검증을 기록한다

This commit is contained in:
2026-06-08 15:22:48 +09:00
parent 21e94af8d1
commit 28423d81bb

View File

@@ -64,7 +64,7 @@
### Phase 1: 기존 구조 확인과 작업 경계 고정 ### Phase 1: 기존 구조 확인과 작업 경계 고정
- [ ] **Task 1.1: 기존 홈/랭킹 위젯/DI 구조 확인** - [x] **Task 1.1: 기존 홈/랭킹 위젯/DI 구조 확인**
- 확인: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt` - 확인: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt`
- 확인: `app/src/main/res/layout/fragment_v2_main_home.xml` - 확인: `app/src/main/res/layout/fragment_v2_main_home.xml`
- 확인: `app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt` - 확인: `app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt`
@@ -74,7 +74,7 @@
- 확인: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItem.kt` - 확인: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItem.kt`
- 검증: 기존 추천 content는 `nsv_home_recommendation_content` 아래에 있고, 랭킹 content는 별도 container가 필요함을 확인한다. - 검증: 기존 추천 content는 `nsv_home_recommendation_content` 아래에 있고, 랭킹 content는 별도 container가 필요함을 확인한다.
- [ ] **Task 1.2: 구현 제외 범위 재확인** - [x] **Task 1.2: 구현 제외 범위 재확인**
- 확인: `docs/20260608_크리에이터_랭킹_페이지/prd.md` - 확인: `docs/20260608_크리에이터_랭킹_페이지/prd.md`
- 제외: - 제외:
- Capsule Tab bar - Capsule Tab bar
@@ -87,7 +87,7 @@
### Phase 2: `creatorranking` 위젯 rank-num 숨김 계약 확장 ### Phase 2: `creatorranking` 위젯 rank-num 숨김 계약 확장
- [ ] **Task 2.1: `CreatorRankingItem` 표시 계약 테스트 추가** - [x] **Task 2.1: `CreatorRankingItem` 표시 계약 테스트 추가**
- 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItemTest.kt` - 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItemTest.kt`
- 추가 테스트: - 추가 테스트:
- 기본 `showRankChange``true` - 기본 `showRankChange``true`
@@ -96,7 +96,7 @@
- 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItemTest"` - 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItemTest"`
- 기대 결과: `showRankChange` 속성 미구현으로 RED 실패. - 기대 결과: `showRankChange` 속성 미구현으로 RED 실패.
- [ ] **Task 2.2: `CreatorRankingItem`에 `showRankChange` 추가** - [x] **Task 2.2: `CreatorRankingItem`에 `showRankChange` 추가**
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItem.kt` - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingItem.kt`
- 구현 내용: - 구현 내용:
- `val showRankChange: Boolean = true`를 기본값 있는 마지막 파라미터로 추가한다. - `val showRankChange: Boolean = true`를 기본값 있는 마지막 파라미터로 추가한다.
@@ -104,7 +104,7 @@
- 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItemTest"` - 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItemTest"`
- 기대 결과: PASS. - 기대 결과: PASS.
- [ ] **Task 2.3: rank-num 숨김 view 테스트 추가** - [x] **Task 2.3: rank-num 숨김 view 테스트 추가**
- 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt` - 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt`
- 추가 테스트: - 추가 테스트:
- `Large`, `Compact`, `Horizontal` card에 `showRankChange=false` item을 bind하면 `ll_creator_ranking_delta``GONE` - `Large`, `Compact`, `Horizontal` card에 `showRankChange=false` item을 bind하면 `ll_creator_ranking_delta``GONE`
@@ -112,7 +112,7 @@
- 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest"` - 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest"`
- 기대 결과: view bind 미구현으로 RED 실패. - 기대 결과: view bind 미구현으로 RED 실패.
- [ ] **Task 2.4: rank-num 숨김 구현** - [x] **Task 2.4: rank-num 숨김 구현**
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt` - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt`
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt` - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt`
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt` - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt`
@@ -126,7 +126,7 @@
### Phase 3: 홈 크리에이터 랭킹 API/DTO/mapper 작성 ### Phase 3: 홈 크리에이터 랭킹 API/DTO/mapper 작성
- [ ] **Task 3.1: mapper RED 테스트 작성** - [x] **Task 3.1: mapper RED 테스트 작성**
- 생성: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeCreatorRankingMapperTest.kt` - 생성: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeCreatorRankingMapperTest.kt`
- 테스트 케이스: - 테스트 케이스:
- 응답 item을 `rank` 오름차순으로 재정렬한다. - 응답 item을 `rank` 오름차순으로 재정렬한다.
@@ -140,7 +140,7 @@
- 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"` - 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"`
- 기대 결과: DTO/mapper 미구현으로 RED 실패. - 기대 결과: DTO/mapper 미구현으로 RED 실패.
- [ ] **Task 3.2: API DTO와 mapper 구현** - [x] **Task 3.2: API DTO와 mapper 구현**
- 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingModels.kt` - 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingModels.kt`
- 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeCreatorRankingMappers.kt` - 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeCreatorRankingMappers.kt`
- 구현 내용: - 구현 내용:
@@ -152,7 +152,7 @@
- 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"` - 검증 명령: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"`
- 기대 결과: PASS. - 기대 결과: PASS.
- [ ] **Task 3.3: API/Repository 작성** - [x] **Task 3.3: API/Repository 작성**
- 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingApi.kt` - 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingApi.kt`
- 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingRepository.kt` - 생성: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/data/HomeCreatorRankingRepository.kt`
- 구현 내용: - 구현 내용:
@@ -282,3 +282,8 @@
## Verification Log ## Verification Log
- 2026-06-08: `superpowers:writing-plans` 지침, PRD `docs/20260608_크리에이터_랭킹_페이지/prd.md`, 기존 홈 추천 계획 문서, `fragment_v2_main_home.xml`, `HomeMainFragment`, `AppDI`, 기존 홈 추천 API/ViewModel, `creatorranking` 위젯 구조와 테스트 위치를 확인했다. - 2026-06-08: `superpowers:writing-plans` 지침, PRD `docs/20260608_크리에이터_랭킹_페이지/prd.md`, 기존 홈 추천 계획 문서, `fragment_v2_main_home.xml`, `HomeMainFragment`, `AppDI`, 기존 홈 추천 API/ViewModel, `creatorranking` 위젯 구조와 테스트 위치를 확인했다.
- 2026-06-08: 이번 단계는 계획 문서 작성만 수행했으며 구현/빌드/테스트는 실행하지 않았다. - 2026-06-08: 이번 단계는 계획 문서 작성만 수행했으며 구현/빌드/테스트는 실행하지 않았다.
- 2026-06-08: Phase 1 범위로 PRD와 기존 `HomeMainFragment`, `fragment_v2_main_home.xml`, `AppDI`, 홈 추천 API/Repository/ViewModel, `creatorranking` 위젯/테스트 구조를 재확인했다. Capsule Tab bar, 팔로잉 탭 content, analytics/logging, ViewPager2/swipe 전환은 Phase 1-3 구현 범위에서 제외했다.
- 2026-06-08: Phase 2 TDD RED로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItemTest"`를 실행해 `showRankChange` 미구현 컴파일 실패를 확인했다. 이후 `CreatorRankingItem.showRankChange` 기본값을 추가하고 동일 명령이 `BUILD SUCCESSFUL`로 통과했다.
- 2026-06-08: Phase 2 rank-num 숨김 TDD RED로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest"`를 실행했다. 최초 Robolectric 설정 누락으로 Koin 초기화 오류가 발생해 기존 위젯 테스트 패턴과 동일하게 `@Config(sdk = [28], application = Application::class)`를 적용했고, 이후 Large/Compact/Horizontal 숨김 assertion 3건 실패를 확인했다. 세 카드 view에 `showRankChange=false``ll_creator_ranking_delta``GONE` 처리하도록 구현한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.*"``BUILD SUCCESSFUL`로 통과했다.
- 2026-06-08: Phase 3 mapper TDD RED로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"`를 실행해 `HomeCreatorRankingResponse`, `HomeCreatorRankingItemResponse`, `toCreatorRankingItems` 미구현 컴파일 실패를 확인했다. 이후 DTO와 mapper를 추가하고 동일 명령이 `BUILD SUCCESSFUL`로 통과했다.
- 2026-06-08: Phase 3 API/Repository를 추가한 뒤 `./gradlew :app:compileDebugKotlin``BUILD SUCCESSFUL`로 통과했다. 검증 중 병렬 Gradle 실행 1건에서 `classes.jar` zip header 오류가 발생했으나, 동일 타겟을 단독 재실행해 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.*"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck` 모두 `BUILD SUCCESSFUL`을 확인했다. `.editorconfig disabled_rules` deprecation warning은 기존 경고로 보고 수정하지 않았다.