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/order/OrderAdminController.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminController.java index f85471f..f268a5a 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminController.java @@ -1,7 +1,7 @@ package com.sparta.spring_deep._delivery.admin.order; -import com.sparta.spring_deep._delivery.domain.order.OrderResponseDto; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderDetailsResponseDto; import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl; import java.util.UUID; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepository.java index 15efb7a..ae2f1b0 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepository.java @@ -1,6 +1,6 @@ package com.sparta.spring_deep._delivery.admin.order; -import com.sparta.spring_deep._delivery.domain.order.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order; 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/admin/order/OrderAdminRepositoryCustom.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustom.java index 43229d0..41e0f0f 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustom.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustom.java @@ -1,6 +1,6 @@ package com.sparta.spring_deep._delivery.admin.order; -import com.sparta.spring_deep._delivery.domain.order.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustomImpl.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustomImpl.java index c82fc8b..caf5732 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustomImpl.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminRepositoryCustomImpl.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.order.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; import com.sparta.spring_deep._delivery.domain.order.QOrder; import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminService.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminService.java index 8ea2fa2..fdc22d8 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminService.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/OrderAdminService.java @@ -1,10 +1,10 @@ package com.sparta.spring_deep._delivery.admin.order; import com.sparta.spring_deep._delivery.admin.order.orderItem.OrderItemAdminRepository; -import com.sparta.spring_deep._delivery.domain.order.Order; -import com.sparta.spring_deep._delivery.domain.order.OrderResponseDto; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsResponseDto; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItem; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderDetailsResponseDto; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; 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/admin/order/orderItem/OrderItemAdminRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/orderItem/OrderItemAdminRepository.java index 94a1e35..8d843bd 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/admin/order/orderItem/OrderItemAdminRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/admin/order/orderItem/OrderItemAdminRepository.java @@ -1,7 +1,7 @@ package com.sparta.spring_deep._delivery.admin.order.orderItem; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItem; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; import java.util.List; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; 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..79080bb 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 @@ -1,9 +1,9 @@ package com.sparta.spring_deep._delivery.admin.review; -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.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; +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/OrderStatusEnum.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderStatusEnum.java deleted file mode 100644 index 22de37d..0000000 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderStatusEnum.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.sparta.spring_deep._delivery.domain.order; - -public enum OrderStatusEnum { - PENDING, - CONFIRMED, - DELIVERED, - FAILED, - CANCELLED -} \ No newline at end of file diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderController.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/controller/OrderController.java similarity index 89% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderController.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/controller/OrderController.java index b1a9b58..a19bd50 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/controller/OrderController.java @@ -1,7 +1,11 @@ -package com.sparta.spring_deep._delivery.domain.order; - -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsRequestDto; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsResponseDto; +package com.sparta.spring_deep._delivery.domain.order.controller; + +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderSearchDto; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.service.OrderService; +import com.sparta.spring_deep._delivery.domain.order.dto.request.OrderDetailsRequestDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderDetailsResponseDto; import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl; import java.util.UUID; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderItemDto.java similarity index 88% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderItemDto.java index 28ecd4b..f33772a 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderItemDto.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.order.orderItem; +package com.sparta.spring_deep._delivery.domain.order.dto; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderSearchDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderSearchDto.java similarity index 63% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderSearchDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderSearchDto.java index e4595c4..13cf420 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderSearchDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/OrderSearchDto.java @@ -1,5 +1,6 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.dto; +import com.sparta.spring_deep._delivery.domain.order.OrderStatusEnum; import lombok.Data; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsRequestDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderDetailsRequestDto.java similarity index 83% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsRequestDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderDetailsRequestDto.java index aac5d9b..19ec52d 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsRequestDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderDetailsRequestDto.java @@ -1,6 +1,6 @@ -package com.sparta.spring_deep._delivery.domain.order.orderDetails; +package com.sparta.spring_deep._delivery.domain.order.dto.request; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItemDto; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderItemDto; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import java.util.List; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRequestDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderRequestDto.java similarity index 91% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRequestDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderRequestDto.java index 3512ed1..99cf04f 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRequestDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/request/OrderRequestDto.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.dto.request; import jakarta.validation.constraints.Digits; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderDetailsResponseDto.java similarity index 84% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsResponseDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderDetailsResponseDto.java index c860653..b053b75 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderDetails/OrderDetailsResponseDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderDetailsResponseDto.java @@ -1,8 +1,8 @@ -package com.sparta.spring_deep._delivery.domain.order.orderDetails; +package com.sparta.spring_deep._delivery.domain.order.dto.response; -import com.sparta.spring_deep._delivery.domain.order.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order; import com.sparta.spring_deep._delivery.domain.order.OrderStatusEnum; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItem; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; import java.math.BigDecimal; import java.util.List; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderResponseDto.java similarity index 83% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderResponseDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderResponseDto.java index 60b86a9..f730a36 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderResponseDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/dto/response/OrderResponseDto.java @@ -1,5 +1,7 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.dto.response; +import com.sparta.spring_deep._delivery.domain.order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.model.Order; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.UUID; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/Order.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/Order.java similarity index 74% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/Order.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/Order.java index c22fdb8..0028cd5 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/Order.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/Order.java @@ -1,9 +1,10 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.model; import com.sparta.spring_deep._delivery.common.BaseEntity; import com.sparta.spring_deep._delivery.domain.address.entity.Address; import com.sparta.spring_deep._delivery.domain.restaurant.Restaurant; import com.sparta.spring_deep._delivery.domain.user.entity.User; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -14,11 +15,13 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.validation.constraints.Digits; -import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import lombok.Builder; import lombok.Getter; @@ -36,6 +39,9 @@ public class Order extends BaseEntity { @GeneratedValue(strategy = GenerationType.UUID) private UUID id; + @OneToMany(mappedBy = "order", cascade = CascadeType.PERSIST) + private List orderItems = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "customer_id", nullable = false) private User customer; @@ -55,7 +61,7 @@ public class Order extends BaseEntity { @Column(name = "total_price", nullable = false) @Digits(integer = 10, fraction = 2) - private BigDecimal totalPrice; + private BigDecimal totalPrice = BigDecimal.ZERO; @Column(length = 50) @Size(max = 50) @@ -63,19 +69,23 @@ public class Order extends BaseEntity { @Builder public Order(User customer, Restaurant restaurant, Address address, - @NotNull @Digits(integer = 10, fraction = 2) BigDecimal totalPrice, @Size(max = 50) String request) { super(customer.getUsername()); this.customer = customer; this.restaurant = restaurant; this.address = address; - this.totalPrice = totalPrice; this.request = request; } + public void addOrderItem(OrderItem orderItem) { + orderItems.add(orderItem); + orderItem.setOrder(this); + } - public void updateTotalPrice(BigDecimal totalPrice) { - this.totalPrice = totalPrice; + public void updateTotalPrice() { + this.totalPrice = orderItems.stream() + .map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))) + .reduce(BigDecimal.ZERO, BigDecimal::add); } public void updateOrderStatus(User user, OrderStatusEnum status) { @@ -83,4 +93,12 @@ public void updateOrderStatus(User user, OrderStatusEnum status) { this.status = status; } -} \ No newline at end of file + public enum OrderStatusEnum { + PENDING, + CONFIRMED, + DELIVERED, + FAILED, + CANCELLED + } + +} diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItem.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/OrderItem.java similarity index 82% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItem.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/OrderItem.java index add8ffe..fd6a3b4 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItem.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/model/OrderItem.java @@ -1,9 +1,8 @@ -package com.sparta.spring_deep._delivery.domain.order.orderItem; +package com.sparta.spring_deep._delivery.domain.order.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.sparta.spring_deep._delivery.common.BaseEntity; import com.sparta.spring_deep._delivery.domain.menu.Menu; -import com.sparta.spring_deep._delivery.domain.order.Order; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -35,7 +34,7 @@ public class OrderItem extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id", nullable = false) - @JsonIgnore // OrderItem을 응답할 때 order 정보 제외 + @JsonIgnore private Order order; @ManyToOne(fetch = FetchType.LAZY) @@ -52,13 +51,15 @@ public class OrderItem extends BaseEntity { @Builder - public OrderItem(Order order, Menu menu, int quantity, - @NotNull @Digits(integer = 10, fraction = 2) BigDecimal price) { - super(order.getCustomer().getUsername()); - this.order = order; + public OrderItem( Menu menu, + @NotNull @Digits(integer = 10, fraction = 2) BigDecimal price, + int quantity) { + this.menu = menu; this.quantity = quantity; this.price = price; } + } + diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderItemRepository.java similarity index 63% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemRepository.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderItemRepository.java index 936b5dc..b68e10b 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/orderItem/OrderItemRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderItemRepository.java @@ -1,6 +1,7 @@ -package com.sparta.spring_deep._delivery.domain.order.orderItem; +package com.sparta.spring_deep._delivery.domain.order.repository; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; import java.util.List; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepository.java similarity index 68% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepository.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepository.java index a4bc06e..2f5c0e6 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepository.java @@ -1,6 +1,8 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.repository; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -13,12 +15,6 @@ public interface OrderRepository extends JpaRepository, OrderReposi Optional> findAllByRestaurantId(UUID restaurantId); -// Page findByCustomerUsernameAndUpdatedAtAfterAndStatusIn(String customerId, -// String restaurantName, String menuName, String status, -// Pageable pageable); - - List findAllByRestaurantIdAndIsDeletedFalse(UUID restaurantId); - Optional findByIdAndIsDeletedFalse(UUID orderId); Page findByCustomerUsernameAndIsDeletedFalseAndUpdatedAtAfterAndStatusIn(String username, diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustom.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustom.java similarity index 55% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustom.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustom.java index fe241f3..4948949 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustom.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustom.java @@ -1,5 +1,7 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.repository; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderSearchDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustomImpl.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustomImpl.java similarity index 90% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustomImpl.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustomImpl.java index 329b155..1f65af8 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderRepositoryCustomImpl.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/order/repository/OrderRepositoryCustomImpl.java @@ -1,8 +1,11 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.repository; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderSearchDto; +import com.sparta.spring_deep._delivery.domain.order.QOrder; import com.sparta.spring_deep._delivery.domain.order.orderItem.QOrderItem; import java.util.List; import lombok.RequiredArgsConstructor; 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/service/OrderService.java similarity index 84% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/order/OrderService.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/order/service/OrderService.java index bbf7205..0d06535 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/service/OrderService.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.order; +package com.sparta.spring_deep._delivery.domain.order.service; import static com.sparta.spring_deep._delivery.util.AuthTools.ownerCheck; @@ -6,17 +6,22 @@ import com.sparta.spring_deep._delivery.domain.address.repository.AddressRepository; import com.sparta.spring_deep._delivery.domain.menu.Menu; import com.sparta.spring_deep._delivery.domain.menu.MenuRepository; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsRequestDto; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsResponseDto; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItem; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItemRepository; -import com.sparta.spring_deep._delivery.domain.payment.Payment.PaymentStatusEnum; -import com.sparta.spring_deep._delivery.domain.payment.PaymentResponseDto; -import com.sparta.spring_deep._delivery.domain.payment.PaymentService; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderSearchDto; +import com.sparta.spring_deep._delivery.domain.order.dto.request.OrderDetailsRequestDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderDetailsResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderResponseDto; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderItemRepository; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment.PaymentStatusEnum; +import com.sparta.spring_deep._delivery.domain.payment.dto.PaymentResponseDto; +import com.sparta.spring_deep._delivery.domain.payment.service.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; @@ -46,7 +51,6 @@ public class OrderService { private final OrderRepository orderRepository; private final OrderItemRepository orderItemRepository; - private final UserRepository userRepository; private final RestaurantRepository restaurantRepository; private final AddressRepository addressRepository; private final MenuRepository menuRepository; @@ -71,38 +75,26 @@ public OrderDetailsResponseDto createOrder(OrderDetailsRequestDto requestDto, Us // 유저 정보와 주소 정보 일치하는지 검사 ownerCheck(user, address.getUser()); - Order order = orderRepository.save(new Order(user, restaurant, address, - BigDecimal.ZERO, requestDto.getRequest())); - - AtomicReference sumPrice = new AtomicReference<>(BigDecimal.ZERO); + Order order = orderRepository.save(new Order(user, restaurant, address, requestDto.getRequest())); List orderItemList = new ArrayList<>(); - requestDto.getOrderItemDtos().forEach(orderItemDto -> { Menu menu = menuRepository.findById(orderItemDto.getMenuId()) .orElseThrow(ResourceNotFoundException::new); - BigDecimal itemPrice = menu.getPrice(); - log.info("item price : " + itemPrice); - sumPrice.updateAndGet(current -> - current.add(itemPrice.multiply(BigDecimal.valueOf(orderItemDto.getQuantity()))) - ); - - log.info("sum Price : " + sumPrice.get()); - OrderItem orderItem = orderItemRepository.save( - new OrderItem(order, menu, orderItemDto.getQuantity(), itemPrice)); - - orderItemList.add(orderItem); + OrderItem orderItem = new OrderItem(menu, menu.getPrice(), orderItemDto.getQuantity()); + order.addOrderItem(orderItem); }); - order.updateTotalPrice(sumPrice.get()); + + order.updateTotalPrice(); // 결제 요청 PaymentResponseDto paymentResponseDto = paymentService.createPayment(user.getUsername(), - order.getId(), sumPrice.get()); + order.getId(), order.getTotalPrice()); if (paymentResponseDto.getPaymentStatus() == PaymentStatusEnum.COMPLETED) { order.updateOrderStatus(user, OrderStatusEnum.CONFIRMED); - + } else if (paymentResponseDto.getPaymentStatus() == PaymentStatusEnum.FAILED) { order.updateOrderStatus(user, OrderStatusEnum.FAILED); order.delete(user.getUsername()); @@ -215,7 +207,7 @@ public Page getUpdatedOrdersSince(User user, int page, int siz // 진행 중인 주문 중에서 최근 변경된 주문만 조회 Page updatedOrders = orderRepository.findByCustomerUsernameAndIsDeletedFalseAndUpdatedAtAfterAndStatusIn( user.getUsername(), lastCheckedTime, - List.of(OrderStatusEnum.PENDING, OrderStatusEnum.CONFIRMED), + List.of(OrderStatusEnum.CONFIRMED, OrderStatusEnum.PENDING), pageable); if (updatedOrders.isEmpty()) { diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentController.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/controller/PaymentController.java similarity index 89% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentController.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/controller/PaymentController.java index d869385..889b01e 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/controller/PaymentController.java @@ -1,5 +1,8 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.controller; +import com.sparta.spring_deep._delivery.domain.payment.dto.PaymentRequestDto; +import com.sparta.spring_deep._delivery.domain.payment.dto.PaymentResponseDto; +import com.sparta.spring_deep._delivery.domain.payment.service.PaymentService; import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -32,8 +35,8 @@ public ResponseEntity createPayment( log.info("createPayment"); PaymentResponseDto responseDto = paymentService.createPayment(userDetails.getUsername(), - UUID.fromString(requestDto.orderId), - requestDto.amount); + UUID.fromString(requestDto.getOrderId()), + requestDto.getAmount()); return ResponseEntity.status(HttpStatus.OK).body(responseDto); } diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRequestDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentRequestDto.java similarity index 69% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRequestDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentRequestDto.java index b9e80ae..2b96ff2 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRequestDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentRequestDto.java @@ -1,4 +1,4 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.dto; import java.math.BigDecimal; import lombok.Getter; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentResponseDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentResponseDto.java similarity index 67% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentResponseDto.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentResponseDto.java index a7a7ce0..98eb986 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentResponseDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/dto/PaymentResponseDto.java @@ -1,7 +1,8 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.dto; -import com.sparta.spring_deep._delivery.domain.payment.Payment.PaymentMethodEnum; -import com.sparta.spring_deep._delivery.domain.payment.Payment.PaymentStatusEnum; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment.PaymentMethodEnum; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment.PaymentStatusEnum; import java.math.BigDecimal; import java.util.UUID; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/Payment.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/model/Payment.java similarity index 95% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/Payment.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/model/Payment.java index 3f82f8d..602acbb 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/Payment.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/model/Payment.java @@ -1,7 +1,7 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.model; import com.sparta.spring_deep._delivery.common.BaseEntity; -import com.sparta.spring_deep._delivery.domain.order.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRepository.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/repository/PaymentRepository.java similarity index 62% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRepository.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/repository/PaymentRepository.java index ba21863..4bd381e 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentRepository.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/repository/PaymentRepository.java @@ -1,5 +1,6 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.repository; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentService.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/service/PaymentService.java similarity index 90% rename from src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentService.java rename to src/main/java/com/sparta/spring_deep/_delivery/domain/payment/service/PaymentService.java index 8fcbf89..7a8a7f2 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/PaymentService.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/payment/service/PaymentService.java @@ -1,9 +1,12 @@ -package com.sparta.spring_deep._delivery.domain.payment; +package com.sparta.spring_deep._delivery.domain.payment.service; import static com.sparta.spring_deep._delivery.util.AuthTools.ownerCheck; -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.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; +import com.sparta.spring_deep._delivery.domain.payment.dto.PaymentResponseDto; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment; +import com.sparta.spring_deep._delivery.domain.payment.repository.PaymentRepository; 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.exception.InternalServerException; 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 92% 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..9816734 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,7 +1,7 @@ -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; +import com.sparta.spring_deep._delivery.domain.order.model.Order; import com.sparta.spring_deep._delivery.domain.user.entity.User; import jakarta.persistence.Column; import jakarta.persistence.Entity; 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/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 88% 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..1ab3522 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 -> { @@ -45,8 +46,8 @@ public Page searchReviews(UUID restaurantId, Pageable pageable) { // review → order → restaurant 조인을 통해 단일 restaurantId 조건과 isDeleted=false 필터 적용 List reviews = queryFactory .selectFrom(review) - .join(review.order, order) - .join(order.restaurant, restaurant) + .join(review.order, order).fetchJoin() + .join(order.restaurant, restaurant).fetchJoin() .where( restaurant.id.eq(restaurantId) .and(review.isDeleted.eq(false)) 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 62% 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..1b7a07b 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,19 +1,24 @@ -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; -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.order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; 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; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -30,7 +35,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 +43,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 +75,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 +90,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 +105,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()); diff --git a/src/test/java/com/sparta/spring_deep/_delivery/domain/order/OrderIntegrationTest.java b/src/test/java/com/sparta/spring_deep/_delivery/domain/order/OrderIntegrationTest.java index 5969720..b358c71 100644 --- a/src/test/java/com/sparta/spring_deep/_delivery/domain/order/OrderIntegrationTest.java +++ b/src/test/java/com/sparta/spring_deep/_delivery/domain/order/OrderIntegrationTest.java @@ -19,9 +19,12 @@ import com.sparta.spring_deep._delivery.domain.address.repository.AddressRepository; import com.sparta.spring_deep._delivery.domain.menu.Menu; import com.sparta.spring_deep._delivery.domain.menu.MenuRepository; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsRequestDto; -import com.sparta.spring_deep._delivery.domain.order.orderDetails.OrderDetailsResponseDto; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItemDto; +import com.sparta.spring_deep._delivery.domain.order.dto.request.OrderDetailsRequestDto; +import com.sparta.spring_deep._delivery.domain.order.dto.response.OrderDetailsResponseDto; +import com.sparta.spring_deep._delivery.domain.order.dto.OrderItemDto; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; 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.restaurant.restaurantAddress.RestaurantAddress; @@ -162,8 +165,7 @@ void testUpdateOrderStatus() throws Exception { // 주문 취소 테스트 @Test void testCancelOrder() throws Exception { - Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, - 20000.0, "testRequest"); + Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, "testRequest"); orderRepository.save(createOrder); // 왐마 슈우우웃 와우우우우 아래도 똑같이 save 복붙 성공! ㅋㅋㅋㅋㅋㅋㅋㅋ아싸 최고십니다... String orderId = createOrder.getId().toString(); @@ -175,8 +177,7 @@ void testCancelOrder() throws Exception { // 주문 삭제 테스트 @Test void testDeleteOrder() throws Exception { - Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, - 20000.0, "testRequest"); + Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, "testRequest"); orderRepository.save(createOrder); String orderId = createOrder.getId().toString(); @@ -189,10 +190,8 @@ void testDeleteOrder() throws Exception { @Test void testSearchMyOrders() throws Exception { // 고객 주문 2건 생성 - Order createOrder1 = TestEntityCreateTools.createOrder(customer, restaurant, address, - 20000.0, "testRequest"); - Order createOrder2 = TestEntityCreateTools.createOrder(customer, restaurant, address, - 10000.0, "testRequest"); + Order createOrder1 = TestEntityCreateTools.createOrder(customer, restaurant, address, "testRequest"); + Order createOrder2 = TestEntityCreateTools.createOrder(customer, restaurant, address, "testRequest"); orderRepository.save(createOrder1); orderRepository.save(createOrder2); @@ -206,8 +205,7 @@ void testSearchMyOrders() throws Exception { @Test void testPollingOrders() throws Exception { // 주문이 존재하도록 하나 생성 - Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, - 10000.0, "testRequest"); + Order createOrder = TestEntityCreateTools.createOrder(customer, restaurant, address, "testRequest"); orderRepository.save(createOrder); mockMvc.perform(get("/api/orders/polling") 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..de5b649 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 @@ -17,13 +17,16 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.sparta.spring_deep._delivery.domain.address.entity.Address; import com.sparta.spring_deep._delivery.domain.address.repository.AddressRepository; -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.order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.Order.OrderStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.repository.OrderRepository; 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.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..a97bd56 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 @@ -5,14 +5,14 @@ import com.sparta.spring_deep._delivery.domain.address.entity.Address; import com.sparta.spring_deep._delivery.domain.ai.Ai; import com.sparta.spring_deep._delivery.domain.menu.Menu; -import com.sparta.spring_deep._delivery.domain.order.Order; -import com.sparta.spring_deep._delivery.domain.order.orderItem.OrderItem; -import com.sparta.spring_deep._delivery.domain.payment.Payment; -import com.sparta.spring_deep._delivery.domain.payment.Payment.PaymentStatusEnum; +import com.sparta.spring_deep._delivery.domain.order.model.Order; +import com.sparta.spring_deep._delivery.domain.order.model.OrderItem; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment; +import com.sparta.spring_deep._delivery.domain.payment.model.Payment.PaymentStatusEnum; 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; @@ -133,12 +133,11 @@ public static Payment createPayment( // 주문 public static Order createOrder(User customer, Restaurant restaurant, Address address, - Double totalPrice, String request) { + String request) { return Order.builder() .customer(customer) .restaurant(restaurant) .address(address) - .totalPrice(BigDecimal.valueOf(totalPrice)) .request(request) .build(); } @@ -147,7 +146,6 @@ public static Order createOrder(User customer, Restaurant restaurant, Address ad public static OrderItem createOrderItem(Order order, Menu menu, int quantity, Double price) { return OrderItem.builder() - .order(order) .menu(menu) .quantity(quantity) .price(BigDecimal.valueOf(price))