관리 메뉴

Mini

주문, 주문상품 엔티티 개발 // 복잡한생성은 생성메서드 본문

Java/Spring-app

주문, 주문상품 엔티티 개발 // 복잡한생성은 생성메서드

Mini_96 2023. 6. 8. 01:41

*생성메서드

class Order

//==생성 메서드==// 복잡한생성은 생성메서드로 해결!
    public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ //...문법 == 유사리스트
        Order order = new Order();
        order.setMember(member);
        order.setDelivery(delivery);
        for(OrderItem orderItem:orderItems){	//각각주문에대해 다 add
            order.addOrderItem(orderItem);
        }
        order.setStatus(OrderStatus.ORDER);
        order.setOrderDate(LocalDateTime.now());
        return order;
    }
 //==비즈니스 로직==//
    /**
     * 주문 취소
     */
    public void cancel(){
        if(delivery.getStatus()==DeliveryStatus.COMP){
            throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다.")
        }

        //else
        this.setStatus(OrderStatus.CANCEL);
        for(OrderItem orderItem : orderItems){
            orderItem.cancel();
        }
    }

    //==조회 로직==//

    /**
     * 전체 주문 가격 조회
     * @return
     */
    public int getTotalPrice(){
        int totalPrice=0;
        for(OrderItem orderItem : orderItems){
            totalPrice+=orderItem.getTotalPrice();
        }
        return totalPrice;

        //람다 => 깔끔하게 할수있음.
    }

 

class OrderItem

 //==생성 메서드==//
    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);  //재고수량 원복
    }

    //==조회 로직==//

    /**
     * 주문상품 전체 가격조회
     * @return
     */
    public int getTotalPrice() {
        return getOrderPrice()*getCount();
    }

c