fix(content): 차단된 구매자의 오디오 상세 조회를 허용한다
This commit is contained in:
40
docs/20260324_차단유저구매콘텐츠상세조회예외처리.md
Normal file
40
docs/20260324_차단유저구매콘텐츠상세조회예외처리.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 20260324 차단 유저 구매 콘텐츠 상세 조회 예외 처리
|
||||
|
||||
## 목적
|
||||
- 차단 관계가 있어도 조회자가 해당 콘텐츠를 구매한 경우에는 상세 조회를 허용한다.
|
||||
- 차단 예외 경로에서는 댓글 및 시리즈 내 이전/다음 콘텐츠 정보를 노출하지 않는다.
|
||||
|
||||
## 구현 체크리스트
|
||||
- [x] `AudioContentService.getDetail`에서 구매 여부(`isExistOrderedAndOrderType`)를 차단 판정보다 먼저 계산
|
||||
- [x] 차단 + 미구매인 경우 기존 `content.error.blocked_access` 예외 유지
|
||||
- [x] 차단 + 구매인 경우 상세 조회 허용
|
||||
- [x] 차단 + 구매인 경우 댓글 목록/댓글 수 조회 쿼리 미실행 및 응답을 `[]`, `0`으로 반환
|
||||
- [x] 차단 + 구매인 경우 `previousContent`, `nextContent` 조회 쿼리 미실행 및 응답을 `null`로 반환
|
||||
- [x] 정적 진단/테스트/빌드 검증 수행
|
||||
|
||||
## 완료 기준 (Pass/Fail)
|
||||
- [x] AC1: 차단 + 미구매 요청 시 `SodaException(messageKey = "content.error.blocked_access")`가 발생해야 한다.
|
||||
- QA: `getDetail` 분기 코드 확인 및 관련 테스트/빌드 통과
|
||||
- [x] AC2: 차단 + 구매 요청 시 상세 조회가 실패하지 않아야 한다.
|
||||
- QA: `getDetail` 분기 코드 확인 및 관련 테스트/빌드 통과
|
||||
- [x] AC3: 차단 + 구매 요청 시 댓글/이전/다음 콘텐츠 조회 로직이 실행되지 않아야 한다.
|
||||
- QA: 조건문 가드로 `commentRepository.findByContentId`, `totalCountCommentByContentId`, `findPreviousContent`, `findNextContent` 호출 차단 확인
|
||||
|
||||
## 검증 기록
|
||||
- 1차 구현: 진행 전
|
||||
- 무엇을: 요구사항 분석 및 기존 패턴 탐색
|
||||
- 왜: 차단/구매 예외 규칙을 기존 서비스 로직과 일관되게 반영하기 위해
|
||||
- 어떻게: `grep`, `ast-grep`, explore/librarian 백그라운드 탐색 수행
|
||||
|
||||
- 2차 구현: 기능 반영 및 시나리오 검증
|
||||
- 무엇을: `AudioContentService.getDetail`에서 차단+구매 예외를 허용하고, 해당 경로에서 댓글/이전·다음 조회를 생략하도록 분기 로직을 수정했다. 또한 `AudioContentServiceTest`를 추가해 차단+미구매/차단+구매 시나리오를 실제 메서드 호출로 검증했다.
|
||||
- 왜: 요청사항(구매자 접근 허용 + 댓글/이전·다음 비조회)을 코드 레벨뿐 아니라 실행 가능한 테스트로 재현해 회귀를 방지하기 위해.
|
||||
- 어떻게:
|
||||
- 명령: `lsp_diagnostics` (`AudioContentService.kt`, `AudioContentServiceTest.kt`)
|
||||
- 결과: 실패 (현재 실행 환경에 Kotlin LSP 미구성으로 `.kt` 진단 불가)
|
||||
- 명령: `./gradlew test --tests "kr.co.vividnext.sodalive.content.AudioContentServiceTest"`
|
||||
- 결과: 성공 (신규 2개 시나리오 테스트 통과)
|
||||
- 명령: `./gradlew test`
|
||||
- 결과: 성공
|
||||
- 명령: `./gradlew build`
|
||||
- 결과: 성공
|
||||
Reference in New Issue
Block a user