실습하면서 생긴 오류

  1. JpashopApplication을 돌리고 난 결과가 finished with exit code 0이면 정상적으로 작동이 되는줄 알았으나 localhost:8080으로 들어가지지 않는 문제가 발생

→ 오류를 읽어보았는데 member라는 class가 2개 이상 존재하여서 발생되는 문제라고 하였다. 그래서 사용하지않는 member class를 제거하고 domain.item package에 있는 member class만 남겼더니 해결되었다.

주문 도메인 개발

구현 기능 1.상품 주문 2.주문 내역 조회 3.주문 취소 cancel

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

Order class (jpabook.jpashop.domain.item)

//==생성 메서드==//createOrder매서드
public staticOrder createOrder(Member member, Delivery delivery,
                                OrderItem... orderItems) { //멤버 배송정보 주문아이템들 
매개변수로 하기(...은 여러개 넘길 수 있다)
    Order order =new Order(); //Order생성
    order.setMember(member);
    order.setDelivery(delivery);
for(OrderItem orderItem : orderItems) { //for문 사용해서
        order.addOrderItem(orderItem); //orderItem 넣어준다
    } 
    order.setStatus(OrderStatus.ORDER); //orderStatus 처음상태를 ORDER로 해주기
    order.setOrderDate(LocalDateTime.now()); //주문시간정보를 현재시간으로 잡기
return order;
}

Order class (jpabook.jpashop.domain.item)

//==비즈니스 로직==//
/**주문 취소*/
public void cancel() {

if(delivery.getStatus() == DeliveryStatus.COMP) { //delivery상태가 이미 배송완료되면 
throw newIllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다.");
    }//(validation logic 사용)

//그 이외의 경우는!
this.setStatus(OrderStatus.CANCEL); //order상태를 cancel로 
for(OrderItem orderItem :orderItems) { //for문 사용해서
        orderItem.cancel();//orderItem에도 다 cancel 넣어주도록 해준다
    }
}

OrderItem class로 가서

//==비즈니스 로직==//
    /** 주문 취소 */
    public void cancel() {
        getItem().addStock(count); // 주문수량만큼 재고수량을 늘려주는게 중요
    }

다시 Order class에서 
//==조회 로직==//
/**전체 주문 가격 조회*/
public int getTotalPrice() {
int totalPrice = 0; //0으로 초기화
for(OrderItem orderItem :orderItems) { //for문을 돌려서
        totalPrice += orderItem.getTotalPrice(); //totalPrice 총 가격알아내기 
    }
return totalPrice;
}

OrderItem class로 가서

private int orderPrice; //주문 가격
    private int count; //주문 수량

public int getTotalPrice() {
        return getOrderPrice() * getCount(); //주문가격*주문수량
    }

2.주문 리포지토리 개발

OrderRepository class (jpabook.jpashop.repository)

jpa에서 (주문내역에서 검색기능은 동적쿼리가 들어가는데 )동적쿼리를 어떻게 해결해야할까?