Skip to content

[리뷰] 작성·조회·삭제 서비스 + 검증 규칙 (CQRS) #213

Description

@hyunbin1

개요

리뷰 작성/조회/삭제 서비스와 비즈니스 검증 규칙입니다. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions