docs(recommendation): 추천 탭 배너 정책과 검증 기록을 추가한다
This commit is contained in:
71
docs/20260805_추천탭_배너_조회조건/prd.md
Normal file
71
docs/20260805_추천탭_배너_조회조건/prd.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# PRD: 추천 탭 배너 조회 조건 보정
|
||||
|
||||
## 문서 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 문서 상태 | 구현 완료 |
|
||||
| 작성일 | 2026-08-05 |
|
||||
| 최종 수정일 | 2026-08-05 |
|
||||
| 대상 제품 | 메인 홈 추천 탭, 메인 콘텐츠 추천 탭 |
|
||||
| 작성자·결정권자 | 사용자 |
|
||||
| 관련 구현 계획 | `docs/20260805_추천탭_배너_조회조건/plan-task.md` |
|
||||
| 관련 기존 문서 | `docs/20260529_메인_홈_추천_API/prd.md`, `docs/20260623_메인_콘텐츠_추천_탭_API/prd.md` |
|
||||
|
||||
## 1. Overview
|
||||
|
||||
메인 홈 추천 API와 메인 콘텐츠 추천 API의 배너 조회에 회원의 성인 콘텐츠 조회 가능 여부를 반영하고, 두 화면이 서로 다른 탭의 배너를 조회하도록 조건을 보정한다.
|
||||
|
||||
## 2. Problem Statement
|
||||
|
||||
- 두 추천 API가 모두 `content_banner.tab_id IS NULL`인 같은 배너를 조회한다.
|
||||
- 두 추천 API의 배너 조회가 `content_banner.is_adult`를 필터링하지 않아 성인 콘텐츠 조회 불가 사용자에게 성인 배너가 노출될 수 있다.
|
||||
|
||||
문제를 해결했다는 판단은 두 API의 탭 조건과 성인 배너 노출 조건이 Repository 테스트로 구분되어 검증되는 것으로 한다.
|
||||
|
||||
## 3. Goals
|
||||
|
||||
- 성인 콘텐츠 조회 불가 사용자는 `is_adult = false`인 배너만 조회한다.
|
||||
- 성인 콘텐츠 조회 가능 사용자는 성인·비성인 배너를 모두 조회한다.
|
||||
- 메인 홈 추천 API는 기존처럼 `tab_id IS NULL`인 배너를 조회한다.
|
||||
- 메인 콘텐츠 추천 API는 `tab_id = 2`인 배너를 조회한다.
|
||||
|
||||
## 4. Non-Goals
|
||||
|
||||
- 공개 API endpoint와 응답 DTO를 변경하지 않는다.
|
||||
- 배너 언어 필터, 정렬, 최대 조회 개수, 대상 활성/차단 정책을 변경하지 않는다.
|
||||
- 배너 또는 탭 데이터와 DB 스키마를 변경하지 않는다.
|
||||
|
||||
## 5. 기능 요구사항
|
||||
|
||||
| ID | 상태 | 요구사항 | 수용 기준 | Goal 연결 |
|
||||
|---|---|---|---|---|
|
||||
| `BANNER-001` | 확정 | `GET /api/v2/home/recommendations`의 배너는 `tab_id IS NULL` 조건을 유지한다. | 탭이 없는 활성 배너만 조회하고 `tab_id = 2` 배너는 조회하지 않는다. | `P1-T1` |
|
||||
| `BANNER-002` | 확정 | `GET /api/v2/audio/recommendations`의 배너는 `tab_id = 2` 조건을 사용한다. | `tab_id = 2`인 활성 배너만 조회하고 탭이 없는 배너는 조회하지 않는다. | `P1-T1` |
|
||||
| `BANNER-003` | 확정 | 두 API 모두 회원의 성인 콘텐츠 조회 가능 여부를 배너 조회에 반영한다. | 조회 불가이면 비성인 배너만, 조회 가능이면 성인·비성인 배너를 모두 반환한다. | `P1-T1` |
|
||||
| `BANNER-004` | 확정 | 기존 배너 활성/차단/대상 유효성/정렬/limit 정책을 유지한다. | 기존 관련 Repository 테스트가 계속 통과한다. | `P1-GATE` |
|
||||
|
||||
## 6. API 계약
|
||||
|
||||
| Method | Path | 변경 내용 |
|
||||
|---|---|---|
|
||||
| `GET` | `/api/v2/home/recommendations` | 응답 스키마 변경 없이 배너의 성인 조회 조건만 추가한다. |
|
||||
| `GET` | `/api/v2/audio/recommendations` | 응답 스키마 변경 없이 배너 탭 조건을 `tab_id = 2`로 변경하고 성인 조회 조건을 추가한다. |
|
||||
|
||||
## 7. 성공 기준
|
||||
|
||||
- [x] 홈 추천 배너가 `tab_id IS NULL` 조건을 유지한다.
|
||||
- [x] 콘텐츠 추천 배너가 `tab_id = 2` 조건만 사용한다.
|
||||
- [x] 성인 콘텐츠 조회 불가/가능 사용자의 배너 결과가 확정 정책과 일치한다.
|
||||
- [x] 기존 배너 응답 스키마와 활성/차단/정렬/limit 정책이 유지된다.
|
||||
|
||||
## 8. Open Questions
|
||||
|
||||
- 없음.
|
||||
|
||||
## 9. Decision Log
|
||||
|
||||
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 요구사항·Goal |
|
||||
|---|---|---|---|---|---|
|
||||
| 2026-08-05 | `DEC-001` | 확정 | 성인 조회 불가이면 비성인 배너만, 조회 가능이면 성인·비성인 배너를 모두 조회한다. | 사용자 답변 A | `BANNER-003`, `P1-T1` |
|
||||
| 2026-08-05 | `DEC-002` | 확정 | 홈 추천은 `tab_id IS NULL`, 콘텐츠 추천은 `tab_id = 2`를 사용한다. | 사용자 직접 요구사항 | `BANNER-001`, `BANNER-002`, `P1-T1` |
|
||||
Reference in New Issue
Block a user