From 9146e2e231efb510b84509993ed6ca7e8cf999c4 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sun, 15 Oct 2023 03:23:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=9E=AD?= =?UTF-8?q?=ED=82=B9=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentController.kt | 9 +++++ .../sodalive/content/AudioContentService.kt | 33 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt index 5a9deda..c83d903 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -148,4 +148,13 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok(service.audioContentLike(request, member)) } + + @GetMapping("/ranking") + fun getAudioContentRanking( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.getAudioContentRanking(member = member)) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index fbeb3ee..cf05527 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -13,6 +13,7 @@ import kr.co.vividnext.sodalive.content.like.AudioContentLike import kr.co.vividnext.sodalive.content.like.AudioContentLikeRepository import kr.co.vividnext.sodalive.content.like.PutAudioContentLikeRequest import kr.co.vividnext.sodalive.content.like.PutAudioContentLikeResponse +import kr.co.vividnext.sodalive.content.main.GetAudioContentRanking import kr.co.vividnext.sodalive.content.order.OrderRepository import kr.co.vividnext.sodalive.content.order.OrderType import kr.co.vividnext.sodalive.content.theme.AudioContentThemeQueryRepository @@ -29,9 +30,11 @@ import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import org.springframework.web.multipart.MultipartFile import java.text.SimpleDateFormat +import java.time.DayOfWeek import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter +import java.time.temporal.TemporalAdjusters import java.util.Locale @Service @@ -573,4 +576,34 @@ class AudioContentService( ) } } + + fun getAudioContentRanking(member: Member): GetAudioContentRanking { + val currentDateTime = LocalDateTime.now() + val startDate = currentDateTime + .withHour(15) + .withMinute(0) + .withSecond(0) + .minusWeeks(1) + .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)) + val endDate = startDate + .plusDays(7) + + val startDateFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일") + val endDateFormatter = DateTimeFormatter.ofPattern("MM월 dd일") + + val contentRankingItemList = repository + .getAudioContentRanking( + cloudfrontHost = coverImageHost, + startDate = startDate, + endDate = endDate, + isAdult = member.auth != null, + limit = 50 + ) + + return GetAudioContentRanking( + startDate = startDate.format(startDateFormatter), + endDate = endDate.minusDays(1).format(endDateFormatter), + items = contentRankingItemList + ) + } }