From 0264744f8f619d795cb5416d4bbc08158e785b92 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Thu, 22 May 2025 19:16:24 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=88=98=20=EC=A6=9D?= =?UTF-8?q?=EA=B0=80=20=EB=B0=A9=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/concert/service/ConcertCacheService.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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..93ebf76 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 @@ -1,5 +1,6 @@ package org.example.siljeun.domain.concert.service; +import java.time.Duration; import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; @@ -16,8 +17,16 @@ public class ConcertCacheService { private static final String RANK_KEY = "concert:ranking"; - public void increaseViewCount(Long concertId) { - redisTemplate.opsForZSet().incrementScore(RANK_KEY, concertId, 1); + public void increaseDailyViewCount(Long concertId) { + String key = "ranking:daily"; + redisTemplate.opsForZSet().incrementScore(key, concertId, 1); + redisTemplate.expire(key, Duration.ofDays(1)); + } + + public void increaseWeeklyViewCount(Long concertId) { + String key = "ranking:weekly"; + redisTemplate.opsForZSet().incrementScore(key, concertId, 1); + redisTemplate.expire(key, Duration.ofDays(7)); } public List getTopConcertIds(int limit) { From 9c13feac2bb3f40afecb7f3aa37fca9aaab34c43 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Thu, 22 May 2025 19:21:32 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=EB=9E=AD=ED=82=B9=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../siljeun/domain/concert/service/ConcertCacheService.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 93ebf76..be2531c 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 @@ -38,4 +38,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(); + } + } From 5e3af10ccb1a8b3aef6c0bcf4ee246f4ed116b76 Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Thu, 22 May 2025 19:54:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?ConcertServiceImpl=EC=97=90=20=EB=9E=AD?= =?UTF-8?q?=ED=82=B9=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concert/service/ConcertCacheService.java | 13 ++--------- .../concert/service/ConcertService.java | 4 +++- .../concert/service/ConcertServiceImpl.java | 23 +++++++++++-------- 3 files changed, 19 insertions(+), 21 deletions(-) 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 be2531c..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 @@ -1,6 +1,5 @@ package org.example.siljeun.domain.concert.service; -import java.time.Duration; import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; @@ -17,16 +16,8 @@ public class ConcertCacheService { private static final String RANK_KEY = "concert:ranking"; - public void increaseDailyViewCount(Long concertId) { - String key = "ranking:daily"; - redisTemplate.opsForZSet().incrementScore(key, concertId, 1); - redisTemplate.expire(key, Duration.ofDays(1)); - } - - public void increaseWeeklyViewCount(Long concertId) { - String key = "ranking:weekly"; - redisTemplate.opsForZSet().incrementScore(key, concertId, 1); - redisTemplate.expire(key, Duration.ofDays(7)); + public void increaseViewCount(Long concertId) { + redisTemplate.opsForZSet().incrementScore(RANK_KEY, concertId, 1); } public List getTopConcertIds(int limit) { 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(); } From c07e4c405ab442d4cf9b83dd2811f252264cd27a Mon Sep 17 00:00:00 2001 From: hemsej018 Date: Thu, 22 May 2025 19:56:27 +0900 Subject: [PATCH 4/4] =?UTF-8?q?ConcertController=EC=97=90=20API=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/concert/controller/ConcertController.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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()); } }