From 2e99173fbf27db83200b52b661903a76477d918a Mon Sep 17 00:00:00 2001 From: sohyun119 Date: Sun, 30 Mar 2025 00:34:31 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor=20[#59]=20:?= =?UTF-8?q?=20review=20api=20refactoring=20*=20QClass=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20*=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +++- .../_delivery/admin/review/ReviewAdminController.java | 2 +- .../_delivery/admin/review/ReviewAdminRepository.java | 2 +- .../admin/review/ReviewAdminRepositoryCustomImpl.java | 2 +- .../_delivery/admin/review/ReviewAdminResponseDto.java | 2 +- .../_delivery/admin/review/ReviewAdminService.java | 4 ++-- .../spring_deep/_delivery/domain/order/OrderService.java | 4 ++-- .../review/{ => repository}/ReviewRepositoryCustom.java | 3 ++- .../{ => repository}/ReviewRepositoryCustomImpl.java | 7 ++++--- .../_delivery/domain/review/ReviewIntegrationTest.java | 3 +++ .../_delivery/testutil/TestEntityCreateTools.java | 2 +- 11 files changed, 21 insertions(+), 14 deletions(-) rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => repository}/ReviewRepositoryCustom.java (63%) rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => repository}/ReviewRepositoryCustomImpl.java (92%) diff --git a/build.gradle b/build.gradle index d51c8b2..ae0e319 100644 --- a/build.gradle +++ b/build.gradle @@ -27,8 +27,9 @@ dependencies { // QueryDSL implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta' - annotationProcessor 'jakarta.annotation:jakarta.annotation-api' + annotationProcessor 'jakarta.persistence:jakarta.persistence-api' + annotationProcessor 'jakarta.annotation:jakarta.annotation-api' // dotenv implementation 'io.github.cdimascio:java-dotenv:+' @@ -81,3 +82,4 @@ dependencies { tasks.named('test') { useJUnitPlatform() } + diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminController.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminController.java index 8a18924..ae6d9aa 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminController.java @@ -1,7 +1,7 @@ package com.sparta.spring_deep._delivery.admin.review; -import com.sparta.spring_deep._delivery.domain.review.ReviewResponseDto; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewResponseDto; import com.sparta.spring_deep._delivery.domain.user.entity.User; import java.util.UUID; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepository.java index cfd43b3..ea8d6ea 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepository.java @@ -1,6 +1,6 @@ package com.sparta.spring_deep._delivery.admin.review; -import com.sparta.spring_deep._delivery.domain.review.Review; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import java.util.List; import java.util.UUID; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepositoryCustomImpl.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepositoryCustomImpl.java index a3408f4..965eb4e 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepositoryCustomImpl.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminRepositoryCustomImpl.java @@ -4,7 +4,7 @@ import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.DateTimePath; import com.querydsl.jpa.impl.JPAQueryFactory; -import com.sparta.spring_deep._delivery.domain.review.QReview; +import com.sparta.spring_deep._delivery.domain.review.model.QReview; import java.time.LocalDateTime; import java.util.List; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminResponseDto.java index a9cd2ad..992722a 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminResponseDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminResponseDto.java @@ -1,6 +1,6 @@ package com.sparta.spring_deep._delivery.admin.review; -import com.sparta.spring_deep._delivery.domain.review.Review; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import java.time.LocalDateTime; import java.util.UUID; import lombok.Getter; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminService.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminService.java index af8d335..9f63d86 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminService.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/review/ReviewAdminService.java @@ -2,8 +2,8 @@ import com.sparta.spring_deep._delivery.domain.order.Order; import com.sparta.spring_deep._delivery.domain.order.OrderRepository; -import com.sparta.spring_deep._delivery.domain.review.Review; -import com.sparta.spring_deep._delivery.domain.review.ReviewResponseDto; +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewResponseDto; import com.sparta.spring_deep._delivery.domain.user.entity.User; import com.sparta.spring_deep._delivery.exception.ResourceNotFoundException; import java.util.List; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderService.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderService.java index bbf7205..1facff5 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderService.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderService.java @@ -15,8 +15,8 @@ import com.sparta.spring_deep._delivery.domain.payment.PaymentService; import com.sparta.spring_deep._delivery.domain.restaurant.Restaurant; import com.sparta.spring_deep._delivery.domain.restaurant.RestaurantRepository; -import com.sparta.spring_deep._delivery.domain.review.Review; -import com.sparta.spring_deep._delivery.domain.review.ReviewRepository; +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import com.sparta.spring_deep._delivery.domain.review.repository.ReviewRepository; import com.sparta.spring_deep._delivery.domain.user.entity.User; import com.sparta.spring_deep._delivery.domain.user.entity.UserRole; import com.sparta.spring_deep._delivery.domain.user.repository.UserRepository; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustom.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustom.java similarity index 63% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustom.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustom.java index a1d2267..655e662 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustom.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustom.java @@ -1,5 +1,6 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.repository; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import java.util.UUID; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustomImpl.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustomImpl.java similarity index 92% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustomImpl.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustomImpl.java index 9d832c6..73058e5 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepositoryCustomImpl.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepositoryCustomImpl.java @@ -1,11 +1,12 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.repository; import static com.sparta.spring_deep._delivery.domain.order.QOrder.order; import static com.sparta.spring_deep._delivery.domain.restaurant.QRestaurant.restaurant; -import static com.sparta.spring_deep._delivery.domain.review.QReview.review; +import static com.sparta.spring_deep._delivery.domain.review.model.QReview.review; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.jpa.impl.JPAQueryFactory; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -24,7 +25,7 @@ public class ReviewRepositoryCustomImpl implements ReviewRepositoryCustom { @Override public Page searchReviews(UUID restaurantId, Pageable pageable) { log.info("searchReviews"); - + // pageable의 정렬 조건 처리 (기본은 createdAt 내림차순) List> orderSpecifiers = new ArrayList<>(); pageable.getSort().forEach(sort -> { diff --git a/src/test/java/com/sparta/spring_deep/_delivery/domain/review/ReviewIntegrationTest.java b/src/test/java/com/sparta/spring_deep/_delivery/domain/review/ReviewIntegrationTest.java index 28bcc23..ffd0d36 100644 --- a/src/test/java/com/sparta/spring_deep/_delivery/domain/review/ReviewIntegrationTest.java +++ b/src/test/java/com/sparta/spring_deep/_delivery/domain/review/ReviewIntegrationTest.java @@ -24,6 +24,9 @@ import com.sparta.spring_deep._delivery.domain.restaurant.RestaurantRepository; import com.sparta.spring_deep._delivery.domain.restaurant.restaurantAddress.RestaurantAddress; import com.sparta.spring_deep._delivery.domain.restaurant.restaurantAddress.RestaurantAddressRepository; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewRequestDto; +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import com.sparta.spring_deep._delivery.domain.review.repository.ReviewRepository; import com.sparta.spring_deep._delivery.domain.user.entity.User; import com.sparta.spring_deep._delivery.domain.user.entity.UserRole; import com.sparta.spring_deep._delivery.domain.user.repository.UserRepository; diff --git a/src/test/java/com/sparta/spring_deep/_delivery/testutil/TestEntityCreateTools.java b/src/test/java/com/sparta/spring_deep/_delivery/testutil/TestEntityCreateTools.java index 9840fce..3218ea3 100644 --- a/src/test/java/com/sparta/spring_deep/_delivery/testutil/TestEntityCreateTools.java +++ b/src/test/java/com/sparta/spring_deep/_delivery/testutil/TestEntityCreateTools.java @@ -12,7 +12,7 @@ import com.sparta.spring_deep._delivery.domain.restaurant.Restaurant; import com.sparta.spring_deep._delivery.domain.restaurant.Restaurant.CategoryEnum; import com.sparta.spring_deep._delivery.domain.restaurant.restaurantAddress.RestaurantAddress; -import com.sparta.spring_deep._delivery.domain.review.Review; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl; import com.sparta.spring_deep._delivery.domain.user.entity.IsPublic; import com.sparta.spring_deep._delivery.domain.user.entity.User; From 51632498c9a99b89903b5af2f1b6e2d14f01d321 Mon Sep 17 00:00:00 2001 From: sohyun119 Date: Sun, 30 Mar 2025 00:35:39 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor=20[#59]=20:?= =?UTF-8?q?=20review=20api=20refactoring=20*=20Service=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=B0=A9=EC=8B=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20*=20=ED=8A=B9=EC=A0=95=20=EC=9D=8C=EC=8B=9D?= =?UTF-8?q?=EC=A0=90=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20?= =?UTF-8?q?:=20=ED=8F=89=EA=B7=A0=20=EB=B3=84=EC=A0=90=EA=B0=92=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/ReviewRepository.java | 14 ------ .../{ => controller}/ReviewController.java | 21 +++----- .../review/{ => dto}/ReviewRequestDto.java | 2 +- .../review/{ => dto}/ReviewResponseDto.java | 6 ++- .../dto/ReviewRestaurantResponseDto.java | 24 +++++++++ .../review/{ => dto}/ReviewSearchDto.java | 2 +- .../domain/review/{ => model}/Review.java | 2 +- .../review/repository/ReviewRepository.java | 18 +++++++ .../review/{ => service}/ReviewService.java | 50 ++++++++++--------- 9 files changed, 83 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepository.java rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => controller}/ReviewController.java (85%) rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => dto}/ReviewRequestDto.java (85%) rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => dto}/ReviewResponseDto.java (82%) create mode 100644 src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRestaurantResponseDto.java rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => dto}/ReviewSearchDto.java (77%) rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => model}/Review.java (96%) create mode 100644 src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepository.java rename src/main/java/com/sparta/spring_deep/_delivery/domain/review/{ => service}/ReviewService.java (67%) diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepository.java deleted file mode 100644 index b8c984f..0000000 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.sparta.spring_deep._delivery.domain.review; - -import java.util.List; -import java.util.UUID; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { - - Review findByIdAndIsDeletedFalse(UUID reviewId); - - int countByOrderId(UUID orderId); - - List findAllByOrderId(UUID orderId); -} diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewController.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/controller/ReviewController.java similarity index 85% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewController.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/controller/ReviewController.java index 88897fc..35eff26 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/controller/ReviewController.java @@ -1,5 +1,9 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.controller; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewRequestDto; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewResponseDto; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewRestaurantResponseDto; +import com.sparta.spring_deep._delivery.domain.review.service.ReviewService; import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -34,8 +38,6 @@ public ResponseEntity createReview( @AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody ReviewRequestDto requestDto) { - log.info("리뷰 작성 : {}", requestDto); - ReviewResponseDto responseDto = reviewService.createReview(requestDto, userDetails.getUser()); return ResponseEntity.status(HttpStatus.CREATED).body(responseDto); @@ -43,24 +45,19 @@ public ResponseEntity createReview( // 특정 음식점 리뷰 조회 @GetMapping("/reviews/{restaurantId}/search") - public ResponseEntity> searchReview( + public ResponseEntity searchReview( @PathVariable String restaurantId, @PageableDefault(sort = "createdAt", size = 10, page = 0, direction = Direction.DESC) Pageable pageable ) { - - log.info("특정 음식점 리뷰 조회 - restaurantId :{}", restaurantId); - - Page responseDtos = reviewService.getReviews( + ReviewRestaurantResponseDto responseDto = reviewService.getReviews( UUID.fromString(restaurantId), pageable); - return ResponseEntity.status(HttpStatus.OK).body(responseDtos); + return ResponseEntity.status(HttpStatus.OK).body(responseDto); } // 리뷰 조회 @GetMapping("/reviews/{reviewId}") public ResponseEntity getReview(@PathVariable String reviewId) { - log.info("리뷰 조회 - reviewId :{}", reviewId); - ReviewResponseDto responseDto = reviewService.getReview(UUID.fromString(reviewId)); return ResponseEntity.status(HttpStatus.OK).body(responseDto); @@ -72,7 +69,6 @@ public ResponseEntity updateReview( @AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable String reviewId, @RequestBody ReviewRequestDto requestDto) { - log.info("리뷰 수정 :{}", reviewId); ReviewResponseDto responseDto = reviewService.updateReview(UUID.fromString(reviewId), requestDto.getComment(), requestDto.getRating(), userDetails.getUser()); @@ -85,7 +81,6 @@ public ResponseEntity updateReview( public ResponseEntity deleteReview( @AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable String reviewId) { - log.info("리뷰 삭제 - reviewId :{}", reviewId); return reviewService.deleteReview(UUID.fromString(reviewId), userDetails.getUser()); } diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRequestDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRequestDto.java similarity index 85% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRequestDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRequestDto.java index 2e97d26..5fa147f 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewRequestDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRequestDto.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.dto; import java.util.UUID; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewResponseDto.java similarity index 82% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewResponseDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewResponseDto.java index 040416b..d2f794b 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewResponseDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewResponseDto.java @@ -1,11 +1,13 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.dto; +import com.sparta.spring_deep._delivery.domain.review.model.Review; import java.time.LocalDateTime; import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.Getter; -@Data +@Getter @AllArgsConstructor public class ReviewResponseDto { diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRestaurantResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRestaurantResponseDto.java new file mode 100644 index 0000000..09d3c48 --- /dev/null +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewRestaurantResponseDto.java @@ -0,0 +1,24 @@ +package com.sparta.spring_deep._delivery.domain.review.dto; + +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import lombok.Getter; + +@Getter +public class ReviewRestaurantResponseDto { + + private UUID restaurantId; + private List reviews = new ArrayList<>(); + + private Double AvgRating; + + public ReviewRestaurantResponseDto(List reviews, Double AvgRating, UUID restaurantId) { + this.restaurantId = restaurantId; + this.AvgRating = AvgRating; + this.reviews =reviews; + } + +} diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewSearchDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewSearchDto.java similarity index 77% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewSearchDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewSearchDto.java index fe23729..f300339 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewSearchDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/dto/ReviewSearchDto.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.dto; import lombok.Data; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/Review.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/model/Review.java similarity index 96% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/Review.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/model/Review.java index 5a3662f..5f33eaf 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/Review.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/model/Review.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.model; import com.sparta.spring_deep._delivery.common.BaseEntity; import com.sparta.spring_deep._delivery.domain.order.Order; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepository.java new file mode 100644 index 0000000..f3bb451 --- /dev/null +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/repository/ReviewRepository.java @@ -0,0 +1,18 @@ +package com.sparta.spring_deep._delivery.domain.review.repository; + +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { + + Optional findByIdAndIsDeletedFalse(UUID reviewId); + + List findAllByOrderId(UUID orderId); + + @Query("SELECT AVG(r.rating) FROM Review r WHERE r.isDeleted = false") + double findAverageRating(); +} diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewService.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/service/ReviewService.java similarity index 67% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewService.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/review/service/ReviewService.java index 406b94d..144686e 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/review/ReviewService.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/review/service/ReviewService.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.review; +package com.sparta.spring_deep._delivery.domain.review.service; import static com.sparta.spring_deep._delivery.util.AuthTools.ownerCheck; @@ -6,10 +6,16 @@ import com.sparta.spring_deep._delivery.domain.order.OrderRepository; import com.sparta.spring_deep._delivery.domain.order.OrderStatusEnum; import com.sparta.spring_deep._delivery.domain.restaurant.RestaurantRepository; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewRequestDto; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewResponseDto; +import com.sparta.spring_deep._delivery.domain.review.dto.ReviewRestaurantResponseDto; +import com.sparta.spring_deep._delivery.domain.review.model.Review; +import com.sparta.spring_deep._delivery.domain.review.repository.ReviewRepository; import com.sparta.spring_deep._delivery.domain.user.entity.User; import com.sparta.spring_deep._delivery.exception.DeletedDataAccessException; import com.sparta.spring_deep._delivery.exception.OperationNotAllowedException; import com.sparta.spring_deep._delivery.exception.ResourceNotFoundException; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,7 +36,7 @@ public class ReviewService { // 리뷰 작성 public ReviewResponseDto createReview(ReviewRequestDto requestDto, User user) { - log.info("리뷰 작성"); + log.info("createReview"); Order order = orderRepository.findByIdAndIsDeletedFalse(requestDto.getOrderId()) .orElseThrow(ResourceNotFoundException::new); @@ -38,27 +44,31 @@ public ReviewResponseDto createReview(ReviewRequestDto requestDto, User user) { ownerCheck(order.getCustomer(), user); if (!order.getStatus().equals(OrderStatusEnum.DELIVERED)) { - log.error("배송 완료만 리뷰작성 가능"); + log.error("배송 완료만 리뷰작성 가능합니다."); throw new OperationNotAllowedException(); } - Review review = reviewRepository.save( - new Review(order, user, requestDto.getRating(), requestDto.getComment())); + Review review = new Review(order, user, requestDto.getRating(), requestDto.getComment()); + reviewRepository.save(review); return new ReviewResponseDto(review); } // 특정 음식점 리뷰 조회 @Transactional(readOnly = true) - public Page getReviews(UUID restaurantId, Pageable pageable) { - log.info("특정 음식점 리뷰 조회"); + public ReviewRestaurantResponseDto getReviews(UUID restaurantId, Pageable pageable) { + log.info("getReviews"); restaurantRepository.findByIdAndIsDeletedFalse(restaurantId) .orElseThrow(ResourceNotFoundException::new); - Page reviews = reviewRepository.searchReviews(restaurantId, pageable); + List reviews = reviewRepository.searchReviews(restaurantId, pageable) + .map(ReviewResponseDto::new) + .stream().toList(); + // 리뷰 평점 조회 + double rating = reviewRepository.findAverageRating(); - return reviews.map(ReviewResponseDto::new); + return new ReviewRestaurantResponseDto(reviews, rating, restaurantId); } // 리뷰 조회 @@ -66,10 +76,10 @@ public Page getReviews(UUID restaurantId, Pageable pageable) public ReviewResponseDto getReview(UUID reviewId) { log.info("리뷰 조회"); - Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId); + Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId) + .orElseThrow(ResourceNotFoundException::new); - Order order = review.getOrder(); - if (order.getIsDeleted()) { + if(review.getOrder().getIsDeleted()){ throw new DeletedDataAccessException(); } @@ -81,12 +91,8 @@ public ReviewResponseDto getReview(UUID reviewId) { public ReviewResponseDto updateReview(UUID reviewId, String comment, int rating, User user) { log.info("리뷰 수정"); - Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId); - - if (review == null) { - log.error("존재하지 않는 리뷰"); - throw new ResourceNotFoundException(); - } + Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId) + .orElseThrow(ResourceNotFoundException::new); ownerCheck(user, review.getUser()); @@ -100,12 +106,8 @@ public ReviewResponseDto updateReview(UUID reviewId, String comment, int rating, public ResponseEntity deleteReview(UUID reviewId, User user) { log.info("리뷰 삭제"); - Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId); - - if (review == null) { - log.error("존재하지 않는 리뷰"); - throw new ResourceNotFoundException(); - } + Review review = reviewRepository.findByIdAndIsDeletedFalse(reviewId) + .orElseThrow(ResourceNotFoundException::new); ownerCheck(user, review.getUser());