개요
리뷰 작성/조회/삭제 서비스와 비즈니스 검증 규칙입니다. CQRS(command/query)로 분리했습니다.
엔드포인트
| 메서드 |
경로 |
인증 |
| POST |
/api/v1/reviews |
필수 |
| GET |
/api/v1/reviews?pinId=&page=&size= |
선택 |
| GET |
/api/v1/reviews/{reviewUuid} |
선택 |
| DELETE |
/api/v1/reviews/{reviewUuid} |
필수 |
| GET |
/api/v1/reviews/media?pinId=&limit= |
선택 |
| GET |
/api/v1/reviews/keywords?pinId= |
선택 |
검증 규칙
- 리뷰 대상:
PLACE 타입만, club-room(동아리방)·smoking(흡연부스) 제외 → REVIEW_NOT_ALLOWED_FOR_CATEGORY
- 키워드 1~5개 필수 →
REVIEW_KEYWORD_COUNT_INVALID
NONE_APPROPRIATE는 단독만 → REVIEW_KEYWORD_COMBINATION_INVALID
- 비F&B는 fbOnly 키워드 불가(
category.group.code == "food"로 판정) → REVIEW_KEYWORD_NOT_ALLOWED_FOR_CATEGORY
- 미디어 ≤10 →
REVIEW_MEDIA_LIMIT_EXCEEDED
- 삭제: 작성자 또는 OPERATOR만 →
REVIEW_FORBIDDEN, 미디어 S3 정리 후 하드삭제
- 상세/목록/미디어: 자동숨김·차단 사용자 제외(상세는 404)
교차 도메인
- map 도메인에
PinQueryService 인터페이스 신설(도메인 규칙: 타 도메인 Repository 직접 호출 금지). Pin은 @ManyToOne 참조(커뮤니티→Member 선례)
- 차단:
BlockQueryService.getHiddenMemberIds 재사용
검증
ReviewCommandServiceImplTest, ReviewQueryServiceImplTest, ReviewControllerTest, ReviewDTOSerializationTest(isLiked/isMine/isFnb 직렬화 키 고정)
관련 파일
domain/thingo/review/service/{command,query}/**, controller/ReviewController.java, dto/ReviewDTO.java, exception/**, map/service/PinQueryService*.java
개요
리뷰 작성/조회/삭제 서비스와 비즈니스 검증 규칙입니다. CQRS(command/query)로 분리했습니다.
엔드포인트
/api/v1/reviews/api/v1/reviews?pinId=&page=&size=/api/v1/reviews/{reviewUuid}/api/v1/reviews/{reviewUuid}/api/v1/reviews/media?pinId=&limit=/api/v1/reviews/keywords?pinId=검증 규칙
PLACE타입만,club-room(동아리방)·smoking(흡연부스) 제외 →REVIEW_NOT_ALLOWED_FOR_CATEGORYREVIEW_KEYWORD_COUNT_INVALIDNONE_APPROPRIATE는 단독만 →REVIEW_KEYWORD_COMBINATION_INVALIDcategory.group.code == "food"로 판정) →REVIEW_KEYWORD_NOT_ALLOWED_FOR_CATEGORYREVIEW_MEDIA_LIMIT_EXCEEDEDREVIEW_FORBIDDEN, 미디어 S3 정리 후 하드삭제교차 도메인
PinQueryService인터페이스 신설(도메인 규칙: 타 도메인 Repository 직접 호출 금지). Pin은@ManyToOne참조(커뮤니티→Member 선례)BlockQueryService.getHiddenMemberIds재사용검증
ReviewCommandServiceImplTest,ReviewQueryServiceImplTest,ReviewControllerTest,ReviewDTOSerializationTest(isLiked/isMine/isFnb 직렬화 키 고정)관련 파일
domain/thingo/review/service/{command,query}/**,controller/ReviewController.java,dto/ReviewDTO.java,exception/**,map/service/PinQueryService*.java