fix(content): 무료 콘텐츠 포인트 사용 조건을 보정한다
This commit is contained in:
111
docs/20260731_무료_콘텐츠_포인트_결제_불가/reviews/phase-2-review.md
Normal file
111
docs/20260731_무료_콘텐츠_포인트_결제_불가/reviews/phase-2-review.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Phase 2 코드 리뷰 보고서
|
||||
|
||||
## 1. 리뷰 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 리뷰 대상 | Phase 2 / `P2-T1`, `P2-GATE` |
|
||||
| 기준 commit 또는 working tree | `eb0ff7537e5fa6b083be21df3319be0ff2ecda51` + staged working tree |
|
||||
| 리뷰 일자 | 2026-07-31 |
|
||||
| 리뷰어 | Codex |
|
||||
| 기준 문서 | `docs/20260731_무료_콘텐츠_포인트_결제_불가/prd.md`, `plan-task.md` |
|
||||
| 리뷰 상태 | 판정 완료 |
|
||||
|
||||
## 2. 리뷰 목적과 범위
|
||||
|
||||
### 목적
|
||||
|
||||
- `POINT-005~006`, `POINT-008` 구현과 완료 증거가 일치하는지 확인한다.
|
||||
- 추천과 전체 탭 POINT 조회가 무료 콘텐츠를 목록·count·pagination 후보에서 제외하는지 확인한다.
|
||||
|
||||
### 포함 범위
|
||||
|
||||
- 코드: 추천·전체 탭 QueryDSL repository 변경
|
||||
- 테스트: 두 repository test와 추천·전체 탭 E2E test
|
||||
- 문서: 관련 PRD, 기존 추천·전체 탭 후속 정정, `P2-T1`, `P2-GATE`, Progress
|
||||
|
||||
### 제외 범위
|
||||
|
||||
- Phase 1 응답 mapper
|
||||
- FREE/AUDIO/정렬 정책의 신규 변경
|
||||
- compile과 test 재실행
|
||||
|
||||
## 3. 판정 기준
|
||||
|
||||
| 심각도 | 기준 |
|
||||
|---|---|
|
||||
| Blocker | 보안·데이터 손실 위험, 핵심 흐름 불능, 완료 판정을 무효화하는 문제 |
|
||||
| High | 확정 요구사항 또는 공개 API 계약 위반 |
|
||||
| Medium | 제한된 조건의 목록·count·pagination 불일치 |
|
||||
| Low | 문서 정합성 또는 비핵심 회귀 증거 누락 |
|
||||
|
||||
## 4. 검토한 근거
|
||||
|
||||
### 문서와 코드
|
||||
|
||||
- 요구사항: `POINT-005~006`, `POINT-008`
|
||||
- 계획: `P2-T1`, `P2-GATE`
|
||||
- 코드:
|
||||
- `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/recommendation/adapter/out/persistence/DefaultAudioRecommendationQueryRepository.kt:135`
|
||||
- `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/all/adapter/out/persistence/DefaultMainContentAllQueryRepository.kt:35`
|
||||
- `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/all/adapter/out/persistence/DefaultMainContentAllQueryRepository.kt:409`
|
||||
- 테스트:
|
||||
- `src/test/kotlin/kr/co/vividnext/sodalive/v2/content/recommendation/adapter/out/persistence/DefaultAudioRecommendationQueryRepositoryTest.kt:87`
|
||||
- `src/test/kotlin/kr/co/vividnext/sodalive/v2/content/all/adapter/out/persistence/DefaultMainContentAllQueryRepositoryTest.kt:43`
|
||||
- `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/recommendation/adapter/in/web/AudioRecommendationEndToEndTest.kt:42`
|
||||
- `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/all/adapter/in/web/MainContentAllEndToEndTest.kt:97`
|
||||
|
||||
### 실행한 검증
|
||||
|
||||
| 명령 또는 수동 검증 | 결과 | 핵심 증거 |
|
||||
|---|---|---|
|
||||
| `git diff --cached --check` | 성공 | 출력 없음 |
|
||||
| staged diff와 `rg` 기반 조건·호출 대조 | 성공 | 추천은 유료 POINT 조건, 전체 탭 list/count는 같은 `audioCondition` 공유 |
|
||||
| `./gradlew --no-daemon tasks --all` | 성공 | `BUILD SUCCESSFUL`, exit code 0 |
|
||||
| compile/test | 미실행 | 사용자 지시에 따라 기존 성공 기록만 확인 |
|
||||
|
||||
## 5. 발견 사항 요약
|
||||
|
||||
확정 발견 사항 없음.
|
||||
|
||||
## 6. 검토 결과
|
||||
|
||||
- 추천 `findPointAudios`는 `isPointAvailable.isTrue.and(price.gt(0))`을 조회 전에 적용해 limit 후보에서도 무료 콘텐츠를 제외한다.
|
||||
- 전체 탭 `countAudios`와 `findAudios`는 동일한 `audioCondition`과 `optionalAudioPointCondition`을 사용한다.
|
||||
- 전체 탭 E2E는 유료 1건과 무료·저장값 true 1건에서 `size=1`로 조회해 `totalCount=1`, 목록 1건,
|
||||
`hasNext=false`를 함께 검증한다.
|
||||
- repository test는 유료·저장값 false, 유료·저장값 true, 무료·저장값 true를 구분한다.
|
||||
- 기존 추천·전체 탭 문서는 2026-07-31 후속 요구사항 정정을 누적해 현재 PRD와 일치한다.
|
||||
|
||||
## 7. 확정 항목의 plan·goal 전환
|
||||
|
||||
전환 항목 없음.
|
||||
|
||||
## 8. 리뷰 종료 판정
|
||||
|
||||
| 판정 항목 | 결과 | 근거 |
|
||||
|---|---|---|
|
||||
| 리뷰 범위 전체 확인 | 충족 | Phase 2 production/test/document diff와 관련 호출 경계 확인 |
|
||||
| 후보 항목 판정 완료 | 충족 | 후보 없음 |
|
||||
| 확정 항목 plan 반영 | 해당 없음 | 확정 발견 사항 없음 |
|
||||
| 보류 항목의 담당·재개 조건 기록 | 해당 없음 | 보류 없음 |
|
||||
| 검증 명령과 결과 기록 | 충족 | 정적 검증 기록, test 미실행 사유 명시 |
|
||||
|
||||
**최종 결론:** 확정 발견 사항 없음
|
||||
|
||||
**남은 항목:** 없음
|
||||
|
||||
## 9. 후속 상태 확인
|
||||
|
||||
### 1차 재확인 — 2026-07-31
|
||||
|
||||
- 무엇을: Phase 1의 `P1-R2` 수정이 Phase 2 POINT 조회 계약에 영향을 주지 않았는지 재검토했다.
|
||||
- 왜: 후속 test 변경 뒤에도 POINT 목록·count·pagination 조건과 기존 Phase 2 판정이 유효한지 확인하기 위해서다.
|
||||
- 어떻게:
|
||||
- production diff — `P1-R2`에 따른 Phase 2 repository 변경 없음 확인.
|
||||
- repository와 E2E test 정적 대조 — 추천 유료 POINT 조건과 전체 탭 list/count 공통 조건 유지 확인.
|
||||
- `git diff --check`, `git diff --cached --check` — 출력 없음.
|
||||
- `./gradlew --no-daemon tasks --all` — `BUILD SUCCESSFUL`, exit code 0.
|
||||
- compile/test — 사용자 지시에 따라 이번 재검토에서는 실행하지 않음.
|
||||
- 판정: 기존 Phase 2 판정 유지.
|
||||
- 남은 항목: 없음.
|
||||
Reference in New Issue
Block a user