diff --git a/src/main/java/org/example/siljeun/domain/concert/controller/ConcertController.java b/src/main/java/org/example/siljeun/domain/concert/controller/ConcertController.java index 209010c..7e239ca 100644 --- a/src/main/java/org/example/siljeun/domain/concert/controller/ConcertController.java +++ b/src/main/java/org/example/siljeun/domain/concert/controller/ConcertController.java @@ -64,8 +64,13 @@ public ResponseEntity getConcertDetail(@PathVariable Long return ResponseEntity.ok(response); } - @GetMapping("/popular") - public ResponseEntity> getPopularConcerts() { - return ResponseEntity.ok(concertService.getPopularConcerts()); + @GetMapping("/popular/daily") + public ResponseEntity> getDailyPopularConcerts() { + return ResponseEntity.ok(concertService.getDailyPopularConcerts()); + } + + @GetMapping("/popular/weekly") + public ResponseEntity> getWeeklyPopularConcerts() { + return ResponseEntity.ok(concertService.getWeeklyPopularConcerts()); } } diff --git a/src/main/java/org/example/siljeun/domain/concert/service/ConcertCacheService.java b/src/main/java/org/example/siljeun/domain/concert/service/ConcertCacheService.java index 7ca6880..b70598d 100644 --- a/src/main/java/org/example/siljeun/domain/concert/service/ConcertCacheService.java +++ b/src/main/java/org/example/siljeun/domain/concert/service/ConcertCacheService.java @@ -29,4 +29,10 @@ public List getTopConcertIds(int limit) { .toList(); } + public List getTopConcertIds(String key, int limit) { + Set ids = redisTemplate.opsForZSet() + .reverseRange(key, 0, limit - 1); + return ids.stream().map(id -> Long.valueOf(id.toString())).toList(); + } + } diff --git a/src/main/java/org/example/siljeun/domain/concert/service/ConcertService.java b/src/main/java/org/example/siljeun/domain/concert/service/ConcertService.java index 55d4d80..65e74d0 100644 --- a/src/main/java/org/example/siljeun/domain/concert/service/ConcertService.java +++ b/src/main/java/org/example/siljeun/domain/concert/service/ConcertService.java @@ -18,5 +18,7 @@ public interface ConcertService { ConcertDetailResponse getConcertDetail(Long concertId); - List getPopularConcerts(); + List getDailyPopularConcerts(); + + List getWeeklyPopularConcerts(); } diff --git a/src/main/java/org/example/siljeun/domain/concert/service/ConcertServiceImpl.java b/src/main/java/org/example/siljeun/domain/concert/service/ConcertServiceImpl.java index 82d8852..79e0216 100644 --- a/src/main/java/org/example/siljeun/domain/concert/service/ConcertServiceImpl.java +++ b/src/main/java/org/example/siljeun/domain/concert/service/ConcertServiceImpl.java @@ -120,21 +120,26 @@ public ConcertDetailResponse getConcertDetail(Long concertId) { } @Override - public List getPopularConcerts() { - List topIds = concertCacheService.getTopConcertIds(7); - List concerts = concertRepository.findByIdIn(topIds); + public List getDailyPopularConcerts() { + List ids = concertCacheService.getTopConcertIds("ranking:daily", 7); + return mapConcertsByIdOrder(ids); + } + @Override + public List getWeeklyPopularConcerts() { + List ids = concertCacheService.getTopConcertIds("ranking:weekly", 7); + return mapConcertsByIdOrder(ids); + } + + private List mapConcertsByIdOrder(List ids) { + List concerts = concertRepository.findByIdIn(ids); Map concertMap = concerts.stream() .collect(Collectors.toMap(Concert::getId, c -> c)); - - return topIds.stream() + return ids.stream() .map(concertMap::get) .filter(Objects::nonNull) .map(c -> new ConcertSimpleResponse( - c.getId(), - c.getTitle(), - c.getVenue().getName(), - c.getCategory().name() + c.getId(), c.getTitle(), c.getVenue().getName(), c.getCategory().name() )) .toList(); }