docs(creator): 라이브 탭 API 계약을 기록한다
This commit is contained in:
@@ -69,6 +69,7 @@
|
||||
- 최초 조회의 정렬 기본값은 `ContentSort.LATEST`이다.
|
||||
- 최초 조회의 `page` 시작 값은 `0`이다.
|
||||
- 최초 조회 실패, 정렬 변경 실패, 다음 페이지 로딩 실패는 기존 프로젝트의 에러 표시/재시도 패턴을 구현 계획 단계에서 확인해 따른다.
|
||||
- 최초 조회 실패 후 사용자가 retry 버튼을 누르면 `retryLive()`로 현재 `creatorId`의 첫 페이지를 다시 요청할 수 있어야 한다.
|
||||
- `hasNext == true`일 때 다음 페이지 요청은 현재 응답의 `page + 1` 값을 사용한다.
|
||||
- 중복 pagination 요청이 발생하지 않도록 loading 중 추가 요청을 막아야 한다.
|
||||
- 정렬 변경 시 기존 목록과 page 상태를 초기화하고 첫 페이지부터 다시 조회한다.
|
||||
@@ -111,7 +112,10 @@ enum class ContentSort {
|
||||
|
||||
#### Edge Cases
|
||||
- `currentLive == null`이면 현재 라이브 카드 영역을 표시하지 않고 라이브 다시듣기 목록이 Sort-bar 아래에 이어진다.
|
||||
- `liveReplayContents`가 비어 있고 `currentLive == null`이면 기존 앱 패턴에 맞는 empty 상태를 표시한다.
|
||||
- `liveReplayContents`가 비어 있고 `currentLive == null`이면 Figma `290:8959` 기준의 전체 empty 상태를 표시한다.
|
||||
- 전체 empty 상태에서는 Sort-bar, 현재 라이브 카드, 라이브 다시듣기 리스트를 제거하고 화면 중앙에 `크리에이터가 라이브를 준비 중입니다.\n기대해 주세요!` 문구를 표시한다.
|
||||
- 전체 empty 상태가 본인 채널에 표시되는 경우에도 empty 문구는 동일하게 표시하고, 하단 `라이브 시작하기` CTA는 본인 채널 정책에 따라 계속 표시한다.
|
||||
- 최초 조회 실패로 전체 error 상태가 표시되는 경우 안내 문구 아래에 retry 버튼을 표시한다. retry 버튼은 `retryLive()`를 호출해 현재 `creatorId`의 첫 페이지를 다시 요청한다.
|
||||
- `duration == null`이면 duration 영역은 빈 문자열 노출 대신 숨김 또는 기존 duration placeholder 정책을 따른다.
|
||||
- `imageUrl == null` 또는 이미지 로딩 실패 시 기존 이미지 placeholder 정책을 따른다.
|
||||
- 다음 페이지 응답의 `liveReplayContents`가 비어 있어도 `hasNext` 값 기준으로 이후 로딩 가능 여부를 갱신한다.
|
||||
@@ -238,6 +242,7 @@ Sort-bar는 라이브 다시듣기 총 개수와 현재 정렬 상태를 표시
|
||||
- 컨텍스트 메뉴는 dark surface, 14dp radius, border, focused item 배경 차이를 유지한다.
|
||||
- 정렬 메뉴는 BottomSheet처럼 화면 하단에서 올라오지 않고 Sort-bar 정렬 영역 아래에 떠야 한다.
|
||||
- 본인 채널의 `라이브 시작하기` 버튼은 Figma `665:19359`처럼 하단 고정 CTA로 표시하고, 목록 컨텐츠 위를 덮지 않도록 스크롤 하단 여백을 확보한다.
|
||||
- 전체 empty 상태는 Figma `290:8959`처럼 Sort-bar와 리스트 없이 중앙 안내 문구를 표시한다.
|
||||
- 다국어 문자열 길이 증가 시 title, 정렬 label, 상태 문구가 겹치지 않도록 말줄임 또는 최소 폭 정책을 적용한다.
|
||||
|
||||
---
|
||||
@@ -248,6 +253,8 @@ Sort-bar는 라이브 다시듣기 총 개수와 현재 정렬 상태를 표시
|
||||
- 라이브 탭 전용 `Fragment`, `ViewModel`, UI model, mapper, adapter, popup/helper는 `kr.co.vividnext.sodalive.v2.creator.channel.live` 하위에 작성한다.
|
||||
- 크리에이터 채널 API와 Repository는 홈 탭과 라이브 탭이 함께 사용하는 공통 계층으로 보고, 기존 `CreatorChannelHomeApi`/`CreatorChannelHomeRepository`는 `CreatorChannelApi`/`CreatorChannelRepository`로 rename한다.
|
||||
- 라이브 탭용 별도 `CreatorChannelLiveApi`/`CreatorChannelLiveRepository`는 만들지 않는다. 기존 Repository가 홈 API 외 팔로우, 대화, 후원, 신고 등 채널 공통 액션을 이미 담당하므로 공통 채널 Repository로 명명하는 편이 역할에 맞다.
|
||||
- `ContentSort`는 v2 API에서 공통적으로 사용하는 정렬 enum이므로 `kr.co.vividnext.sodalive.v2.common.data` 패키지에 둔다.
|
||||
- `CreatorChannelLiveTabResponse`는 크리에이터 채널 라이브 탭 응답 전용 모델이므로 `kr.co.vividnext.sodalive.v2.creator.channel.live.data` 패키지에 둔다.
|
||||
- 크리에이터 채널 홈 탭에서 이미 정의된 공통 모델/컴포넌트가 있으면 우선 재사용한다.
|
||||
- API DTO는 서버 계약과 동일한 필드명을 사용한다.
|
||||
- `ContentSort`는 API 전송 값과 UI label을 분리하고, UI label은 문자열 리소스로 관리한다.
|
||||
@@ -255,6 +262,8 @@ Sort-bar는 라이브 다시듣기 총 개수와 현재 정렬 상태를 표시
|
||||
- 본인 채널 판정은 크리에이터 채널 홈 탭 또는 공통 채널 컨테이너에서 사용하는 기존 본인 페이지 판정 값을 우선 재사용한다.
|
||||
- `BuildConfig` 값이나 토큰/URL 같은 민감값은 로그, Toast, crash message에 노출하지 않는다.
|
||||
- 구현 전 `docs/20260617_크리에이터_채널_라이브_탭/plan-task.md`를 작성한 뒤 해당 계획에 따라 최소 구현한다.
|
||||
- Fragment/View 재생성 또는 탭 재바인딩으로 같은 `creatorId`의 `loadLive()`가 다시 호출되면 기존 ViewModel 상태를 유지하고 첫 페이지를 재호출하지 않는다. 명시적 새로고침이 필요하면 별도 refresh API로 분리한다.
|
||||
- 최초 조회 실패로 인한 error 상태의 재시도는 `retryLive()`로 분리한다. `loadLive()`는 같은 `creatorId`와 기존 상태가 있으면 상태 보존을 위해 no-op으로 유지한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -284,6 +293,7 @@ Sort-bar는 라이브 다시듣기 총 개수와 현재 정렬 상태를 표시
|
||||
- `라이브 시작하기` 버튼 icon drawable 리소스명은 `ic_new_create_live`이다.
|
||||
- 라이브 탭 전용 코드는 `kr.co.vividnext.sodalive.v2.creator.channel.live` 하위에 둔다.
|
||||
- 채널 API/Repository는 `CreatorChannelApi`/`CreatorChannelRepository`로 rename해 홈 탭과 라이브 탭이 함께 사용한다.
|
||||
- `currentLive == null`이고 `liveReplayContents.isEmpty()`인 전체 empty 상태에서는 Sort-bar/list를 숨기고 중앙 empty 문구를 표시한다. 본인 채널의 하단 `라이브 시작하기` CTA는 empty 상태와 무관하게 본인 채널 정책대로 유지한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -294,6 +304,7 @@ Sort-bar는 라이브 다시듣기 총 개수와 현재 정렬 상태를 표시
|
||||
- 라이브 다시듣기 item Figma: `290:8954`, `290:8956`
|
||||
- 정렬 컨텍스트 메뉴 Figma: `290:9041`
|
||||
- 본인 채널 라이브 탭 및 하단 CTA Figma: `665:19359`, `665:19371`
|
||||
- 전체 empty 상태 Figma: `290:8959`
|
||||
- 기존 크리에이터 채널 홈 탭 PRD: `docs/20260611_크리에이터_채널_홈_탭/prd.md`
|
||||
- PRD template: `docs/prd/sample-prd.md`
|
||||
- 문서 규칙: `docs/agent-guides/work-plan-docs.md`
|
||||
|
||||
Reference in New Issue
Block a user