docs(creator): 오디오 탭 Phase 2 검증을 기록한다

This commit is contained in:
2026-06-19 15:41:42 +09:00
parent c9d911f339
commit d0843d94ed

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/audio/data/CreatorChannelAudioTabResponse.kt`
- 작업:
@@ -195,8 +195,12 @@
- `./gradlew :app:compileDebugKotlin`
- 기대 결과:
- 신규 DTO 추가 후 컴파일이 PASS한다.
- 검증 기록:
- 2026-06-19 `CreatorChannelAudioTabResponse`, `CreatorChannelAudioThemeResponse``audio/data` 하위에 추가했다. `ContentSort`와 기존 `CreatorChannelAudioContentResponse` 타입을 재사용한다.
- 2026-06-19 `./gradlew :app:compileDebugKotlin` 실행 결과 BUILD SUCCESSFUL.
- 2026-06-19 리뷰 후속 수정으로 PRD 계약의 `themeName` 필드가 ViewModel theme title 매핑에서도 사용되도록 연결부를 점검한다.
- [ ] **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`
@@ -209,8 +213,12 @@
- `./gradlew :app:compileDebugKotlin`
- 기대 결과:
- API/Repository 추가 후 기존 Koin graph와 충돌 없이 컴파일된다.
- 검증 기록:
- 2026-06-19 `CreatorChannelApi.getAudio()``GET /api/v2/creator-channels/{creatorId}/audio` endpoint를 추가하고, `page`, `size`, `sort`, nullable `themeId`, `Authorization` header를 전달하도록 했다.
- 2026-06-19 `CreatorChannelRepository.getAudio(creatorId, page, size, sort, themeId, token)` method를 추가했다. `themeId`는 nullable 값 그대로 Retrofit query로 전달한다.
- 2026-06-19 `./gradlew :app:compileDebugKotlin` 실행 결과 BUILD SUCCESSFUL.
- [ ] **Task 2.3: ViewModel RED 테스트 작성**
- [x] **Task 2.3: ViewModel RED 테스트 작성**
- 생성:
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioViewModelTest.kt`
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioPaginationTest.kt`
@@ -232,8 +240,12 @@
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioPaginationTest"`
- 기대 결과:
- production 구현 전 `CreatorChannelAudioViewModel` 미구현으로 RED 실패한다.
- 검증 기록:
- 2026-06-19 `CreatorChannelAudioViewModelTest`, `CreatorChannelAudioPaginationTest`를 추가해 최초 로드, synthetic `전체` tab, 테마/정렬 변경, no-op, `duration == null` item 제외, empty, 소장률 표시 조건, pagination append/중복 방지/error consume/stale response 무시 계약을 고정했다.
- 2026-06-19 production ViewModel 구현 전 RED 확인을 위해 두 테스트 명령을 병렬 실행했으나 Kotlin daemon/incremental compile 충돌로 정상적인 단일 테스트 실패 로그 대신 compile failure가 발생했다. 이후 daemon을 정리하고 production 구현 후 동일 테스트 명령을 단일 실행해 GREEN을 확인했다.
- 2026-06-19 리뷰 후속 수정으로 `audioContentCount == 0`이면 표시 가능한 item이 있어도 Empty 상태가 되는 테스트를 추가한다.
- [ ] **Task 2.4: `CreatorChannelAudioViewModel` 구현**
- [x] **Task 2.4: `CreatorChannelAudioViewModel` 구현**
- 생성:
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioViewModel.kt`
- 수정:
@@ -248,12 +260,19 @@
- request generation 값을 두어 오래된 응답이 최신 상태를 덮어쓰지 않도록 한다.
- `duration == null` item은 상태 생성 전에 제외한다.
- 첫 페이지 성공 후 표시 가능한 item이 0개이면 `Empty` 상태로 둔다.
- 첫 페이지 성공 후 `audioContentCount == 0`이면 표시 가능한 item 존재 여부와 관계없이 `Empty` 상태로 둔다.
- pagination 성공 시 기존 item 뒤에 append한다.
- 검증 명령:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioViewModelTest"`
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioPaginationTest"`
- 기대 결과:
- ViewModel 테스트가 PASS한다.
- 검증 기록:
- 2026-06-19 `CreatorChannelAudioViewModel`을 추가해 최초 로드, sort/theme 변경, retry, pagination, request generation stale response 방지, `duration == null` item 제외, empty/content/error 상태를 구현했다.
- 2026-06-19 `AppDI.kt``CreatorChannelAudioViewModel` Koin binding을 추가했다.
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioViewModelTest"` 실행 결과 BUILD SUCCESSFUL.
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioPaginationTest"` 실행 결과 BUILD SUCCESSFUL.
- 2026-06-19 리뷰 후속 수정으로 theme title 매핑은 `theme.themeName`을 사용하고, Empty 조건은 `audioContents.isEmpty() || audioContentCount == 0`으로 보강한다.
---