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 + ) + } }