-
쇼핑몰프로젝트 --카테고리 당 아이템 조회(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); }
'쇼핑몰 프로젝트' 카테고리의 다른 글
쇼핑몰 프로젝트 --아이템 등록, 수정 (화면구현) (0) 2024.06.17 쇼핑몰 프로젝트 --아이템 리뷰 등록, 조회, 수정, 삭제(api) (0) 2024.06.15 쇼핑몰프로젝트 --아이템, 카테고리 수정, 삭제 (api기반) (0) 2024.06.15 쇼핑몰프로젝트 --상품, 카테고리 등록, 조회 (api기반) (0) 2024.06.15 쇼핑몰프로젝트 --엔티티 만들기 (api기반) (0) 2024.06.15