주문, 주문상품 엔티티 개발

트랜지션 주도 패턴, 도메인 주도 패턴?

구현 기능

  • 상품 주문

  • 주문 내역 조회

  • 주문 취소

구현 순서

  • 주문 엔티티, 주문상품 엔티티 개발(핵심 비즈니스 로직)

  • 주문 리포지토리 개발

  • 주문 서비스 개발

  • 주문 검색 기능 개발

  • 주문 기능 테스트

주문하면 단순 주문 목록에 데이터가 들어갈 뿐만 아니라 재고 목록에서 수량 줄어야 한다! 주문 취소하면 재고가 다시 증가되는 것도 마찬가지다.

Order

  1. 생성메서드 : 생성해야하는 필드(Member, Delivery, OrderItem, LocalDateTime, OrderStatus)가 많을 땐 생성 메서드를 따로 구현한다! OrderStatus : 주문이 생성되면 ORDER로 해준다. OrderDate : LocalDateTime.now()

public static Order createOrder(Member member,Delivery delivery,OrderItem... orderItems){//orderItem에서 이미 수량 감산하고 넘어온다.
    Order order = new Order();
    order.setMember(member);
    order.setDelivery(delivery);
    for(OrderItem orderItem : orderItems){
        order.addOrderItem(orderItem);
    }
    order.setStatus(OrderStatus.ORDER);
    order.setOrderDate(LocalDateTime.now());
    return order;
}

2. 비즈니스 로직 : 주문 취소 배송이 완료되면 주문 취소가 불가능하다. 1. validation 로직 : delivery.getStatus() == DeliveryStatus.COMP

Order 내부에 있는 Delivery 엔티티의 상태 조회하고, 이미 배송완료된 상태라면 Exception 2. validation 통과 후 - 주문 상태 CANCEL로 처리 - 주문 상품도 cancle() 처리 : 주문(상품 2개)일 때 상품 각각에 대해서도 취소 처리해줘야함! (OrderItem에서 cancle 메서드 구현 필요)

3. 조회 로직 : 전체 주문 가격 조회 현재 Order에 있는 OrderItem 리스트인 orderItems를 반복문으로 돌면서 각 상품 수량과 가격을 곱한 값을 다 더해준다! (OrderItem에서 상품 수량과 가격을 곱해서 총가격 구하는 메서드 구현 필요)

Java8 버전 문법 : stream을 mapToInt로 변환

OrderItem

  1. 생성메서드 : 생성해야하는 필드(Item, Order, orderPrice, count)가 많을 땐 생성 메서드를 따로 구현한다!

2. 비즈니스 로직

3. 조회 로직 : 주문 상품 전체 가격 조회

Last updated

Was this helpful?