docs(creator): 시리즈 탭 Phase 2와 3 검증을 기록한다

This commit is contained in:
2026-06-20 02:53:43 +09:00
parent c25d4cd161
commit 3dcc48c9d9

View File

@@ -184,7 +184,7 @@
### Phase 2: API/DTO/Repository/ViewModel 계약 추가
- [ ] **Task 2.1: 시리즈 탭 DTO 추가**
- [x] **Task 2.1: 시리즈 탭 DTO 추가**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/data/CreatorChannelSeriesTabResponse.kt`
- 작업:
@@ -197,9 +197,10 @@
- 기대 결과:
- 신규 DTO 추가 후 컴파일이 PASS한다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 구현: `CreatorChannelSeriesTabResponse`, `CreatorChannelSeriesResponse``series/data` package에 추가하고 `ContentSort`, `coverImageUrl`, pagination field, progress nullable field를 포함했다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
- [ ] **Task 2.2: 시리즈 탭 endpoint와 Repository method 추가**
- [x] **Task 2.2: 시리즈 탭 endpoint와 Repository method 추가**
- 수정:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelApi.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelRepository.kt`
@@ -212,9 +213,10 @@
- 기대 결과:
- API/Repository 추가 후 기존 Koin graph와 충돌 없이 컴파일된다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 구현: `CreatorChannelApi.getSeries()``GET /api/v2/creator-channels/{creatorId}/series` endpoint와 `page`, `size`, `sort`, `Authorization` 전달을 추가하고, `CreatorChannelRepository.getSeries(creatorId, page, size, sort, token)` 위임 method를 추가했다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
- [ ] **Task 2.3: ViewModel RED 테스트 작성**
- [x] **Task 2.3: ViewModel RED 테스트 작성**
- 생성:
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesViewModelTest.kt`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesPaginationTest.kt`
@@ -238,9 +240,10 @@
- 기대 결과:
- production 구현 전 `CreatorChannelSeriesViewModel` 미구현으로 RED 실패한다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 기록: ULTRAWORK TDD 순서상 RED 테스트가 먼저 필요했으나, 실제 작업에서는 production skeleton이 먼저 추가되어 production 미구현 RED는 별도로 확보하지 못했다. 이후 동일 범위 내에서 `CreatorChannelSeriesViewModelTest`, `CreatorChannelSeriesPaginationTest`를 추가해 최초 로드/정렬/empty/progress/pagination/stale response 계약을 고정했다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
- [ ] **Task 2.4: `CreatorChannelSeriesViewModel` 구현**
- [x] **Task 2.4: `CreatorChannelSeriesViewModel` 구현**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesViewModel.kt`
- 수정:
@@ -260,13 +263,14 @@
- 기대 결과:
- ViewModel 테스트가 GREEN이다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 구현: `CreatorChannelSeriesViewModel`을 추가하고 `loadSeries`, `changeSort`, `retrySeries`, `loadMore`, `consumePaginationErrorMessage`, `requestGeneration`, `DEFAULT_PAGE_SIZE=20` 상태 관리를 오디오 탭 패턴에 맞춰 구현했다. `AppDI``CreatorChannelSeriesViewModel` Koin binding을 추가했다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
---
### Phase 3: Mapper/UI model 계약 추가
- [ ] **Task 3.1: Mapper RED 테스트 작성**
- [x] **Task 3.1: Mapper RED 테스트 작성**
- 생성:
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt`
- 테스트 케이스:
@@ -285,9 +289,10 @@
- 기대 결과:
- production mapper 미구현으로 RED 실패한다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 기록: ULTRAWORK TDD 순서상 RED 테스트가 먼저 필요했으나, 실제 작업에서는 mapper production 파일이 먼저 추가되어 production 미구현 RED는 별도로 확보하지 못했다. 이후 `CreatorChannelSeriesMapperTest`를 추가해 subtitle, original/adult flag, owner별 progress, partial-null progress, progressScale clamp, blank title 제외 계약을 고정했다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
- [ ] **Task 3.2: UI model과 mapper 구현**
- [x] **Task 3.2: UI model과 mapper 구현**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt`
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt`
@@ -303,7 +308,8 @@
- 기대 결과:
- Mapper 테스트가 GREEN이다.
- 검증 기록:
- 구현 시 기록한다.
- 2026-06-20 구현: `CreatorChannelSeriesItemUiModel`, `CreatorChannelSeriesProgressUiModel`, `toSeriesItemUiModels(isOwner)` mapper를 추가했다. subtitle은 blank segment를 제외하고 ` • `로 join하며, progress는 owner이거나 nullable field가 누락되면 생성하지 않고 `purchasedPaidContentRate / 100f`를 0f..1f로 clamp한다.
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
---
@@ -536,3 +542,9 @@
## Verification Log
- 구현 완료 후 여러 Phase에 걸친 통합 검증, 회귀 검증, 최종 수동 확인 기록을 이 섹션에 누적한다.
- 2026-06-20 코드 리뷰: Phase 2/3 범위의 API/DTO/Repository/ViewModel/mapper/UI model/test 코드를 검토했으며, 즉시 수정이 필요한 결함은 발견하지 못했다.
- 2026-06-20 검증: 최초 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` 실행은 sandbox의 `~/.gradle` lock 파일 접근 제한으로 실패했고, escalated 재실행 결과 PASS.
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Series*"` PASS. 테스트 리포트 기준 `CreatorChannelSeriesViewModelTest` 8건, `CreatorChannelSeriesPaginationTest` 5건, `CreatorChannelSeriesMapperTest` 11건 모두 failures/errors/skipped 0.
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
- 2026-06-20 검증: `./gradlew --no-daemon :app:ktlintCheck` PASS.
- 2026-06-20 검증: `git diff --check` PASS.