주문하면 단순 주문 목록에 데이터가 들어갈 뿐만 아니라 재고 목록에서 수량 줄어야 한다!
주문 취소하면 재고가 다시 증가되는 것도 마찬가지다.
Order
생성메서드 : 생성해야하는 필드(Member, Delivery, OrderItem, LocalDateTime, OrderStatus)가 많을 땐 생성 메서드를 따로 구현한다!
OrderStatus : 주문이 생성되면 ORDER로 해준다.
OrderDate : LocalDateTime.now()
publicstaticOrdercreateOrder(Member member,Delivery delivery,OrderItem...orderItems){//orderItem에서 이미 수량 감산하고 넘어온다.Order order =newOrder();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 메서드 구현 필요)