diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Order.java b/jpashop/src/main/java/com/example/jpashop/domain/Order.java index 5cd5c2cc..43e40c0e 100644 --- a/jpashop/src/main/java/com/example/jpashop/domain/Order.java +++ b/jpashop/src/main/java/com/example/jpashop/domain/Order.java @@ -48,4 +48,49 @@ public class Order { this.delivery = delivery; delivery.setOrder(this); } + + // 생성 메서드 + public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { + 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; + } + + // 비지니스 로직 + /** + * 주문 취소 + */ + public void cancel() { + if (delivery.getStatus() == DeliveryStatus.COMP) { + throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능 합니다."); + } + + this.setStatus(OrderStatus.CANCEL); +// for (OrderItem orderItem : orderItems) { +// orderItem.cancel(); +// } + orderItems.forEach(OrderItem::cancel); + } + + // 조회 로직 + + /** + * 전체 주문 가격 조회 + */ + public int getTotalPrice() { + return orderItems.stream() + .mapToInt(OrderItem::getTotalPrice) + .sum(); +// int totalPrice = 0; +// for (OrderItem orderItem : orderItems) { +// totalPrice += orderItem.getTotalPrice(); +// } +// return totalPrice; + } } diff --git a/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java b/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java index 4e108680..4fe4ac93 100644 --- a/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java +++ b/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java @@ -24,4 +24,28 @@ public class OrderItem { private int orderPrice; // 주문가격 private int count; // 주문 수량 + + // 생성 메서드 + public static OrderItem createOrderItem(Item item, int orderPrice, int count){ + OrderItem orderItem = new OrderItem(); + orderItem.setItem(item); + orderItem.setOrderPrice(orderPrice); + orderItem.setCount(count); + item.removeStock(count); + return orderItem; + } + + // 비지니스 로직 + public void cancel() { + getItem().addStock(count); + } + + // 조회 로직 + + /** + * 주문상품 전체 가격 조회 + */ + public int getTotalPrice() { + return getOrderPrice() * getCount(); + } }