From d74e1d4db13e204c415741ce4ede1d2c99c61019 Mon Sep 17 00:00:00 2001 From: GeonWoo Date: Wed, 7 Feb 2024 02:27:44 +0900 Subject: [PATCH] Fix: popular Item inquiry --- .../dpang/item/controller/ItemController.java | 4 +-- .../kea/dpang/item/service/ItemService.java | 2 +- .../dpang/item/service/ItemServiceImpl.java | 33 +++++++++++++------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/kea/dpang/item/controller/ItemController.java b/src/main/java/kea/dpang/item/controller/ItemController.java index 9704491..aa973ec 100644 --- a/src/main/java/kea/dpang/item/controller/ItemController.java +++ b/src/main/java/kea/dpang/item/controller/ItemController.java @@ -121,8 +121,8 @@ public ResponseEntity>> getReviewList( @GetMapping("/popular/list") @Operation(summary = "인기 상품 리스트 조회", description = "인기 상품 정보를 페이지 정보에 따라 조회합니다.") - public ResponseEntity>> getPopularItems(Pageable pageable) { - List popularItems = itemService.getPopularItems(); + public ResponseEntity>> getPopularItems(Pageable pageable) { + List popularItems = itemService.getPopularItems(pageable); return new ResponseEntity<>( new SuccessResponse<>(HttpStatus.OK.value(),"인기 상품 리스트가 조회되었습니다.", popularItems), HttpStatus.OK diff --git a/src/main/java/kea/dpang/item/service/ItemService.java b/src/main/java/kea/dpang/item/service/ItemService.java index 367c4a2..5bb5889 100644 --- a/src/main/java/kea/dpang/item/service/ItemService.java +++ b/src/main/java/kea/dpang/item/service/ItemService.java @@ -44,7 +44,7 @@ Page getItemList( * * @return 조회된 인기 상품 목록이 담긴 DTO 리스트 */ - List getPopularItems(); + List getPopularItems(Pageable pageable); void incrementViewCount(Long itemId); diff --git a/src/main/java/kea/dpang/item/service/ItemServiceImpl.java b/src/main/java/kea/dpang/item/service/ItemServiceImpl.java index 073e3fc..83e4642 100644 --- a/src/main/java/kea/dpang/item/service/ItemServiceImpl.java +++ b/src/main/java/kea/dpang/item/service/ItemServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Set; @@ -85,23 +86,35 @@ public ItemDto getItemInfo(Long itemId) { // 인기 상품 조회 @Override @Transactional(readOnly = true) - public List getPopularItems() { + public List getPopularItems(Pageable pageable) { // Redis에서 조회수를 기반으로 인기 상품 ID와 점수를 가져옴 Set> items = redisTemplate.opsForZSet() - .reverseRangeWithScores(ITEM_VIEW_COUNT_KEY, 0, -1); + .reverseRangeWithScores(ITEM_VIEW_COUNT_KEY, pageable.getOffset(), pageable.getOffset() + pageable.getPageSize() - 1); // 가져온 데이터를 PopularItemDto 리스트로 변환 - return items.stream().map(item -> { + List popularItems = new ArrayList<>(); + for (ZSetOperations.TypedTuple item : items) { Long itemId = Long.valueOf(item.getValue()); - Double score = item.getScore(); - String itemName = itemRepository.findById(itemId) - .map(Item::getName) - .orElseThrow(() -> new ItemNotFoundException(itemId)); - - return new PopularItemDto(itemId, itemName, score); - }).toList(); + try { + Item foundItem = itemRepository.findById(itemId) + .orElseThrow(() -> new ItemNotFoundException(itemId)); + + // 판매자 이름을 가져옴 + ResponseEntity> sellerResponse = sellerServiceFeignClient.getSeller(foundItem.getSellerId()); + SellerDto seller = sellerResponse.getBody().getData(); + String sellerName = seller.getName(); + + popularItems.add(new ItemDetailDto(foundItem, sellerName)); + } catch (ItemNotFoundException e) { + log.error("상품을 찾을 수 없습니다. 상품 ID: {}", itemId, e); + // 상품을 찾을 수 없는 경우, 다음 상품으로 넘어감. + continue; + } + } + return popularItems; } + @Override public void incrementViewCount(Long itemId) { redisTemplate.opsForZSet().incrementScore(ITEM_VIEW_COUNT_KEY, String.valueOf(itemId), 1);