현재 판매된 상품에 대해 구매자가 아닌 제3자가 리뷰를 작성하려고 할 때 예외 처리 메시지가 자신의 상품에 리뷰를 작성할 수 없습니다.라고 엉뚱한 메시지가 나오고 있었다. 이를 수정해준다.
// 리뷰 생성
@Transactional
public ReviewDto.ReviewResponse createReview(Long reviewerId, ReviewDto.ReviewCreateRequest request) {
User reviewer = getUser(reviewerId);
Product product = getProduct(request.productId());
// 1. 상품이 판매완료 상태가 아니면 예외 발생 (가장 먼저 체크)
if (product.getStatus() != ProductStatus.SOLD_OUT) {
throw new ReviewException.ProductNotSoldException();
}
// 2. 구매자가 아닌 사람이 리뷰 작성 시도 (구매자 체크를 먼저)
if (product.getBuyer() == null || !product.getBuyer().getId().equals(reviewerId)) {
throw new ReviewException.NotBuyerException();
}
// 3. 판매자가 리뷰 작성 시도 (이론적으로 도달하지 않지만 안전장치)
if (product.getSeller().getId().equals(reviewerId)) {
throw new ReviewException.SelfReviewException();
}
// 4. 이미 리뷰가 있는지 확인
if (reviewRepository.findByProduct(product).isPresent()) {
throw new ReviewException.ReviewAlreadyExistsException();
}
User targetUser = product.getSeller();
Review review = Review.builder()
.reviewer(reviewer)
.targetUser(targetUser)
.product(product)
.rating(request.rating())
.content(request.content())
.build();
Review savedReview = reviewRepository.save(review);
log.info("리뷰 생성 완료: 리뷰어 ID {}, 판매자 ID {}, 상품 ID {}", reviewerId, targetUser.getId(), product.getId());
return ReviewDto.ReviewResponse.from(review);
}
수정 후 응답
