스프링데이터 + JPA/웹 애플리케이션 개발

16. 주문 도메인 개발

sdafdq 2023. 11. 7. 08:17

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

주문 리포지토리 개발

주문 서비스 개발

주문 기능 테스트

주문 검색 기능 테스트

 

구현 기능

상품 주문

주문 내역 조회

주문 취소

 

일단 주문 엔티티 개발

public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){
    Order order = new Order();
    order.changeMember(member);
    order.changeDelivery(delivery);
    for (OrderItem orderItem : orderItems) {
        order.addOrderItem(orderItem);
    }
    order.setStatus(OrderStatus.ORDER);
    order.setOrderDate(LocalDateTime.now());
    return order;
}

주문 생성하는 걸 만들었다.

이런 걸 생성메소드 라고 한다.

 

이거 하나면 주문 하나 쫙 연관관계까지 세팅해 주는거다.

주문 생성에 대한 비즈니스 로직을 여기에 응집시켰다.

주문 생성을 하려고 하면 저거만 하면 된다.

 

setter들은 private로 했고, 연관관계 편의 메서드 들을 사용했다.

 

 

또 주문 취소시 메소드

public void cancel(){
    if(delivery.getStatus() == DeliveryStatus.COMP){
        throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다.");
    }

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

나는 주석처럼 저렇게 했었는데, 

아예 OrderItem에 cancel 메소드를 만들었다.

    public void cancel(){
        this.getItem().addStock(count);
    }

확실히 이게 괜찮아 보인다.

 

 

그 다음 총 가격

public int getTotalPrice(){
    int totalPrice = 0;
    for( OrderItem orderItem : orderItems){
        totalPrice += orderItem.getTotalPrice();
    }
    return totalPrice;
}

주문 아이템들의 총 가격을 모두 더한 것

 

주문아이템의 getTotalPrice()는

public int getTotalPrice(){
    return getOrderPrice() * getCount();
}

 

 

 

그리고, OrderItem에서 createOrderItem도 만드는 게 좋아보인다.

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;
}

그런데 이거 setter가 너무 많이 붙었다.

public으로 쓰고 있다.

https://www.inflearn.com/questions/1068743

질문 남겼다.

 

 

'스프링데이터 + JPA > 웹 애플리케이션 개발' 카테고리의 다른 글

18. 주문 기능 테스트  (0) 2023.11.08
17. 주문 리포지토리, 서비스  (0) 2023.11.07
15. 상품 개발  (0) 2023.11.07
14. 회원 테스트  (0) 2023.11.06
13. 회원 서비스  (0) 2023.11.06