ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쇼핑몰프로젝트 --카테고리 당 아이템 조회(api기반)
    쇼핑몰 프로젝트 2024. 6. 15. 13:41

     

    카테고리당 아이템 조회 - 검색, 페이징, 정렬 가능하게, 정렬은 최신순이 기준, 좋아요 많은 순, 별점 높은 순 추가 정렬

     

     

    itemRepository

     //(카테고리당 아이템 조회)
    //    public List<Item> findAllItem(Long categoryId) {
    //        return em.createQuery("select i from Item i where i.category.categoryId = :categoryId", Item.class)
    //                .setParameter("categoryId", categoryId)
    //                .getResultList();
    //    }
    
    
    
    
        //카테고리 당 아이템 조회 기본 최신순 정렬, 후기 많은 순, 좋아요 많은 순 추가 정렬 (영한아저씨 따라한 것)
    //    public List<Item> findAllItemSortBy(Long categoryId, int offset, int limit, String sortBy) {
    //        String queryString = "select distinct i from Item i" +
    //                " join fetch i.category c" +
    //                " where i.category.categoryId = :categoryId" +
    //                " order by i.itemId desc"; // 최신순으로 정렬 (itemId가 클수록 최신 데이터)
    //
    //        // 추가적으로 정렬을 적용하는 경우
    //        if ("itemRatings".equals(sortBy)) {
    //            queryString += ", i.itemRatings desc";
    //        } else if ("likeCount".equals(sortBy)) {
    //            queryString += ", i.itemLike desc";
    //        } else if ("itemId".equals(sortBy)) {
    //            // 이미 최신순으로 정렬되어 있으므로 추가적인 정렬 필요 없음
    //        }
    //
    //        TypedQuery<Item> query = em.createQuery(queryString, Item.class)
    //                .setParameter("categoryId", categoryId)
    //                .setFirstResult(offset)
    //                .setMaxResults(limit);
    //
    //        return query.getResultList();
    //    }
    
    
    
    
        //카테고리 당 아이템 조회(검색, 정렬, 페이징)
        public List<Item> findAllItemPagingSortByAndKeyword(Long categoryId, String keyword, Pageable pageable, String sortBy) {
            String queryString = "select distinct i from Item i" +
                    " join fetch i.category c" +
                    " where i.category.categoryId = :categoryId";
    
            // 검색 조건 추가
            boolean hasKeyword = (keyword != null && !keyword.isEmpty());
            if (hasKeyword) {
                queryString += " and i.itemName like :keyword";
            }
    
            // 기본 정렬 조건
            queryString += " order by i.itemId desc"; // 최신순으로 정렬 (itemId가 클수록 최신 데이터)
    
            // 추가 정렬 조건
            if ("itemRatings".equals(sortBy)) {
                queryString += ", i.itemRatings desc";
            } else if ("likeCount".equals(sortBy)) {
                queryString += ", i.itemLike desc";
            }
    
            TypedQuery<Item> query = em.createQuery(queryString, Item.class)
                    .setParameter("categoryId", categoryId)
                    .setFirstResult((int) pageable.getOffset())
                    .setMaxResults(pageable.getPageSize());
    
            // 검색 키워드 파라미터 설정
            if (hasKeyword) {
                query.setParameter("keyword", "%" + keyword + "%");
            }
    
            return query.getResultList();
        }

     

     

    itemService

     //카테고리 당 아이템 조회
    //    public List<ItemListDto> findAllItem(Long categoryId) {
    //        List<Item> items = itemRepository.findAllItem(categoryId);
    //
    //        List<ItemListDto> result = items.stream()
    //                .map(ItemListDto::new)
    //                .collect(Collectors.toList());
    //
    //        return result;
    //    }
    
    
    
        //카테고리 당 아이템 조회 기본 최신순 정렬, 후기 많은 순, 좋아요 많은 순 추가 정렬(영한아저씨)
    //    public List<ItemListDto> findAllItemSortBy(Long categoryId, int offset, int limit, String sortBy) {
    //        List<Item> items = itemRepository.findAllItemSortBy(categoryId, offset, limit, sortBy);
    //
    //        List<ItemListDto> result = items.stream()
    //                .map(ItemListDto::new)
    //                .collect(Collectors.toList());
    //
    //        return result;
    //    }
    
    
        //카테고리당 아이템 조회(정렬,검색,페이징)
        public List<ItemListDto> finaAllItemPagingSortBy(Long categoryId, String keword, Pageable pageable, String sortBy) {
            List<Item> items = itemRepository.findAllItemPagingSortByAndKeyword(categoryId, keword, pageable, sortBy);
    
            List<ItemListDto> result = items.stream()
                    .map(ItemListDto::new)
                    .collect(Collectors.toList());
    
            return result;
    
        }

     

     

    categoryOneDto

    package ypjs.project.dto.categorydto;
    
    import lombok.Getter;
    import ypjs.project.domain.Category;
    import ypjs.project.dto.itemdto.ItemListDto;
    
    import java.util.List;
    
    @Getter
    public class CategoryOneDto {
    
        private Long categoryId;
        private Long categoryParent;
        private String categoryName;
    
        private List<ItemListDto> items;
    
        public CategoryOneDto() {}
    
    
        public CategoryOneDto(Category category, List<ItemListDto> items) {
            categoryId = category.getCategoryId();
    
            // categoryParent가 null이 아닐 때만 값을 설정
            if (category.getCategoryParent() != null) {
                categoryParent = category.getCategoryParent().getCategoryId();
            } else {
                categoryParent = null;
            }
    
            categoryName = category.getCategoryName();
            this.items = items;
        }
    
        }
    
    
    
    
    
    
    
    

     

     

    itemListDto

    package ypjs.project.dto.itemdto;
    
    import lombok.Getter;
    import ypjs.project.domain.Item;
    
    @Getter
    public class ItemListDto {
    
        private String itemName;
        private String itemContent;
        private int itemPrice;
        private int itemStock;
    
        public ItemListDto() {}
    
        public ItemListDto(Item item) {
    
            itemName = item.getItemName();
            itemContent = item.getItemContent();
            itemPrice = item.getItemPrice();
            itemStock = item.getItemStock();
    
        }
    
    
    
    
    }
    

     

     

    itemController

    
        //category당 아이템 조회
    //    @GetMapping("/ypjs/categoryItem/get/{categoryId}")
    //    public CategoryOneDto getOneCategory(@PathVariable("categoryId") Long categoryId) {
    //
    //        Category category =  categoryService.findOneCategory(categoryId);
    //
    //       List<ItemListDto> items = itemService.findAllItem(categoryId);
    //
    //        return new  CategoryOneDto(category, items);
    //    }
    
    
    
        //카테고리당 아이템 조회 (페이징, 정렬)
    //    @GetMapping("/ypjs/categoryItem/get/{categoryId}")
    //    public CategoryOneDto getAllItem(@PathVariable("categoryId") Long categoryId,
    //                                         @RequestParam(value = "offset", defaultValue = "0") int offset,
    //                                         @RequestParam(value = "limit", defaultValue = "2") int limit,
    //                                         @RequestParam(value = "sortBy", defaultValue = "itemId") String sortBy) {
    //
    //        Category category = categoryService.findOneCategory(categoryId);
    //
    //        List<ItemListDto> items = itemService.findAllItemSortBy(categoryId, offset, limit, sortBy);
    //
    //        return new CategoryOneDto(category, items);
    //    }
    
        //카테고리당 아이템 조회(정렬,검색,페이징(페이징받아서 페이징))
        @GetMapping("/ypjs/categoryItem/get/{categoryId}")
        public CategoryOneDto getAllItem(@PathVariable("categoryId") Long categoryId,
                                         @RequestParam(value = "page",defaultValue = "0") int page,
                                         @RequestParam(value = "size",defaultValue = "3") int size,
                                         @RequestParam(value = "sortBy", defaultValue = "itemId") String sortBy,
                                         @RequestParam(value = "keyword", required = false) String keyword) {
    
            Pageable pageable = PageRequest.of(page, size);
    
            Category category = categoryService.findOneCategory(categoryId);
    
            List<ItemListDto> items = itemService.finaAllItemPagingSortBy(categoryId, keyword, pageable, sortBy);
    
            return new CategoryOneDto(category, items);
    
        }
Designed by Tistory.