2.8 KiB
2.8 KiB
20260324 차단 유저 구매 콘텐츠 상세 조회 예외 처리
목적
- 차단 관계가 있어도 조회자가 해당 콘텐츠를 구매한 경우에는 상세 조회를 허용한다.
- 차단 예외 경로에서는 댓글 및 시리즈 내 이전/다음 콘텐츠 정보를 노출하지 않는다.
구현 체크리스트
AudioContentService.getDetail에서 구매 여부(isExistOrderedAndOrderType)를 차단 판정보다 먼저 계산- 차단 + 미구매인 경우 기존
content.error.blocked_access예외 유지 - 차단 + 구매인 경우 상세 조회 허용
- 차단 + 구매인 경우 댓글 목록/댓글 수 조회 쿼리 미실행 및 응답을
[],0으로 반환 - 차단 + 구매인 경우
previousContent,nextContent조회 쿼리 미실행 및 응답을null로 반환 - 정적 진단/테스트/빌드 검증 수행
완료 기준 (Pass/Fail)
- AC1: 차단 + 미구매 요청 시
SodaException(messageKey = "content.error.blocked_access")가 발생해야 한다.- QA:
getDetail분기 코드 확인 및 관련 테스트/빌드 통과
- QA:
- AC2: 차단 + 구매 요청 시 상세 조회가 실패하지 않아야 한다.
- QA:
getDetail분기 코드 확인 및 관련 테스트/빌드 통과
- QA:
- AC3: 차단 + 구매 요청 시 댓글/이전/다음 콘텐츠 조회 로직이 실행되지 않아야 한다.
- QA: 조건문 가드로
commentRepository.findByContentId,totalCountCommentByContentId,findPreviousContent,findNextContent호출 차단 확인
- QA: 조건문 가드로
검증 기록
-
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 - 결과: 성공
- 명령:
- 무엇을: