docs(home): 메인 홈 추천 탭 지금 라이브 중 입장 작업을 기록한다
This commit is contained in:
@@ -302,3 +302,40 @@
|
|||||||
- 2026-06-27 Phase 3 리뷰 반영: `HomeOnAirLiveActivity`에 기존 라이브 입장 정책과 동일하게 로그인 확인, `getRoomDetail(roomId)` 응답의 `isAdult` 기준 성인 인증/성인 콘텐츠 설정 가드, `LiveViewModel.isLoading/toastLiveData` 관찰을 추가했다. 이후 `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon`, `git diff --check` 모두 통과했다.
|
- 2026-06-27 Phase 3 리뷰 반영: `HomeOnAirLiveActivity`에 기존 라이브 입장 정책과 동일하게 로그인 확인, `getRoomDetail(roomId)` 응답의 `isAdult` 기준 성인 인증/성인 콘텐츠 설정 가드, `LiveViewModel.isLoading/toastLiveData` 관찰을 추가했다. 이후 `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon`, `git diff --check` 모두 통과했다.
|
||||||
- 2026-06-27 Phase 3 코드 리뷰 및 재검증: `HomeOnAirLiveActivity`에 `LiveViewModel` loading/toast 관찰과 `GetRoomDetailResponse.isAdult` 기준 성인 인증/성인 콘텐츠 설정 가드를 추가한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon`, `git diff --check`를 순차 실행해 모두 통과했다.
|
- 2026-06-27 Phase 3 코드 리뷰 및 재검증: `HomeOnAirLiveActivity`에 `LiveViewModel` loading/toast 관찰과 `GetRoomDetailResponse.isAdult` 기준 성인 인증/성인 콘텐츠 설정 가드를 추가한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon`, `git diff --check`를 순차 실행해 모두 통과했다.
|
||||||
- 2026-06-27 Phase 4 최종 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon` 모두 BUILD SUCCESSFUL을 확인했다. `git diff --check`는 출력이 없어 whitespace error가 없음을 확인했다.
|
- 2026-06-27 Phase 4 최종 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.*" --no-daemon`, `./gradlew :app:mergeDebugResources --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon` 모두 BUILD SUCCESSFUL을 확인했다. `git diff --check`는 출력이 없어 whitespace error가 없음을 확인했다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 5: 홈 추천 라이브 아이템 직접 입장 보완
|
||||||
|
|
||||||
|
- [x] **Task 5.1: HomeMainFragment 라이브 아이템 입장 source test 추가**
|
||||||
|
- 수정:
|
||||||
|
- `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLoginGuardSourceTest.kt`
|
||||||
|
- 작업:
|
||||||
|
- `onLiveClick()`이 `Unit` placeholder가 아니고 login guard, `getRoomDetail(roomId)`, `roomDetail.isAdult` guard, 기존 v2 `CreatorChannelLiveCoordinator` 입장 위임 순서를 갖는지 검증한다.
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest" --no-daemon`
|
||||||
|
- Expected RED: 기존 `onLiveClick()` 미구현으로 신규 assertion 실패.
|
||||||
|
- RED Result: 신규 테스트 추가 후 기존 `onLiveClick = Unit` 상태에서 `HomeMainFragment 추천 라이브 아이템은 로그인과 성인 가드 후 기존 입장 흐름을 실행한다`가 실패함을 확인했다.
|
||||||
|
|
||||||
|
- [x] **Task 5.2: HomeMainFragment 라이브 입장 흐름 구현**
|
||||||
|
- 수정:
|
||||||
|
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||||
|
- 작업:
|
||||||
|
- `LiveViewModel`을 주입하고 추천 라이브 클릭에서 `ensureMainV2NavigationAllowed`를 먼저 호출한다.
|
||||||
|
- 상세 조회 후 `roomDetail.isAdult` 기준으로 성인 guard를 수행하고, 기존 v2 `CreatorChannelLiveCoordinator`의 라이브 입장 분기를 재사용한다.
|
||||||
|
- 입장 전 오디오 재생 서비스를 중지한다.
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest" --no-daemon`
|
||||||
|
- Expected GREEN: 신규 source test 포함 전체 통과.
|
||||||
|
- GREEN Result: `HomeMainFragment`가 `LiveViewModel.getRoomDetail(item.roomId)` 후 `requiresAdultContentAccess = roomDetail.isAdult` guard를 거쳐 `CreatorChannelLiveCoordinator.enterLiveRoom(item.roomId, roomDetail)`를 호출하도록 변경했고, 단일 source test가 BUILD SUCCESSFUL로 통과했다.
|
||||||
|
|
||||||
|
- [x] **Task 5.3: 컴파일 및 회귀 검증**
|
||||||
|
- 검증:
|
||||||
|
- Run: `./gradlew :app:compileDebugKotlin --no-daemon`
|
||||||
|
- Expected: BUILD SUCCESSFUL.
|
||||||
|
- Run: `git diff --check`
|
||||||
|
- Expected: whitespace error 없음.
|
||||||
|
- Result: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.HomeOnAirLiveEntryPolicyTest" --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `git diff --check` 모두 통과했다. 최초 병렬 Gradle 실행은 Kotlin incremental cache 충돌로 실패했으나, `./gradlew --stop` 후 순차 재실행에서 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
|
||||||
|
- 2026-07-06 Phase 5 검증: 홈 추천 라이브 클릭 source test를 RED 상태로 먼저 확인한 뒤, `HomeMainFragment`에서 로그인 guard, 상세 조회, `roomDetail.isAdult` 기반 성인 guard, 기존 v2 `CreatorChannelLiveCoordinator` 입장 위임을 연결했다. 이후 `HomeMainFragmentLoginGuardSourceTest`, `HomeOnAirLiveEntryPolicyTest`, `compileDebugKotlin`, `git diff --check`가 모두 통과했다.
|
||||||
|
- 2026-07-06 Phase 5 리뷰 반영: 코드 품질 리뷰에서 `getRoomDetail` 콜백 lifecycle guard 부재와 여러 ViewModel의 `LoadingDialog` 직접 제어 race가 지적되어, 콜백 초입에 `if (!isAdded || view == null) return@getRoomDetail`를 추가하고 recommendation/ranking/following/live entry loading state를 `updateLoadingDialog()`로 통합했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest" --no-daemon`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.live.onair.HomeOnAirLiveEntryPolicyTest" --no-daemon`, `./gradlew :app:compileDebugKotlin --no-daemon`, `git diff --check`가 모두 통과했다.
|
||||||
|
|||||||
@@ -147,3 +147,12 @@ data class HomeOnAirLiveResponse(
|
|||||||
|
|
||||||
## 11. Open Questions
|
## 11. Open Questions
|
||||||
- 없음. `LIVE ${라이브 시작시간}`은 `beginDateTimeUtc`를 디바이스 Timezone으로 변환한 `HH:mm` 표시로 확정한다.
|
- 없음. `LIVE ${라이브 시작시간}`은 `beginDateTimeUtc`를 디바이스 Timezone으로 변환한 `HH:mm` 표시로 확정한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Follow-up: 홈 추천 라이브 아이템 직접 입장
|
||||||
|
- 홈 추천 탭 최상단 `지금 라이브 중` 아이템 터치 시 기존 미구현 콜백을 보완한다.
|
||||||
|
- 터치 직후 `ensureMainV2NavigationAllowed`로 로그인 guard를 먼저 통과한다.
|
||||||
|
- 로그인 통과 후 `LiveViewModel.getRoomDetail(roomId)`를 호출하고, 상세 응답의 `isAdult == true`이면 `requiresAdultContentAccess = true`로 성인 인증/성인 콘텐츠 설정 guard를 한 번 더 통과한 뒤 입장한다.
|
||||||
|
- 실제 입장 분기는 기존 `LiveFragment.enterLiveRoom`과 동일한 `manager.id`, `price`, `isPaid`, `isPrivateRoom`, `beginDateTimeUtc` 기준을 따른다.
|
||||||
|
- 기존 레거시 `LiveFragment`, `LiveViewModel`, `LiveRepository`는 직접 수정하지 않는다.
|
||||||
|
|||||||
Reference in New Issue
Block a user