docs(home): 장르 크리에이터 미표시 요구를 기록한다
This commit is contained in:
@@ -6,7 +6,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
|||||||
---
|
---
|
||||||
|
|
||||||
## 2. Problem
|
## 2. Problem
|
||||||
- 메인 홈 추천 화면은 라이브, 배너, 최근 활동, 신규 데뷔, 첫 오디오 콘텐츠, AI 캐릭터, 장르별 크리에이터, 응원 크리에이터, 인기 커뮤니티 등 여러 데이터 섹션을 한 화면에 표시해야 한다.
|
- 메인 홈 추천 화면은 라이브, 배너, 최근 활동, 신규 데뷔, 첫 오디오 콘텐츠, AI 캐릭터, 응원 크리에이터, 인기 커뮤니티 등 여러 데이터 섹션을 한 화면에 표시해야 한다. `genreCreators` 응답 계약은 유지하지만 장르별 크리에이터 UI는 추천 탭에 표시하지 않는다.
|
||||||
- Figma에는 이미 `live`, `banner`, `section-title`, `contents`, `chat-thumbnail`, `profile`, `feed` 등 재사용 가능한 형태가 다수 포함되어 있으므로, 기존에 생성된 widget을 최대한 활용해야 한다.
|
- Figma에는 이미 `live`, `banner`, `section-title`, `contents`, `chat-thumbnail`, `profile`, `feed` 등 재사용 가능한 형태가 다수 포함되어 있으므로, 기존에 생성된 widget을 최대한 활용해야 한다.
|
||||||
- `HomeActiveCreatorItem.activityType`은 백엔드 enum code 그대로 표시하면 사용자에게 부자연스러우므로 `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`를 다국어 처리 가능한 표시 문자열로 변환해야 한다.
|
- `HomeActiveCreatorItem.activityType`은 백엔드 enum code 그대로 표시하면 사용자에게 부자연스러우므로 `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`를 다국어 처리 가능한 표시 문자열로 변환해야 한다.
|
||||||
- 사업자 정보 섹션은 별도 외부 라이브러리 없이 최대 3줄 말줄임과 더보기/접기 토글을 제공해야 한다.
|
- 사업자 정보 섹션은 별도 외부 라이브러리 없이 최대 3줄 말줄임과 더보기/접기 토글을 제공해야 한다.
|
||||||
@@ -172,7 +172,7 @@ Figma 최하단 사업자 정보 섹션(`218:2058`)은 외부 라이브러리
|
|||||||
- 세로 스크롤 시 title-bar와 `TextTabBarView`는 화면에 유지하고, `TextTabBarView` 아래 추천 content 영역만 스크롤되도록 구성한다.
|
- 세로 스크롤 시 title-bar와 `TextTabBarView`는 화면에 유지하고, `TextTabBarView` 아래 추천 content 영역만 스크롤되도록 구성한다.
|
||||||
|
|
||||||
### 모두 팔로우 하기
|
### 모두 팔로우 하기
|
||||||
`최근 응원이 많은 크리에이터`, `장르별 크리에이터` 섹션에는 모두 팔로우 버튼을 제공한다.
|
`최근 응원이 많은 크리에이터` 섹션에는 모두 팔로우 버튼을 제공한다. `장르별 크리에이터`는 추천 탭 UI에 표시하지 않으므로 모두 팔로우 버튼도 제공하지 않는다.
|
||||||
|
|
||||||
#### API Requirements
|
#### API Requirements
|
||||||
- API는 `POST /api/v2/home/recommendations/creators/follow`를 사용한다.
|
- API는 `POST /api/v2/home/recommendations/creators/follow`를 사용한다.
|
||||||
@@ -189,9 +189,9 @@ data class FollowRecommendedCreatorsRequest(
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Request Requirements
|
#### Request Requirements
|
||||||
- `creatorIds`에는 사용자가 터치한 `모두 팔로우 하기` 버튼이 속한 섹션의 크리에이터 id 목록을 전달한다.
|
- `creatorIds`에는 사용자가 터치한 `모두 팔로우 하기` 버튼이 속한 표시 섹션의 크리에이터 id 목록을 전달한다.
|
||||||
- `최근 응원이 많은 크리에이터` 섹션에서는 `cheerCreators.creatorId` 목록을 전달한다.
|
- `최근 응원이 많은 크리에이터` 섹션에서는 `cheerCreators.creatorId` 목록을 전달한다.
|
||||||
- `장르별 크리에이터` 섹션에서는 해당 장르 그룹의 `creators.creatorId` 목록을 전달한다.
|
- `장르별 크리에이터` 섹션은 추천 탭 UI에 표시하지 않으므로 해당 장르 그룹의 `creators.creatorId` 목록을 전달하지 않는다.
|
||||||
- `creatorIds`가 빈 리스트인 경우 API를 호출하지 않고 버튼 상태를 변경하지 않는다.
|
- `creatorIds`가 빈 리스트인 경우 API를 호출하지 않고 버튼 상태를 변경하지 않는다.
|
||||||
|
|
||||||
#### Button Requirements
|
#### Button Requirements
|
||||||
@@ -262,9 +262,7 @@ HomeRecommendation 화면
|
|||||||
│ ├─ 재사용: view_section_title
|
│ ├─ 재사용: view_section_title
|
||||||
│ └─ 재사용: v2.widget.characterchatthumbnail.CharacterChatThumbnailView
|
│ └─ 재사용: v2.widget.characterchatthumbnail.CharacterChatThumbnailView
|
||||||
├─ 장르별 크리에이터: genreCreators
|
├─ 장르별 크리에이터: genreCreators
|
||||||
│ ├─ Figma instance: section-title, profile, button-capsule
|
│ └─ 미표시: 응답/매핑 계약은 유지하되 추천 탭 UI에는 표시하지 않음
|
||||||
│ ├─ 재사용: view_section_title
|
|
||||||
│ └─ 신규: 장르 그룹 카드, 2행 profile grid, 모두 팔로우 버튼
|
|
||||||
├─ 추천 필모그래피
|
├─ 추천 필모그래피
|
||||||
│ └─ 제외: 만들지 않음
|
│ └─ 제외: 만들지 않음
|
||||||
├─ 최근 응원이 많은 크리에이터: cheerCreators
|
├─ 최근 응원이 많은 크리에이터: cheerCreators
|
||||||
@@ -288,7 +286,7 @@ HomeRecommendation 화면
|
|||||||
| `recentlyActiveCreators` | `24:5529` | 방금 활동한 크리에이터 | `view_section_title` | `list-act` 신규 필요 |
|
| `recentlyActiveCreators` | `24:5529` | 방금 활동한 크리에이터 | `view_section_title` | `list-act` 신규 필요 |
|
||||||
| `recentDebutCreators` | `24:5534` | 최근 데뷔한 크리에이터 | `view_section_title` | 신규 카드 필요 |
|
| `recentDebutCreators` | `24:5534` | 최근 데뷔한 크리에이터 | `view_section_title` | 신규 카드 필요 |
|
||||||
| `aiCharacters` | `24:5551` | AI 캐릭터 | `view_section_title`, `CharacterChatThumbnailView` | DTO mapping 필요 |
|
| `aiCharacters` | `24:5551` | AI 캐릭터 | `view_section_title`, `CharacterChatThumbnailView` | DTO mapping 필요 |
|
||||||
| `genreCreators` | `24:5611`, `24:5636` 후보 | 장르별 크리에이터 | `view_section_title` | 그룹 카드, 모두 팔로우 버튼 신규 필요 |
|
| `genreCreators` | `24:5611`, `24:5636` 후보 | 미표시 | 없음 | API/DTO/UI model 계약만 유지 |
|
||||||
| `cheerCreators` | `24:5636` 후보 | 최근 응원이 많은 크리에이터 | `view_section_title` | profile grid, 모두 팔로우 버튼 신규 필요 |
|
| `cheerCreators` | `24:5636` 후보 | 최근 응원이 많은 크리에이터 | `view_section_title` | profile grid, 모두 팔로우 버튼 신규 필요 |
|
||||||
| `popularCommunityPosts` | `24:5645`, `309:19774`, `309:19775` | 인기 커뮤니티 | `view_section_title`, `FeedCommunityView` | 이미지/유료 상태 UI 수정 필요 |
|
| `popularCommunityPosts` | `24:5645`, `309:19774`, `309:19775` | 인기 커뮤니티 | `view_section_title`, `FeedCommunityView` | 이미지/유료 상태 UI 수정 필요 |
|
||||||
| 사업자 정보 | `218:2058` | 사업자 정보 | 없음 | 접기/더보기 신규 필요 |
|
| 사업자 정보 | `218:2058` | 사업자 정보 | 없음 | 접기/더보기 신규 필요 |
|
||||||
@@ -323,7 +321,7 @@ HomeRecommendation 화면
|
|||||||
- 상단 라이브 목록, 배너, 추천 카드들은 어두운 홈 배경 위에서 기존 v2 widget 색상/typography/radius를 유지한다.
|
- 상단 라이브 목록, 배너, 추천 카드들은 어두운 홈 배경 위에서 기존 v2 widget 색상/typography/radius를 유지한다.
|
||||||
- 각 섹션 제목은 기존 `view_section_title`을 사용한다.
|
- 각 섹션 제목은 기존 `view_section_title`을 사용한다.
|
||||||
- `최근 데뷔한 크리에이터` item은 기존 `205dp x 259dp` 비율을 유지해 `185dp x 234dp`로 축소하고, 이미지뿐 아니라 dim gradient와 닉네임을 포함한 item root 전체가 `14dp` rounded corner로 잘려야 한다.
|
- `최근 데뷔한 크리에이터` item은 기존 `205dp x 259dp` 비율을 유지해 `185dp x 234dp`로 축소하고, 이미지뿐 아니라 dim gradient와 닉네임을 포함한 item root 전체가 `14dp` rounded corner로 잘려야 한다.
|
||||||
- `최근 응원이 많은 크리에이터`, `장르별 크리에이터`의 모두 팔로우 버튼은 success 전/후 상태가 명확히 구분되어야 한다.
|
- `최근 응원이 많은 크리에이터`의 모두 팔로우 버튼은 success 전/후 상태가 명확히 구분되어야 한다. `장르별 크리에이터`는 추천 탭 UI에 표시하지 않으므로 버튼도 노출하지 않는다.
|
||||||
- 인기 커뮤니티는 keyword 없이 본문, 선택적 이미지, 유료 잠금 상태, reaction row를 보여야 한다.
|
- 인기 커뮤니티는 keyword 없이 본문, 선택적 이미지, 유료 잠금 상태, reaction row를 보여야 한다.
|
||||||
- 유료 미구매 커뮤니티 이미지는 내용을 바로 읽을 수 없도록 blur/lock overlay가 적용되어야 한다.
|
- 유료 미구매 커뮤니티 이미지는 내용을 바로 읽을 수 없도록 blur/lock overlay가 적용되어야 한다.
|
||||||
- 유료 구매 완료 또는 무료 커뮤니티 이미지는 overlay 없이 표시하고, `구매완료` 태그는 표시하지 않는다.
|
- 유료 구매 완료 또는 무료 커뮤니티 이미지는 overlay 없이 표시하고, `구매완료` 태그는 표시하지 않는다.
|
||||||
@@ -361,7 +359,7 @@ HomeRecommendation 화면
|
|||||||
- `AudioContentCardView`에서 `ic_content_tag_point`, `무료`, `FIRST` 태그가 조건에 맞게 표시되고, `ic_content_tag_original`은 표시되지 않는다.
|
- `AudioContentCardView`에서 `ic_content_tag_point`, `무료`, `FIRST` 태그가 조건에 맞게 표시되고, `ic_content_tag_original`은 표시되지 않는다.
|
||||||
- `HomeAiCharacterItem.creatorId`가 UI model까지 보존되고, AI 캐릭터 item 터치 시 `CreatorChannelActivity`에 `creatorId`가 전달된다.
|
- `HomeAiCharacterItem.creatorId`가 UI model까지 보존되고, AI 캐릭터 item 터치 시 `CreatorChannelActivity`에 `creatorId`가 전달된다.
|
||||||
- 제외 대상인 `추천 필모그래피`, `또 다른 모습` 섹션이 화면에 생성되지 않는다.
|
- 제외 대상인 `추천 필모그래피`, `또 다른 모습` 섹션이 화면에 생성되지 않는다.
|
||||||
- 모두 팔로우 API success 후 버튼이 `모두 팔로우 완료`와 `ic_new_following` 상태로 변경된다.
|
- 최근 응원이 많은 크리에이터 모두 팔로우 API success 후 버튼이 `모두 팔로우 완료`와 `ic_new_following` 상태로 변경된다.
|
||||||
- 사업자 정보는 기본 3줄 말줄임, 더보기 후 전체 표시, 접기 후 3줄 복귀가 동작한다.
|
- 사업자 정보는 기본 3줄 말줄임, 더보기 후 전체 표시, 접기 후 3줄 복귀가 동작한다.
|
||||||
- 기존 v2 widget 재사용 범위가 구현 diff에서 확인된다.
|
- 기존 v2 widget 재사용 범위가 구현 diff에서 확인된다.
|
||||||
- 관련 unit test, resource merge, `./gradlew :app:testDebugUnitTest` 또는 구현 범위에 맞는 단일 테스트가 성공한다.
|
- 관련 unit test, resource merge, `./gradlew :app:testDebugUnitTest` 또는 구현 범위에 맞는 단일 테스트가 성공한다.
|
||||||
@@ -372,7 +370,7 @@ HomeRecommendation 화면
|
|||||||
- 홈 추천 API endpoint는 `/api/v2/home/recommendations`로 확정됐다. HTTP method는 `GET`으로 가정하되, 구현 전 백엔드 계약 또는 기존 `HomeApi` 패턴에서 최종 확인한다.
|
- 홈 추천 API endpoint는 `/api/v2/home/recommendations`로 확정됐다. HTTP method는 `GET`으로 가정하되, 구현 전 백엔드 계약 또는 기존 `HomeApi` 패턴에서 최종 확인한다.
|
||||||
- 모두 팔로우 API는 `POST /api/v2/home/recommendations/creators/follow`, request body는 `FollowRecommendedCreatorsRequest(creatorIds: List<Long>)`로 확정됐다.
|
- 모두 팔로우 API는 `POST /api/v2/home/recommendations/creators/follow`, request body는 `FollowRecommendedCreatorsRequest(creatorIds: List<Long>)`로 확정됐다.
|
||||||
- 인증 token 처리 방식은 아직 제공되지 않았다. 구현 전 기존 `HomeApi` 확장 지점과 공통 인증 interceptor 사용 여부를 확인해야 한다.
|
- 인증 token 처리 방식은 아직 제공되지 않았다. 구현 전 기존 `HomeApi` 확장 지점과 공통 인증 interceptor 사용 여부를 확인해야 한다.
|
||||||
- `genreCreators`와 `cheerCreators`의 profile grid는 기존 profile widget이 저장소에 있는지 추가 확인 후 재사용/신규를 결정한다.
|
- `cheerCreators`의 profile grid는 기존 profile widget이 저장소에 있는지 추가 확인 후 재사용/신규를 결정한다. `genreCreators`는 응답/매핑 계약만 유지하고 추천 탭 UI에는 표시하지 않는다.
|
||||||
- 배너 이동 정책은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 처리하는 것으로 확정됐다. `link`가 내부 딥링크이면 기존 딥링크 실행 정책을 사용한다.
|
- 배너 이동 정책은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 처리하는 것으로 확정됐다. `link`가 내부 딥링크이면 기존 딥링크 실행 정책을 사용한다.
|
||||||
- `activityAt`, `releaseDate`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
- `activityAt`, `releaseDate`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
||||||
|
|
||||||
@@ -416,10 +414,15 @@ HomeRecommendation 화면
|
|||||||
- 홈 추천 탭에서 `처음부터 함께 성장!` 섹션을 제거한다.
|
- 홈 추천 탭에서 `처음부터 함께 성장!` 섹션을 제거한다.
|
||||||
- `GET /api/v2/home/recommendations` 응답 계약에서 `firstAudioContents`와 `HomeFirstAudioContentItem`을 제거한다.
|
- `GET /api/v2/home/recommendations` 응답 계약에서 `firstAudioContents`와 `HomeFirstAudioContentItem`을 제거한다.
|
||||||
- UI model, mapper, Fragment binding, adapter, item layout, section title string도 함께 제거한다.
|
- UI model, mapper, Fragment binding, adapter, item layout, section title string도 함께 제거한다.
|
||||||
- 다른 섹션(`recentDebutCreators`, `aiCharacters`, `genreCreators`, `cheerCreators`, `popularCommunityPosts`)의 노출/매핑 계약은 유지한다.
|
- 다른 섹션(`recentDebutCreators`, `aiCharacters`, `cheerCreators`, `popularCommunityPosts`)의 노출/매핑 계약은 유지한다. `genreCreators`는 응답/매핑 계약은 유지하되 추천 탭 UI에는 표시하지 않는다.
|
||||||
|
|
||||||
### 2026-07-10 변경: 커뮤니티 상세 라우팅
|
### 2026-07-10 변경: 커뮤니티 상세 라우팅
|
||||||
- `방금 활동한 크리에이터` 섹션에서 `activityType == COMMUNITY`인 item을 터치하면 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동한다.
|
- `방금 활동한 크리에이터` 섹션에서 `activityType == COMMUNITY`인 item을 터치하면 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동한다.
|
||||||
- `activityType == COMMUNITY`인 `HomeActiveCreatorItem.targetId`는 커뮤니티 게시글 `postId`로 해석해 상세 화면에 전달한다.
|
- `activityType == COMMUNITY`인 `HomeActiveCreatorItem.targetId`는 커뮤니티 게시글 `postId`로 해석해 상세 화면에 전달한다.
|
||||||
- `인기 커뮤니티` 섹션 item을 터치하면 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동한다.
|
- `인기 커뮤니티` 섹션 item을 터치하면 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동한다.
|
||||||
- `인기 커뮤니티` 섹션은 기존 `HomePopularCommunityPostItem.postId`를 상세 화면 식별 값으로 사용한다.
|
- `인기 커뮤니티` 섹션은 기존 `HomePopularCommunityPostItem.postId`를 상세 화면 식별 값으로 사용한다.
|
||||||
|
|
||||||
|
### 2026-07-12 변경: `genreCreators` UI 미표시
|
||||||
|
- 홈 추천 API 응답의 `genreCreators` 필드와 DTO/UI model/mapper 계약은 유지한다.
|
||||||
|
- 메인 홈 추천 탭에서는 장르(카테고리)별 크리에이터 섹션과 해당 모두 팔로우 버튼을 표시하지 않는다.
|
||||||
|
- `cheerCreators`를 포함한 다른 추천 섹션 노출 정책은 변경하지 않는다.
|
||||||
|
|||||||
Reference in New Issue
Block a user