리뷰 작성 예외처리 수정

뚜우웅이·2025년 6월 3일

캡스톤 디자인

목록 보기
35/35

현재 판매된 상품에 대해 구매자가 아닌 제3자가 리뷰를 작성하려고 할 때 예외 처리 메시지가 자신의 상품에 리뷰를 작성할 수 없습니다.라고 엉뚱한 메시지가 나오고 있었다. 이를 수정해준다.

ReviewService

// 리뷰 생성
    @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);
    }

수정 후 응답

profile
공부하는 초보 개발자

0개의 댓글