개요
리뷰를 기존 콘텐츠 모더레이션 체계(커뮤니티/댓글과 동일)에 연동합니다. 비속어 마스킹(L1) + 신고 임계 자동숨김(L2) + 운영자 검토.
작업 내용
L1 비속어 마스킹
- 리뷰 작성 시 본문을
ProfanityFilter.mask()로 자동 마스킹(공백·기호 우회 포함)
L2 신고 임계 자동숨김
Review.hidden 필드 + hideByReport()/restore()/isHidden()
- 목록/상세/미디어 조회에서 hidden 제외(상세는 404)
ReviewModerationService implements ContentModerationPort: REVIEW 대상만 처리
- 포트 다중 구현 배선:
ReportServiceImpl이 List<ContentModerationPort>를 주입받아 등록된 모든 구현에 위임(각 구현은 자기 targetType만 처리). CommunityModerationService의 REVIEW case는 no-op로 변경
운영자 검토 API (OPERATOR)
GET /api/v1/reviews/moderation/hidden 숨김 리뷰 목록
PATCH /api/v1/reviews/moderation/{uuid}/restore 숨김 해제
신고/차단 연동
- 신고: 기존
POST /api/v1/reports (targetType=REVIEW) 재사용, 신고쪽 코드 변경 없음
- 차단: 기존
POST /api/v1/blocks 재사용, 리뷰 목록/상세(404)/미디어에 양방향 숨김 적용
검증
ReviewModerationServiceTest(REVIEW만 처리/복원/없음), 자동숨김 IT, 마스킹 단위테스트, ReportServiceImplTest(List 배선)
관련 파일
review/service/moderation/ReviewModerationService.java, review/controller/ReviewModerationController.java, report/service/ReportServiceImpl.java, community/service/CommunityModerationService.java
개요
리뷰를 기존 콘텐츠 모더레이션 체계(커뮤니티/댓글과 동일)에 연동합니다. 비속어 마스킹(L1) + 신고 임계 자동숨김(L2) + 운영자 검토.
작업 내용
L1 비속어 마스킹
ProfanityFilter.mask()로 자동 마스킹(공백·기호 우회 포함)L2 신고 임계 자동숨김
Review.hidden필드 +hideByReport()/restore()/isHidden()ReviewModerationService implements ContentModerationPort: REVIEW 대상만 처리ReportServiceImpl이List<ContentModerationPort>를 주입받아 등록된 모든 구현에 위임(각 구현은 자기 targetType만 처리).CommunityModerationService의 REVIEW case는 no-op로 변경운영자 검토 API (OPERATOR)
신고/차단 연동
POST /api/v1/reports(targetType=REVIEW) 재사용, 신고쪽 코드 변경 없음POST /api/v1/blocks재사용, 리뷰 목록/상세(404)/미디어에 양방향 숨김 적용검증
ReviewModerationServiceTest(REVIEW만 처리/복원/없음), 자동숨김 IT, 마스킹 단위테스트,ReportServiceImplTest(List 배선)관련 파일
review/service/moderation/ReviewModerationService.java,review/controller/ReviewModerationController.java,report/service/ReportServiceImpl.java,community/service/CommunityModerationService.java