docs(creator): 채널 라이브 API 구조 계획을 갱신한다

This commit is contained in:
2026-06-17 16:37:35 +09:00
parent 04cedac1fb
commit 2ea030e0d6
2 changed files with 200 additions and 89 deletions

View File

@@ -15,6 +15,8 @@
## 3. Goals
- 크리에이터 채널 라이브 탭 조회 API를 제공한다.
- 클라이언트에서 호출하는 공개 API는 `kr.co.vividnext.sodalive.v2.api.creator.channel.live` 하위 조립 계층에 둔다.
- 라이브, 다시듣기 콘텐츠, 시리즈/소장 상태처럼 재사용 가능한 조회 책임은 API 패키지 밖의 도메인 패키지에 둔다.
- 요청은 `creatorId`와 정렬 순서를 받는다.
- 정렬 순서를 보내지 않으면 최신순을 기본값으로 사용한다.
- 응답에는 `다시듣기` 콘텐츠 개수, 현재 진행 중인 라이브, `다시듣기` 콘텐츠 목록, 실제 적용된 정렬 순서를 포함한다.
@@ -27,7 +29,8 @@
## 4. Non-Goals
- 이번 범위는 크리에이터 채널 `라이브` 탭 조회 API만 포함한다.
- 기존 크리에이터 채널 홈 API 응답 스키마는 변경하지 않는다.
- 기존 크리에이터 채널 홈 API endpoint와 기존 응답 필드의 의미는 변경하지 않는다.
- 기존 크리에이터 채널 홈 API를 `v2.api.*` 조립 계층 + 도메인 패키지 구조로 옮기는 리팩토링은 이번 범위에서 구현하지 않는다.
- 라이브 생성, 예약, 입장, 종료 API는 포함하지 않는다.
- 오디오 콘텐츠 구매, 소장, 대여, 결제 API는 포함하지 않는다.
- `다시듣기` 테마명 관리 화면 또는 테마 마이그레이션은 포함하지 않는다.
@@ -57,7 +60,10 @@
#### Requirements
- 신규 API는 크리에이터 채널 전용 v2 API로 작성한다.
- 신규 코드 위치는 기존 크리에이터 채널 홈 API와 같은 `kr.co.vividnext.sodalive.v2.creator.channel` 하위 경계를 기본 후보로 한다.
- 클라이언트 공개 API controller/facade/response DTO는 `kr.co.vividnext.sodalive.v2.api.creator.channel.live` 하위에 작성한다.
- API 조립 계층은 필요한 도메인 조회 서비스를 호출해 라이브 탭 응답을 조립한다.
- API 조립 계층이 호출하는 도메인 조회 코드는 `kr.co.vividnext.sodalive.v2.live`, `kr.co.vividnext.sodalive.v2.content`, `kr.co.vividnext.sodalive.v2.series` 또는 채널 문맥이 필요한 경우 `kr.co.vividnext.sodalive.v2.creator.channel.live` 하위에 둔다.
- 도메인 패키지는 `kr.co.vividnext.sodalive.v2.api.*` 패키지에 의존하지 않는다.
- API endpoint는 `GET /api/v2/creator-channels/{creatorId}/live`를 기본안으로 한다.
- `creatorId`는 path variable로 받는다.
- 정렬 순서는 query parameter로 받는다.
@@ -238,9 +244,10 @@ enum class ContentSort {
- 빌드 도구는 Gradle Wrapper(`./gradlew`)를 사용한다.
- Kotlin + Spring Boot 2.7.14 기존 스타일을 따른다.
- 신규 공개 API 스키마는 구현 전에 PRD와 구현 계획/TASK 문서에 명시한다.
- 기존 `CreatorChannelLiveResponse`, `CreatorChannelAudioContentResponse` DTO를 재사용한다.
- `CreatorChannelAudioContentResponse`에는 `isOwned`, `isRented`추가하고, 라이브 다시듣기와 다음 범위의 오디오 콘텐츠 조회 API 같은 응답 DTO를 사용하도록 한다.
- 기존 크리에이터 채널 홈 API의 패키지, 인증, 예외, 성인 콘텐츠 노출, 차단 관계 정책을 우선 재사용한다.
- 기존 `CreatorChannelLiveResponse`, `CreatorChannelAudioContentResponse`와 필드/의미가 어긋나지 않도록 라이브 탭 API 응답 DTO를 작성한다.
- 라이브 탭 API의 `CreatorChannelAudioContentResponse`에는 `isOwned`, `isRented`포함하고, 다음 범위의 오디오 콘텐츠 조회 API에서도 같은 의미사용할 수 있게 한다.
- 기존 크리에이터 채널 홈 API의 인증, 예외, 성인 콘텐츠 노출, 차단 관계 정책은 재사용하되, 신규 공개 API 파일 위치는 `v2.api.*` 조립 계층을 따른다.
- 기존 크리에이터 채널 홈 API가 `v2.creator.channel.adapter.in.web`에 위치한 것은 현재 구조의 예외로 보고, 이번 라이브 탭 구현에서는 같은 예외를 확장하지 않는다.
- 페이징 응답은 기존 v2 홈 추천 페이지 응답과 같은 `page`, `size`, `hasNext` 패턴을 따른다.
- `다시듣기` 테마명은 기존 코드의 문자열 상수와 중복되지 않도록 구현 시 공용 상수 또는 정책 객체로 관리하는 방안을 검토한다.
- `ContentSort`는 API binding, service 정책, 테스트에서 같은 타입을 사용한다.
@@ -258,4 +265,6 @@ enum class ContentSort {
## 10. Resolved Decisions
- 인기순 매출 기준은 대여/소장 여부와 관계없이 순수하게 결제된 캔 매출만 사용한다.
- 라이브 탭 신규 API는 기존 크리에이터 채널 홈 API 위치를 따라가지 않고, `v2.api.creator.channel.live` 공개 API 조립 계층으로 작성한다.
- 기존 크리에이터 채널 홈 API의 패키지 구조 정렬은 이번 라이브 탭 구현과 분리해 다음 범위에서 별도 리팩토링한다.
- `isOwned == true``isRented == true`가 동시에 발생할 가능성은 없지만, 만약 그런 상황이 발생하면 둘 다 `true`로 내려준다.