fix(home): 라이브 전체 항목을 항상 표시한다

This commit is contained in:
2026-07-31 18:34:23 +09:00
parent d592038edd
commit dd4a5167a9
5 changed files with 263 additions and 4 deletions

View File

@@ -21,6 +21,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
- 추천 탭이 선택된 `HomeMainFragment`에 메인 홈 추천 UI를 구현한다.
- Figma에서 기존 widget으로 대응 가능한 항목은 기존 v2 widget을 우선 재사용한다.
- 재사용이 어려운 영역만 최소 범위 신규 UI 또는 adapter item으로 정의한다.
- 현재 진행 중인 라이브가 1개 이상이면 라이브 가로 목록 마지막에 `전체` 항목을 항상 표시해 전체 라이브 목록으로 이동할 수 있게 한다.
- `추천 필모그래피`, `또 다른 모습` 섹션은 만들지 않는다.
- 최하단 사업자 정보 섹션은 표시하되, 기본 최대 3줄 말줄임과 `더보기`/`접기` 토글을 제공한다.
- `HomeActiveCreatorItem.activityType`은 백엔드 code를 앱 내부 enum 또는 mapper로 변환하고, 표시 문구는 string resource 기반 다국어 처리를 적용한다.
@@ -43,6 +44,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
- 모두 팔로우 확인 절차를 위해 신규 Dialog component나 layout을 만들지 않고 기존 `V2ModalDialog`를 재사용한다.
- 모두 팔로우 API endpoint, request body, 성공·실패 처리와 완료 버튼 UI는 변경하지 않는다.
- 현재 숨김 상태인 `genreCreators` 섹션이나 모두 팔로우 버튼을 다시 노출하지 않는다.
- 라이브 `전체` 항목의 디자인, 클릭 목적지, 로그인 가드와 전체 라이브 목록 화면 동작은 변경하지 않는다.
---
@@ -54,6 +56,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
## 6. User Stories
- 사용자는 홈에서 현재 라이브 중인 크리에이터와 추천 콘텐츠를 빠르게 탐색하고 싶다.
- 사용자는 현재 진행 중인 라이브가 적더라도 `전체` 항목을 통해 전체 라이브 목록 화면으로 이동하고 싶다.
- 사용자는 배너를 스와이프하거나 터치해 관련 이벤트, 크리에이터, 시리즈, 외부 링크 또는 앱 내부 딥링크로 이동하고 싶다.
- 사용자는 최근 활동한 크리에이터의 활동 유형을 `라이브`, `오디오`, `커뮤니티`처럼 이해 가능한 문구로 보고 싶다.
- 사용자는 여러 크리에이터를 한 번에 팔로우하기 전에 확인창에서 동작을 검토하고, 확인하거나 취소할 수 있기를 원한다.
@@ -141,6 +144,15 @@ data class HomePopularCommunityPostItem(
- `HomePopularCommunityPostItem.price`, `existOrdered`는 추천 페이지용 `FeedCommunityView`의 유료 미구매 UI 판정에 사용한다.
- `HomePopularCommunityPostItem.content`, `price`, `createdAt`, `likeCount`, `commentCount`는 인기 커뮤니티 feed 표시 데이터로 사용한다.
### 현재 진행 중인 라이브 `전체` 항목
#### Requirements
- `lives`가 비어 있으면 기존 정책대로 라이브 섹션 전체를 숨기고 `전체` 항목도 표시하지 않는다.
- `lives`가 1개 이상 20개 이하이면 모든 라이브 항목 뒤에 `전체` 항목을 표시한다.
- `lives`가 21개 이상이면 기존 정책대로 라이브를 최대 20개까지 표시하고 마지막에 `전체` 항목을 표시한다.
- `전체` 항목의 기존 크기, 색상, typography와 클릭 시 `HomeOnAirLiveActivity`로 이동하는 동작을 유지한다.
- 라이브 item 표시 순서, item 클릭 입장 흐름, 추천 API와 전체 라이브 목록 API 계약은 변경하지 않는다.
### Activity Type 다국어 표시
`HomeActiveCreatorItem.activityType`은 백엔드 enum code를 앱 표시용 enum으로 변환한다.
@@ -406,6 +418,7 @@ HomeRecommendation 화면
- `HomeActiveCreatorItem.creatorId`가 UI model까지 보존되고, `LIVE` item은 `targetId` 유무에 따라 라이브 룸 또는 크리에이터 채널 route로 분기된다.
- 최근 활동 `LIVE``targetId == null && creatorId <= 0L` 입력에서 route가 생성되지 않는다.
- 최근 활동 `LIVE`의 라이브 룸 진입이 `LiveActionCoordinator`를 사용해 로그인·본인인증·성인 콘텐츠 보기 설정 정책을 우회하지 않는다.
- 현재 진행 중인 라이브가 0개이면 라이브 섹션과 `전체` 항목이 표시되지 않고, 1개 이상이면 최대 20개 라이브 뒤에 `전체` 항목이 표시된다.
- 제외 대상인 `추천 필모그래피`, `또 다른 모습` 섹션이 화면에 생성되지 않는다.
- 최근 응원이 많은 크리에이터 모두 팔로우 API success 후 버튼이 `모두 팔로우 완료``ic_new_following` 상태로 변경된다.
- 최근 응원이 많은 크리에이터의 기본 상태 모두 팔로우 버튼 터치 직후에는 확인창만 표시되고 API 호출 횟수는 `0`이다.
@@ -428,6 +441,8 @@ HomeRecommendation 화면
---
## 12. 검증 기록
- 2026-07-31: 현재 진행 중인 라이브 `전체` 항목 상시 표시 요구사항을 TDD로 구현했다. 라이브 1개 입력의 adapter item 수가 기대 2, 실제 1로 실패하는 RED를 확인한 뒤 `HomeLiveAdapter`가 비어 있지 않은 입력에서 `전체` 항목을 추가하도록 최소 수정했다. focused `HomeMainFragmentLayoutTest` 74개와 전체 162 suites·1,199 tests, debug Kotlin compile, ktlint, diff 검증이 성공했으며 0개 숨김·20개 cap·기존 `전체` 디자인과 클릭 경로는 유지했다.
- 2026-07-31: 사용자 인터뷰에서 현재 진행 중인 라이브가 0개이면 기존처럼 섹션을 숨기고, 1개 이상이면 최대 20개 라이브 뒤에 `전체` 항목을 항상 표시하는 정책을 확정했다. `HomeLiveAdapter.submitItems()`의 기존 `items.size > MAX_VISIBLE_LIVE_COUNT` 조건과 `HomeMainFragmentLayoutTest`의 21개 초과 회귀 테스트를 확인했으며, 기존 디자인·클릭 목적지·로그인 가드·API 계약은 변경하지 않는 최소 범위를 PRD에 반영했다.
- 2026-07-31: PRD와 계획/TASK 보완 후 신규 범위의 placeholder·모순·요구사항 추적성을 자체 검토했다. `git status --short`로 변경 파일이 두 문서뿐임을 확인했고, placeholder 검색과 `git diff --check`는 출력 없이 성공했다. `./gradlew tasks --all`은 최초 sandbox 실행에서 사용자 Gradle cache lock 접근 제한으로 실패했으나 승인된 동일 명령 재실행은 `BUILD SUCCESSFUL`로 완료되어 계획에 기재한 Gradle task 이름의 유효성을 확인했다. production·test·resource 파일은 변경하지 않았다.
- 2026-07-31: `deep-interview` 결과, 모든 `모두 팔로우` 동작에 API 호출 전 확인 절차를 적용하는 공통 정책을 확정했다. 현재 구현 대상은 실제 노출 중인 `최근 응원이 많은 크리에이터` 섹션으로 제한하고, 숨겨진 `genreCreators` UI는 다시 노출하지 않는다. 저장소의 `HomeMainFragment``cheerCreators` 전체 id를 `HomeRecommendationViewModel.followCreators()`에 즉시 전달하는 현재 흐름과, 취소·확인 2버튼 및 중복 클릭 방지를 지원하는 기존 `V2ModalDialog`를 확인했다. 확인창은 제목 `모두 팔로우`, 설명 `목록의 크리에이터를 모두 팔로우하시겠어요?`, 확인 `팔로우 하기`, 취소 `취소`로 확정하고 한국어·영어·일본어 resource를 계획했다. 이번 요청은 PRD와 계획/TASK 보완까지만 수행하며 구현 코드는 변경하지 않는다.
- 2026-07-31: `REV-P7-001` 후속으로 유료 미구매 인기 커뮤니티의 원본 이미지 미로드 보안 결정을 PRD에 재정렬했다. commit `2d58a876`에서 client-side blur 원본 로드가 재도입된 회귀를 복구해, 무료·구매 완료 이미지는 기존대로 로드하고 유료 미구매는 원본 `imageUrl` 요청 없이 lock overlay와 가격만 유지한다.
@@ -507,3 +522,9 @@ HomeRecommendation 화면
- 유료 미구매 인기 커뮤니티 item은 원본 `imageUrl`을 image loader에 전달하지 않는다.
- 기존 Coil 요청과 drawable을 비우는 방식으로 원본 네트워크 요청/cache 노출을 막고, `FeedCommunityView.bind()`의 lock overlay와 가격 capsule 표시는 유지한다.
- 무료 또는 구매 완료 item의 이미지 로딩, 커뮤니티 상세 이동, 구매 권한 판정, API/DTO 계약은 변경하지 않는다.
### 2026-07-31 변경: 현재 진행 중인 라이브 `전체` 항목 상시 표시
- 현재 진행 중인 라이브가 0개이면 기존처럼 라이브 섹션 전체를 숨긴다.
- 현재 진행 중인 라이브가 1개 이상이면 라이브 개수와 관계없이 목록 마지막에 `전체` 항목을 표시한다.
- 라이브는 기존처럼 최대 20개까지 표시하므로 21개 이상일 때도 `라이브 20개 + 전체` 구성을 유지한다.
- `전체` 항목의 디자인·클릭 목적지·로그인 가드와 라이브 item의 입장 흐름은 변경하지 않는다.