feat(점주 페이지 주문 API Feign Client 로직 추가): 점주 페이지 주문 API Feign Client 로직 추가
- Entity가 Dto에 종속적이던 문제 수정 (ex. toOrderDto) - Dto에서 Entity를 파라미터로 받아 생성하는 것으로 수정 - Feign Client 를 사용하여 api 호출 - UserClient, StoreClient 를 통해 사용자명과 아이템 이름 가져오기
This commit is contained in:
@@ -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<OrderItemDto> orderItemDtoList;
|
||||
|
||||
@Builder
|
||||
public OrderDto(Long id, Long userId, Long userCouponId, Long orderPrice, LocalDateTime orderTime, Long usedPoint,
|
||||
OrderStatus orderStatus, List<OrderItemDto> orderItemDtoList) {
|
||||
public OrderDto(Long id, Long userId, Long userCouponId, Long orderPrice, LocalDateTime orderTime,
|
||||
Long usedPoint, OrderStatus orderStatus, List<OrderItemDto> 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<OrderItem> orderItems = order.getOrderItems();
|
||||
List<OrderItemDto> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,22 +43,4 @@ public class Order extends BaseEntity {
|
||||
@OneToMany(mappedBy = "order")
|
||||
private List<OrderItem> orderItems;
|
||||
|
||||
// == 변환 메소드 == //
|
||||
public OrderDto toOrderDto() {
|
||||
List<OrderItemDto> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<OrderDto> findOrderMain(LocalDate orderDate) {
|
||||
// 주문 가져오기
|
||||
List<OrderDto> 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;
|
||||
}
|
||||
|
||||
@@ -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> orderDto = orderService.findOrderMain(orderRequest.convertOrderTimeToLocalDate());
|
||||
List<OrderDto> orderDto = orderService.findOrderMain(orderMainRequest.convertOrderTimeToLocalDate());
|
||||
|
||||
List<OrderResponse> orderResponses = orderDto.stream()
|
||||
.map(OrderResponse::new)
|
||||
List<OrderMainResponse> 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<T> {
|
||||
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<OrderItemResponse> orderItemDtoList;
|
||||
private String userName;
|
||||
private List<OrderItemResponse> orderItemResponses;
|
||||
private OrderStatus orderStatus;
|
||||
private String orderTime;
|
||||
|
||||
public OrderResponse(OrderDto orderDto) {
|
||||
public OrderMainResponse(OrderDto orderDto) {
|
||||
List<OrderItemResponse> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<OrderItemOptionDto> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user