해당 포스팅에서는 상품 주문 기능의 흐름에 대해서 정리해 보고자 한다.
- Controller: 상품 주문 요청을 처리한다.
- CartService: 상품 주문과 관련된 비즈니스 로직을 처리한다.
@PostMapping("/order")
public ResponseEntity<Object> order(@RequestBody @Valid OrderDto orderDto, BindingResult bindingResult, @CurrentAccount Account account) {
if (bindingResult.hasErrors()) {
StringBuilder sb = new StringBuilder();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
sb.append(fieldError.getDefaultMessage());
}
return ResponseEntity.badRequest().body(sb.toString());
}
Long orderId;
try {
orderId = orderService.order(orderDto, account.getUserIdentifier());
} catch (Exception e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
return ResponseEntity.ok().body(orderId);
}
public Long order(OrderDto orderDto, String userIdentifier) {
// 상품, 계정 DB에서 조회
Item item = itemRepository.findById(orderDto.getItemId()).orElseThrow(EntityNotFoundException::new);
Account account = accountRepository.findByUserIdentifier(userIdentifier);
// 주문 상품 생성 및 저장
List<OrderItem> orderItemList = new ArrayList<>();
OrderItem orderItem = OrderItem.createOrderItem(item, orderDto.getCount());
orderItemList.add(orderItem);
// 주문 생성 및 DB 저장
Order order = Order.createOrder(account, orderItemList);
orderRepository.save(order);
return order.getId();
}