feat(home): 최근 활동 LIVE 라우팅을 추가한다

This commit is contained in:
2026-07-30 16:42:33 +09:00
parent a1aa9c2243
commit f600d10e8b
10 changed files with 366 additions and 8 deletions

View File

@@ -88,6 +88,15 @@ data class HomeRecommendationResponse(
#### Changed Item Contracts
```kotlin
data class HomeActiveCreatorItem(
val creatorId: Long,
val creatorNickname: String,
val creatorProfileImage: String,
val activityType: String,
val activityAt: String,
val targetId: Long?
)
data class HomeAiCharacterItem(
val characterId: Long,
val creatorId: Long,
@@ -115,6 +124,9 @@ data class HomePopularCommunityPostItem(
```
#### Changed Item Requirements
- `HomeActiveCreatorItem.creatorId`는 서버가 항상 양수로 제공하는 필수 `Long` 필드이며, 최근 활동 UI model까지 보존한다.
- API 계약과 별개로 클라이언트는 크리에이터 채널 route 생성 전에 `creatorId > 0L`을 확인한다.
- `HomeActiveCreatorItem.activityType == LIVE`일 때 유효한 `targetId > 0L`는 라이브 `roomId`로 해석하고, `targetId == null && creatorId > 0L`이면 `creatorId`를 크리에이터 채널 이동 값으로 사용한다.
- `HomeAiCharacterItem.creatorId``크리에이터와 이야기를 나눠요!` 섹션 item 터치 시 크리에이터 채널 이동 값으로 사용한다.
- `HomeAiCharacterItem.characterId``CharacterChatThumbnailView` 표시 모델의 캐릭터 식별 값으로 유지하되, 추천 홈 item 터치 목적지로는 사용하지 않는다.
- `HomeAiCharacterItem.profileImage``CharacterChatThumbnailView`의 실제 이미지 URL로 사용한다.
@@ -144,6 +156,18 @@ enum class RecommendedActivityType(val code: String) {
- 알 수 없는 code는 크래시시키지 않고 기본값 또는 미표시 정책을 구현 계획에서 확정한다.
- mapper 또는 enum 변환 로직은 local unit test로 검증한다.
### 방금 활동한 크리에이터 LIVE 라우팅
#### Requirements
- `activityType == LIVE && targetId > 0L`인 item을 터치하면 `targetId``roomId`로 사용해 라이브 룸 진입을 요청한다.
- `activityType == LIVE && targetId == null`인 item을 터치하면 `creatorId > 0L`을 확인한 뒤 크리에이터 채널로 이동한다.
- 서버 버그 등으로 `creatorId <= 0L`이면 route를 만들지 않고 이동하지 않는다.
- 라이브 룸 진입은 홈 전용 인증 분기를 추가하지 않고 기존 `LiveActionCoordinator.enterLiveRoom(roomId)`을 사용한다.
- `LiveActionCoordinator`의 기존 흐름에 따라 비로그인 사용자는 로그인 절차로 이동하고, 방 상세 조회 후 성인 방이면 사용자 상태에 맞춰 본인인증 또는 콘텐츠 보기 옵션 설정 절차를 적용한다.
- 크리에이터 채널 이동은 기존 `CreatorActionCommand.Profile(creatorId)` 공통 액션을 사용한다.
- `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`, 알 수 없는 activity type의 기존 라우팅 정책은 변경하지 않는다.
- 이번 작업에서는 공통 로그인·본인인증·성인 콘텐츠 보기 정책 자체를 변경하지 않는다.
### 사업자 정보 접기/더보기
Figma 최하단 사업자 정보 섹션(`218:2058`)은 외부 라이브러리 없이 TextView와 클릭 가능한 컨트롤로 구현한다.
@@ -358,6 +382,9 @@ HomeRecommendation 화면
- `FeedCommunityView`에서 keyword 영역이 추천 페이지에 노출되지 않고, 이미지와 유료 미구매 overlay가 표시된다.
- `AudioContentCardView`에서 `ic_content_tag_point`, `무료`, `FIRST` 태그가 조건에 맞게 표시되고, `ic_content_tag_original`은 표시되지 않는다.
- `HomeAiCharacterItem.creatorId`가 UI model까지 보존되고, AI 캐릭터 item 터치 시 `CreatorChannelActivity``creatorId`가 전달된다.
- `HomeActiveCreatorItem.creatorId`가 UI model까지 보존되고, `LIVE` item은 `targetId` 유무에 따라 라이브 룸 또는 크리에이터 채널 route로 분기된다.
- 최근 활동 `LIVE``targetId == null && creatorId <= 0L` 입력에서 route가 생성되지 않는다.
- 최근 활동 `LIVE`의 라이브 룸 진입이 `LiveActionCoordinator`를 사용해 로그인·본인인증·성인 콘텐츠 보기 설정 정책을 우회하지 않는다.
- 제외 대상인 `추천 필모그래피`, `또 다른 모습` 섹션이 화면에 생성되지 않는다.
- 최근 응원이 많은 크리에이터 모두 팔로우 API success 후 버튼이 `모두 팔로우 완료``ic_new_following` 상태로 변경된다.
- 사업자 정보는 기본 3줄 말줄임, 더보기 후 전체 표시, 접기 후 3줄 복귀가 동작한다.
@@ -377,6 +404,7 @@ HomeRecommendation 화면
---
## 12. 검증 기록
- 2026-07-30: 사용자 인터뷰에서 `HomeActiveCreatorItem.creatorId`는 서버가 항상 양수로 제공하는 필수 `Long` 필드로 확정했다. 현재 `CreatorActivityType.Live` route가 명시적으로 `null`을 반환해 터치 액션이 종료되는 것을 코드로 확인했으며, `targetId != null`이면 기존 `LiveActionCoordinator.enterLiveRoom(targetId)`, `targetId == null && creatorId > 0L`이면 기존 `CreatorActionCommand.Profile(creatorId)`를 사용하도록 요구사항을 확정했다. 서버 버그 등으로 `creatorId <= 0L`이면 이동하지 않는 방어 검증을 포함한다. 공통 라이브 진입을 재사용해 비로그인·본인인증·성인 콘텐츠 보기 설정 정책을 그대로 적용하고, 이번 범위에서는 해당 공통 정책 자체를 변경하지 않는다. PRD 변경 후 placeholder·모순·모호성·범위를 자체 검토하고 `git diff --check``./gradlew tasks --all`을 실행했으며 모두 성공했다.
- 2026-07-10: 사용자 요청에 따라 `방금 활동한 크리에이터` 섹션의 `activityType == COMMUNITY` 클릭과 `인기 커뮤니티` 섹션 item 클릭을 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동하도록 요구사항과 구현을 반영했다. 최근 활동 COMMUNITY의 `targetId`는 커뮤니티 게시글 `postId`로 해석하고, 인기 커뮤니티는 `HomePopularCommunityPostItem.postId`를 상세 화면 식별 값으로 사용한다.
- 2026-06-29: 사용자 추가 요청에 따라 `최근 데뷔한 크리에이터` item을 기존 `205dp x 259dp` 비율로 축소한 `185dp x 234dp`로 표시하고, 이미지 단독이 아니라 item root 전체에 `14dp` rounded clipping을 적용해야 한다는 요구사항을 PRD에 반영했다. Figma `24:5534`, `24:5537` design context와 screenshot을 확인했다.
- 2026-06-23: 기존 `CreatorChannelFanTalkFragmentLayoutTest.kt:78` ktlint 줄바꿈 위반을 동작 변경 없이 수정한 뒤 `./gradlew :app:testDebugUnitTest`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:ktlintCheck`가 모두 BUILD SUCCESSFUL임을 재확인했다. `adb devices` 결과 연결된 Android 기기가 없어 실제 기기 수동 확인은 수행하지 못했고, 해당 수동 확인은 환경 차단으로 계획 문서에 남겼다.
@@ -431,3 +459,11 @@ HomeRecommendation 화면
- `최근 데뷔한 크리에이터` 섹션 타이틀 우측 chevron을 표시하지 않는다.
- `크리에이터와 이야기를 나눠요!` 섹션 타이틀 우측 chevron을 표시하지 않는다.
- 섹션 목록 표시, item 터치 동작, 다른 섹션의 chevron 정책은 변경하지 않는다.
### 2026-07-30 변경: 최근 활동 LIVE 라우팅
- 홈 추천 API의 `HomeActiveCreatorItem`에 서버가 항상 양수로 제공하는 필수 `creatorId: Long`을 추가한다.
- `activityType == LIVE && targetId > 0L`이면 `targetId``roomId`로 사용해 기존 공통 라이브 진입 흐름을 실행한다.
- `activityType == LIVE && targetId == null`이면 `creatorId > 0L`을 확인한 뒤 크리에이터 채널로 이동한다.
- 서버 버그 등으로 `creatorId <= 0L`이면 route를 만들지 않고 이동하지 않는다.
- 공통 라이브 진입 흐름을 재사용해 비로그인, 본인인증 필요, 성인 콘텐츠 보기 설정 필요 상태를 기존 접근 정책으로 처리한다.
- 다른 activity type의 기존 라우팅과 공통 접근 정책 자체는 변경하지 않는다.