diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/dto/OrderDto.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/dto/OrderDto.java index 314865c..0e376b7 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/dto/OrderDto.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/dto/OrderDto.java @@ -1,13 +1,16 @@ package com.justpickup.orderservice.domain.order.dto; +import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; +import com.justpickup.orderservice.domain.orderItem.entity.OrderItem; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import java.time.LocalDateTime; import java.util.List; +import java.util.stream.Collectors; @Getter @NoArgsConstructor public class OrderDto { @@ -15,6 +18,8 @@ public class OrderDto { private Long userId; + private String userName; + private Long userCouponId; private Long orderPrice; @@ -30,8 +35,8 @@ public class OrderDto { private List orderItemDtoList; @Builder - public OrderDto(Long id, Long userId, Long userCouponId, Long orderPrice, LocalDateTime orderTime, Long usedPoint, - OrderStatus orderStatus, List orderItemDtoList) { + public OrderDto(Long id, Long userId, Long userCouponId, Long orderPrice, LocalDateTime orderTime, + Long usedPoint, OrderStatus orderStatus, List orderItemDtoList) { this.id = id; this.userId = userId; this.userCouponId = userCouponId; @@ -41,4 +46,41 @@ public class OrderDto { this.orderStatus = orderStatus; this.orderItemDtoList = orderItemDtoList; } + + // == 생성 메소드 == // + public static OrderDto createPrimitiveField(Order order) { + return OrderDto.builder() + .id(order.getId()) + .userId(order.getUserId()) + .userCouponId(order.getUserCouponId()) + .orderPrice(order.getOrderPrice()) + .orderTime(order.getOrderTime()) + .usedPoint(order.getUsedPoint()) + .orderStatus(order.getOrderStatus()) + .build(); + } + + public static OrderDto createFullField(Order order) { + List orderItems = order.getOrderItems(); + List orderItemDtoList = orderItems.stream() + .map(OrderItemDto::createPrimitiveField) + .collect(Collectors.toList()); + + return OrderDto.builder() + .id(order.getId()) + .userId(order.getUserId()) + .userCouponId(order.getUserCouponId()) + .orderPrice(order.getOrderPrice()) + .orderTime(order.getOrderTime()) + .usedPoint(order.getUsedPoint()) + .orderStatus(order.getOrderStatus()) + .orderItemDtoList(orderItemDtoList) + .build(); + } + + + // == 변수 변경 메소드 == // + public void setUserName(String userName) { + this.userName = userName; + } } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/Order.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/Order.java index b73ae1c..4d9547b 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/Order.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/Order.java @@ -43,22 +43,4 @@ public class Order extends BaseEntity { @OneToMany(mappedBy = "order") private List orderItems; - // == 변환 메소드 == // - public OrderDto toOrderDto() { - List orderItemDtoList = orderItems.stream() - .map(OrderItem::toOrderItemDto) - .collect(Collectors.toList()); - - return OrderDto.builder() - .id(id) - .userId(userId) - .userCouponId(userCouponId) - .orderPrice(orderPrice) - .orderTime(orderTime) - .usedPoint(usedPoint) - .orderStatus(orderStatus) - .orderItemDtoList(orderItemDtoList) - .build(); - } - } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java index 69e8afb..2626f8f 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java @@ -1,12 +1,16 @@ package com.justpickup.orderservice.domain.order.service; import com.justpickup.orderservice.domain.order.dto.OrderDto; -import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.repository.OrderRepository; import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom; +import com.justpickup.orderservice.global.client.store.GetItemResponse; +import com.justpickup.orderservice.global.client.store.StoreClient; +import com.justpickup.orderservice.global.client.user.UserClient; +import com.justpickup.orderservice.global.client.user.GetCustomerResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.List; @@ -14,21 +18,36 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor +@Transactional(readOnly = true) @Slf4j public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; private final OrderRepositoryCustom orderRepositoryCustom; + private final StoreClient storeClient; + private final UserClient userClient; @Override public List findOrderMain(LocalDate orderDate) { // 주문 가져오기 List orderDtoList = orderRepositoryCustom.findOrderMainBetweenOrderDate(orderDate) .stream() - .map(Order::toOrderDto) + .map(OrderDto::createFullField) .collect(Collectors.toList()); - // Feign Client 를 통한 주문 상품 가져오기 + // 사용자명 및 아이템 이름 가져오기 + orderDtoList.forEach(orderDto -> { + GetCustomerResponse getCustomerResponse = userClient.getUser(orderDto.getUserId()) + .getData(); + orderDto.setUserName(getCustomerResponse.getUserName()); + + orderDto.getOrderItemDtoList() + .forEach(orderItemDto -> { + GetItemResponse getItemResponse = storeClient.getItem(orderItemDto.getItemId()) + .getData(); + orderItemDto.setItemName(getItemResponse.getName()); + }); + }); return orderDtoList; } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java index 6ada75c..17891f7 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderController.java @@ -4,6 +4,7 @@ import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; +import com.justpickup.orderservice.global.dto.Result; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -29,26 +30,20 @@ public class OrderController { private final OrderService orderService; @GetMapping("/orderMain") - public ResponseEntity orderMain(@Valid OrderRequest orderRequest) { + public ResponseEntity orderMain(@Valid OrderController.OrderMainRequest orderMainRequest) { - List orderDto = orderService.findOrderMain(orderRequest.convertOrderTimeToLocalDate()); + List orderDto = orderService.findOrderMain(orderMainRequest.convertOrderTimeToLocalDate()); - List orderResponses = orderDto.stream() - .map(OrderResponse::new) + List orderMainResponses = orderDto.stream() + .map(OrderMainResponse::new) .collect(Collectors.toList()); return ResponseEntity.status(HttpStatus.OK) - .body(new Result<>("OK", orderResponses)); + .body(new Result<>("OK", orderMainResponses)); } @Data @NoArgsConstructor @AllArgsConstructor - static class Result { - private String message; - private T data; - } - - @Data @NoArgsConstructor @AllArgsConstructor - static class OrderRequest { + static class OrderMainRequest { // yyyy-mm-dd 형태를 가지는 패턴 조사 @Pattern(regexp = "^(19|20)\\d{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$") private String orderTime; @@ -59,14 +54,15 @@ public class OrderController { } @Data @NoArgsConstructor @AllArgsConstructor - static class OrderResponse { + static class OrderMainResponse { private Long orderId; private Long userId; - private List orderItemDtoList; + private String userName; + private List orderItemResponses; private OrderStatus orderStatus; private String orderTime; - public OrderResponse(OrderDto orderDto) { + public OrderMainResponse(OrderDto orderDto) { List orderItemDtoList = orderDto.getOrderItemDtoList() .stream() .map(OrderItemResponse::new) @@ -74,7 +70,8 @@ public class OrderController { this.orderId = orderDto.getId(); this.userId = orderDto.getUserId(); - this.orderItemDtoList = orderItemDtoList; + this.userName = orderDto.getUserName(); + this.orderItemResponses = orderItemDtoList; this.orderStatus = orderDto.getOrderStatus(); this.orderTime = orderDto.getOrderTime() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); @@ -85,10 +82,12 @@ public class OrderController { static class OrderItemResponse { private Long orderItemId; private Long itemId; + private String itemName; public OrderItemResponse(OrderItemDto orderItemDto) { this.orderItemId = orderItemDto.getId(); this.itemId = orderItemDto.getItemId(); + this.itemName = orderItemDto.getItemName(); } } } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/dto/OrderItemDto.java b/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/dto/OrderItemDto.java index d8eb3c8..52fa502 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/dto/OrderItemDto.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/dto/OrderItemDto.java @@ -1,5 +1,6 @@ package com.justpickup.orderservice.domain.orderItem.dto; +import com.justpickup.orderservice.domain.orderItem.entity.OrderItem; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -11,12 +12,15 @@ public class OrderItemDto { private Long itemId; + private String itemName; + // private List orderItemOptionDtoList; private Long price; private Long count; + // == 생성 메소드 == // @Builder public OrderItemDto(Long id, Long itemId, Long price, Long count) { this.id = id; @@ -24,4 +28,18 @@ public class OrderItemDto { this.price = price; this.count = count; } + + public static OrderItemDto createPrimitiveField(OrderItem orderItem) { + return OrderItemDto.builder() + .id(orderItem.getId()) + .itemId(orderItem.getItemId()) + .price(orderItem.getPrice()) + .count(orderItem.getCount()) + .build(); + } + + // == 변수 변경 메소드 == // + public void setItemName(String itemName) { + this.itemName = itemName; + } } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/entity/OrderItem.java b/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/entity/OrderItem.java index f61fd99..2b80748 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/entity/OrderItem.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/orderItem/entity/OrderItem.java @@ -34,12 +34,4 @@ public class OrderItem extends BaseEntity { private Long count; - public OrderItemDto toOrderItemDto() { - return OrderItemDto.builder() - .id(id) - .itemId(itemId) - .price(price) - .count(count) - .build(); - } }