feat(점주 페이지 주문 API Feign Client 로직 추가): 점주 페이지 주문 API Feign Client 로직 추가

- Entity가 Dto에 종속적이던 문제 수정 (ex. toOrderDto)
  - Dto에서 Entity를 파라미터로 받아
생성하는 것으로 수정
- Feign Client 를 사용하여 api 호출
  - UserClient, StoreClient 를
통해 사용자명과 아이템 이름 가져오기
This commit is contained in:
bum12ark
2022-02-03 18:06:44 +09:00
parent d116a902d5
commit fc07d54284
6 changed files with 99 additions and 47 deletions

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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;
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}