From b466b731057e56da82ddb4c8ced49da19bfbef2c Mon Sep 17 00:00:00 2001 From: kim Date: Wed, 27 Jan 2021 22:33:20 +0900 Subject: [PATCH] =?UTF-8?q?jpashop=20:=20=EC=BB=AC=EB=A0=89=EC=85=98=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20v6=20(jpa=20-dto=20=EC=A7=81=EC=A0=91?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C,=20=ED=94=8C=EB=9E=AB=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jpashop/api/OrderApiController.java | 16 ++++++++++ .../repository/order/query/OrderFlatDto.java | 32 +++++++++++++++++++ .../repository/order/query/OrderQueryDto.java | 11 +++++++ .../order/query/OrderQueryRepository.java | 12 +++++++ 4 files changed, 71 insertions(+) create mode 100644 jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderFlatDto.java diff --git a/jpashop/src/main/java/com/example/jpashop/api/OrderApiController.java b/jpashop/src/main/java/com/example/jpashop/api/OrderApiController.java index 07469760..33c4fa7e 100644 --- a/jpashop/src/main/java/com/example/jpashop/api/OrderApiController.java +++ b/jpashop/src/main/java/com/example/jpashop/api/OrderApiController.java @@ -4,6 +4,8 @@ import com.example.jpashop.domain.Order; import com.example.jpashop.domain.OrderItem; import com.example.jpashop.repository.OrderRepository; import com.example.jpashop.repository.OrderSearch; +import com.example.jpashop.repository.order.query.OrderFlatDto; +import com.example.jpashop.repository.order.query.OrderItemQueryDto; import com.example.jpashop.repository.order.query.OrderQueryDto; import com.example.jpashop.repository.order.query.OrderQueryRepository; import lombok.RequiredArgsConstructor; @@ -14,6 +16,8 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.stream.Collectors; +import static java.util.stream.Collectors.*; + @RestController @RequiredArgsConstructor public class OrderApiController { @@ -68,4 +72,16 @@ public class OrderApiController { public List ordersV5() { return orderQueryRepository.findAllByDto_optimization(); } + + @GetMapping("/api/v6/orders") + public List ordersV6() { + List flats = orderQueryRepository.findAllByDto_flat(); + + return flats.stream() + .collect(groupingBy(o -> new OrderQueryDto(o.getOrderId(), o.getName(), o.getOrderDate(), o.getOrderStatus(), o.getAddress()), + mapping(o -> new OrderItemQueryDto(o.getOrderId(), o.getItemName(), o.getOrderPrice(), o.getCount()), toList()) + )).entrySet().stream() + .map(e -> new OrderQueryDto(e.getKey().getOrderId(), e.getKey().getName(), e.getKey().getOrderDate(), e.getKey().getOrderStatus(), e.getKey().getAddress(), e.getValue())) + .collect(toList()); + } } diff --git a/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderFlatDto.java b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderFlatDto.java new file mode 100644 index 00000000..ea334a13 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderFlatDto.java @@ -0,0 +1,32 @@ +package com.example.jpashop.repository.order.query; + +import com.example.jpashop.domain.Address; +import com.example.jpashop.domain.OrderStatus; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class OrderFlatDto { + + private Long orderId; + private String name; + private LocalDateTime orderDate; + private OrderStatus orderStatus; + private Address address; + + private String itemName; + private int orderPrice; + private int count; + + public OrderFlatDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address, String itemName, int orderPrice, int count) { + this.orderId = orderId; + this.name = name; + this.orderDate = orderDate; + this.orderStatus = orderStatus; + this.address = address; + this.itemName = itemName; + this.orderPrice = orderPrice; + this.count = count; + } +} diff --git a/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryDto.java b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryDto.java index c6224b36..62748a5f 100644 --- a/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryDto.java +++ b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryDto.java @@ -4,11 +4,13 @@ import com.example.jpashop.domain.Address; import com.example.jpashop.domain.OrderStatus; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import java.time.LocalDateTime; import java.util.List; @Data +@EqualsAndHashCode(of = "orderId") public class OrderQueryDto { private Long orderId; @@ -25,4 +27,13 @@ public class OrderQueryDto { this.orderStatus = orderStatus; this.address = address; } + + public OrderQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address, List orderItems) { + this.orderId = orderId; + this.name = name; + this.orderDate = orderDate; + this.orderStatus = orderStatus; + this.address = address; + this.orderItems = orderItems; + } } diff --git a/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryRepository.java b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryRepository.java index 5450be30..bfe9ba82 100644 --- a/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryRepository.java +++ b/jpashop/src/main/java/com/example/jpashop/repository/order/query/OrderQueryRepository.java @@ -34,6 +34,18 @@ public class OrderQueryRepository { return result; } + public List findAllByDto_flat() { + return em.createQuery( + "select new com.example.jpashop.repository.order.query.OrderFlatDto(o.id, m.name, o.orderDate, o.status, d.address, i.name, oi.orderPrice, oi.count)" + + " from Order o" + + " join o.member m" + + " join o.delivery d" + + " join o.orderItems oi" + + " join oi.item i", OrderFlatDto.class) + .getResultList(); + } + + private Map> findOrderItemMap(List orderIds) { List orderItems = em.createQuery( "select new com.example.jpashop.repository.order.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count)" +