
해당 포스팅에서는 장바구니 주문 기능의 흐름에 대해서 정리해 보고자 한다.
Controller: 장바구니 주문 요청을 처리한다.
CartService: 장바구니와 관련된 비즈니스 로직을 처리한다.
OrderService: 주문과 관련된 비즈니스 로직을 처리한다.
@PostMapping("/cart/orders")
public ResponseEntity<Object> orderCartItem(@RequestBody CartOrderDto cartOrderDto, @CurrentAccount Account account) {
List<Long> cartItemIds = cartOrderDto.getCartItemIds();
if (cartItemIds == null || cartItemIds.isEmpty()) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("주문할 상품을 선택해주세요.");
}
for (Long cartItemId : cartItemIds) {
if (cartService.validateCartItem(cartItemId, account.getUserIdentifier())) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("주문 권한이 없습니다.");
}
}
Long orderId = cartService.orderCartItem(cartItemIds, account.getUserIdentifier());
return ResponseEntity.ok(orderId);
}
public Long orderCartItem(List<Long> cartItemIds, String userIdentifier) {
List<OrderDto> orderDtoList = new ArrayList<>();
for (Long cartItemId : cartItemIds) {
CartItem cartItem = cartItemRepository.findById(cartItemId).orElseThrow(EntityNotFoundException::new);
OrderDto orderDto = new OrderDto();
orderDto.setItemId(cartItem.getItem().getId());
orderDto.setCount(cartItem.getCount());
orderDtoList.add(orderDto);
}
Long orderId = orderService.orders(orderDtoList, userIdentifier);
for (Long cartItemId : cartItemIds) {
CartItem cartItem = cartItemRepository.findById(cartItemId).orElseThrow(EntityNotFoundException::new);
cartItemRepository.delete(cartItem);
}
return orderId;
}