🦁멋쟁이 사자처럼 11기/백엔드 정기세션 추가학습

SESSION 16 주문 pt.2 주문 이력 조회 및 주문 취소

1son 2023. 5. 20. 17:25

목차

1. 주문 이력 조회 구현하기
2. 주문 취소 구현하기 

 

1. OrderItemDto

  • 주문 상품 정보를 담을 OrderItemDto 객체 생성
  • 주문 상품 정보 (상품, 수량)와 상품의 이미지를 담고 있음
@Getter
@Setter
public class OrderItemDto {

    public OrderItemDto(OrderItem orderItem, String imgUrl){
    //item엔티티까지 넘어가서 가져옴
        this.itemNm = orderItem.getItem().getItemNm();
        this.count = orderItem.getCount();
        this.orderPrice = orderItem.getPrice();
        this.imgUrl = imgUrl;
    }

    //상품명
    private String itemNm;
    //주문 수량
    private int count;
    //주문 금액
    private int orderPrice;
    //상품 이미지 경로
    private String imgUrl;


}

 

2. OrderHistDto

  • 주문 정보를 담을 OrderHistDto 객체 생성
  • 주문 정보내에 주문 상품 정보 List 존재
@Getter
@Setter
public class OrderHistDto {

    public OrderHistDto(Order order){
        this.orderId = order.getId();
        this.orderDate = order.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
        this.orderStatus = order.getOrderstatus();
    }

    private Long orderId;
    private String orderDate;
    private OrderStatus orderStatus;
    private List<OrderItemDto> orderItemDtoList = new ArrayList<>();

    public void addOrderItemDto(OrderItemDto orderItemDto){
        orderItemDtoList.add(orderItemDto);
    }
}

 

3. 구매 내역 조회 리포지토리

  • @Query 어노테이션을 이용하여 구매 내역을 조회
  • SQL 문을 여러줄로 작성 시 마지막에 띄어쓰기 " " 필수
public interface OrderRepository extends JpaRepository<Order, Long> {

    //해당 유저의 구매 이력을 페이징 정보에 맞게 조회(주문 객체들)
    @Query("select o from Order o " +
            "where o.member.email = :email " +
            "order by o.date desc")
    List<Order> findOrders(@Param("email") String email, Pageable pageable);

    //해당 유저의 주문 개수
    @Query("select count(o) from Order o " +
            "where o.member.email = :email")
    Long countOrder(@Param("email") String email);
}

 

1. OrderService - 주문 이력

주문 목록을 조회하는 로직 

- 파라미터로는 이메일과 페이징 처리를 위한 Pageable을 받아온다.

- 반환값은 *PageImpl을 이용해 페이지 구현 객체를 생성한 값

 

*PageImpl
Spring Data JPA와 함께 사용되는 경우, PageImpl 객체는 데이터베이스에서 검색한 결과를 페이징 처리하여 반환하는 데 사용될 수 있습니다. 이를 통해 클라이언트는 원하는 페이지의 데이터만 받아올 수 있고, 서버는 대량의 데이터를 효율적으로 처리할 수 있게 됩니다.

 

 

 

 

참고 블로그 : 

https://velog.io/@codren/%EA%B5%AC%EB%A7%A4-%EB%82%B4%EC%97%AD-%EC%A1%B0%ED%9A%8C

 

구매 내역 조회

OrderItemDto, OrderHistDto, DateTimeFormatter, @Query 어노테이션, batch_fetch_size 지정 (지연로딩 관련)

velog.io

https://velog.io/@codren/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0

 

주문 취소하기

주문 취소 시 주문 상태변경 및 재고 변경

velog.io