WindsomeProject - 상품 주문 기능

박민수·2024년 1월 6일
0

WindsomeProject

목록 보기
8/32
post-thumbnail

개요

해당 포스팅에서는 상품 주문 기능의 흐름에 대해서 정리해 보고자 한다.

상품 주문 기능

  1. Controller: 상품 주문 요청을 처리한다.
  2. CartService: 상품 주문과 관련된 비즈니스 로직을 처리한다.

Controller 로직

  1. 비동기 통신으로 사용자가 주문하고자 하는 상품의 정보를 OrderDto 객체에 매핑한다
  2. 상품을 주문한다. (Order Service에 위임)
@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);
}

Service 로직

  1. Item과 Account를 DB에서 조회한다.
  2. 주문하고자 하는 상품들이 담긴 List를 생성한다.
  3. 주문을 생성하고, DB에 저장한다.
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();
}
profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보