코드 그라데이션

shop 구현 (14) 주문 이력 조회 본문

Spring/SpringShop

shop 구현 (14) 주문 이력 조회

완벽한 장면 2023. 7. 22. 11:59

주문 이력 조회하기

@GetMapping(value = {"/orders", "/orders/{page}"})
public String orderHist(@PathVariable("page") Optional<Integer> page,
                       
Principal principal, Model model){
   
Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5);

   
Page<OrderHistDto> orderHistDtoList = orderService.getOrderList(principal.getName(), pageable);

   
model.addAttribute("orders", orderHistDtoList);
   
model.addAttribute("page", pageable.getPageNumber());
   
model.addAttribute("maxPage",5);
   
return "/order/orderHist";
}

 

 

일단 페이징 처리란 책에 있는 페이지라고 생각하면 된다.

한줄로 쓰면 난잡하고 보기 어려우니까. 읽기 좋게 페이지로 구분하듯이.서버에서도 이점이 있다.

 

그래서 페이징은 정렬하고 관계있다기보다는 한 번에 가져올 때 얼마만큼의 양을 가져올 건지를 정하는 것이라고 생각하는 게 더 낫다.

 

만약 페이징 처리가 없다면?(하지 않았을 때)

데이터 양이 엄청난 경우, 

 

메모리 한정된 자원에 이 데이터를 다 올린다고 생각하면 메모리 과부하.

전체 데이터를 사용자가 보고 싶다고 하더라도 개발자가 정한 양만큼 전체를 보여주면 된다.

그럼 메모리 부담도 당연히 줄어든다.

** 페이징을 할 때 굳이 정렬을 하지 않아도 된다. 이 두 개념은 사실상 같은 개념이라고 보기에는 어렵다.

페이징은 내가 보여줄 단위.일반적으로 정렬 해서 보여주기 때문에...

 

Pageable은 요청이고 Page는 응답.

 

 

    for(Order order : orders){
       
OrderHistDto orderHistDto = new OrderHistDto(order);
       
List<OrderItem> orderItems = order.getOrderItems();
       
for(OrderItem orderItem : orderItems){
           
ItemImg itemImg = itemImgRepository
                   
.findByItemIdAndRepImgYn(orderItem.getItem().getId(),"Y");
           
OrderItemDto orderItemDto = new OrderItemDto(orderItem, itemImg.getImgUrl());
           
orderHistDto.addOrderItemDto(orderItemDto);
        }

       
orderHistDtos.add(orderHistDto);

그래서 이거는 가져온 5개의 주문을 보면서 주문이력을 만드는 과정.

주문이력에는 대표이미지가 들어간다.

 

구매이력 로직

 

 

 

 

 

 

728x90
Comments