diff --git a/src/main/java/co/orange/ddanzi/repository/ProductRepository.java b/src/main/java/co/orange/ddanzi/repository/ProductRepository.java index 5c53197..376792b 100644 --- a/src/main/java/co/orange/ddanzi/repository/ProductRepository.java +++ b/src/main/java/co/orange/ddanzi/repository/ProductRepository.java @@ -25,6 +25,5 @@ public interface ProductRepository extends JpaRepository { @Query(value = "SELECT * FROM products p WHERE p.stock > 0 AND p.name LIKE %:keyword% ", nativeQuery = true) List findAllByName(@Param("keyword") String keyword); - @Query("SELECT p FROM Product p WHERE p.id IN :productIds ORDER BY FIELD(p.id, :productIds)") List findByIdIn(List productIds); } diff --git a/src/main/java/co/orange/ddanzi/service/SearchService.java b/src/main/java/co/orange/ddanzi/service/SearchService.java index 22c95cf..272085e 100644 --- a/src/main/java/co/orange/ddanzi/service/SearchService.java +++ b/src/main/java/co/orange/ddanzi/service/SearchService.java @@ -17,7 +17,10 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; @Slf4j @RequiredArgsConstructor @@ -34,8 +37,7 @@ public ApiResponse searchPage(String devicetoken) { User user = authUtils.getUser(); List topSearchedList = List.of("멀티비타민", "망고", "핸드크림"); log.info("Searching page for devicetoken: {}", devicetoken); - List recentViewedProductIds = redisRepository.getRecentProducts(devicetoken); - List productList = productRepository.findByIdIn(recentViewedProductIds); + List productList = getSortedRecentViewedProducts(devicetoken); List productInfoList = homeService.setProductList(user, productList, interestProductRepository); return ApiResponse.onSuccess(Success.GET_SEARCH_SCREEN_SUCCESS, SearchPageResponseDto.builder() .topSearchedList(topSearchedList) @@ -55,4 +57,14 @@ public ApiResponse searchKeyword(String keyword) { .searchedProductList(productInfoList) .build()); } + + public List getSortedRecentViewedProducts(String devicetoken) { + List recentViewedProductIds = redisRepository.getRecentProducts(devicetoken); + List productList = productRepository.findByIdIn(recentViewedProductIds); + Map productMap = productList.stream() + .collect(Collectors.toMap(Product::getId, Function.identity())); + return recentViewedProductIds.stream() + .map(productMap::get) + .collect(Collectors.toList()); + } }