From 074c035c34aa2b57c1cb03cc61630f191d059881 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 23 Jun 2026 11:56:42 +0900 Subject: [PATCH] =?UTF-8?q?docs(home-recommendation):=20AI=20=EC=BA=90?= =?UTF-8?q?=EB=A6=AD=ED=84=B0=20creatorId=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=EC=9D=84=20=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260529_메인_홈_추천_API/prd.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/20260529_메인_홈_추천_API/prd.md b/docs/20260529_메인_홈_추천_API/prd.md index c4fcaa16..3d132916 100644 --- a/docs/20260529_메인_홈_추천_API/prd.md +++ b/docs/20260529_메인_홈_추천_API/prd.md @@ -50,6 +50,7 @@ - 사용자는 최근 데뷔한 크리에이터를 추천 점수순으로 보고 전체 리스트도 확인하고 싶다. - 사용자는 신규 크리에이터가 올린 첫 번째 오디오 콘텐츠를 발견하고 전체보기로 더 탐색하고 싶다. - 사용자는 AI 캐릭터를 추천 점수순으로 보고 채팅 화면으로 이동하고 싶다. +- 사용자는 추천 AI 캐릭터의 채팅 화면뿐 아니라 크리에이터 채널로도 이동할 수 있도록 AI 캐릭터에 대응하는 creator id를 받고 싶다. - 사용자는 내가 봤던 콘텐츠 장르 또는 랜덤 장르 기준으로 팔로우하지 않은 크리에이터를 추천받고 싶다. - 사용자는 장르 추천에서 여러 크리에이터를 한 번에 팔로우하고 싶다. - 사용자는 최근 응원이 많은 크리에이터를 순위로 보고 싶다. @@ -163,7 +164,9 @@ - AI 캐릭터 리스트를 조회한다. - 홈 첫 화면은 10개를 조회한다. - 전체 리스트 API는 페이징으로 조회할 수 있어야 한다. -- 노출 정보는 캐릭터 이름, 캐릭터 소개, 작품명, 사용자들이 친 전체 채팅 수를 포함한다. +- 노출 정보는 캐릭터 id, AI 캐릭터에 대응하는 creator id, 캐릭터 이름, 캐릭터 소개, 프로필 이미지, 작품명, 사용자들이 친 전체 채팅 수를 포함한다. +- AI 캐릭터에 대응하는 creator id는 `ChatCharacter.creatorMember.id`이며, 해당 Member는 `role = CREATOR`, `memberKind = AI_CHARACTER`인 내부 크리에이터 Member다. +- 기존 `characterId`는 AI 채팅 이동 대상 id로 유지하고, 신규 `creatorId`는 크리에이터 채널/Member 기반 기능 이동 대상 id로 별도 제공한다. - 작품명은 오리지널 작품 캐릭터인 경우에만 내려준다. - 1차 정렬은 AI 채팅 추천 점수 내림차순이다. - 2차 정렬은 동일 점수인 경우 랜덤이다. @@ -177,6 +180,7 @@ #### Edge Cases - 비활성 또는 노출 제한 캐릭터는 제외한다. +- 활성 `ChatCharacter`에 `creatorMember`가 없거나 연결된 Member가 비활성/비 CREATOR/비 AI_CHARACTER이면 해당 AI 캐릭터는 홈 추천 응답에서 제외한다. ### Feature H. 장르의 크리에이터 @@ -258,6 +262,7 @@ - `v2.api.home`과 `v2.recommendation` 모두 필요한 범위에서 경량 헥사고날 아키텍처를 적용하고, 기본 하위 패키지는 `application`, `domain`, `port`, `adapter`, `dto`를 사용한다. - Controller는 `adapter.in.web`, application service/use case는 `application`, repository/cache/scheduler 구현은 `adapter.out.*`, application이 외부 조회/저장 구현에 의존하는 계약은 `port.out`에 둔다. - `port.in`은 여러 adapter에서 같은 use case를 재사용하거나 진입 계약을 명확히 해야 할 때만 둔다. +- 홈 추천 AI 캐릭터 응답의 `creatorId` 추가는 기존 `characterId` 의미를 변경하지 않는 additive schema 변경으로만 처리한다. - 정책, 점수 계산, 노출 조건, 스냅샷 모델처럼 인프라 의존이 없는 코드는 `domain`에 둔다. - `kr.co.vividnext.sodalive.v2` 외부 코드는 엔티티만 재활용하고, Controller/Service/Repository/DTO는 신규 작성한다. - 기존 엔티티 후보는 `Member`, `LiveRoom`, `AudioContent`, `AudioContentBanner`, `CreatorFollowing`, `CreatorCommunity`, `CreatorCommunityLike`, `CreatorCommunityComment`, `CreatorCheers`, `ChannelDonationMessage`, `AudioContentComment`, `AudioContentLike`, `ChatCharacter` 등이다.