diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt index e9577a0..df62807 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt @@ -39,15 +39,15 @@ class AudioContentMainTabSeriesController(private val service: AudioContentMainT ) } - @GetMapping("/completed-monthly-rank") - fun getRankMonthlyCompletedSeriesList( + @GetMapping("/completed-rank") + fun getRank10DaysCompletedSeriesList( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") ApiResponse.ok( - service.getRankMonthlyCompletedSeriesList( + service.getRank10DaysCompletedSeriesList( memberId = member.id!!, isAdult = member.auth != null, offset = pageable.offset, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt index 44d256f..58ade63 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt @@ -10,7 +10,9 @@ import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.rank.RankingService import org.springframework.stereotype.Service import java.time.DayOfWeek +import java.time.LocalDate import java.time.LocalDateTime +import java.time.YearMonth import java.time.temporal.TemporalAdjusters @Service @@ -168,20 +170,13 @@ class AudioContentMainTabSeriesService( return GetSeriesListResponse(totalCount, items) } - fun getRankMonthlyCompletedSeriesList( + fun getRank10DaysCompletedSeriesList( memberId: Long, isAdult: Boolean, offset: Long, limit: Long ): GetSeriesListResponse { - val monthlyRankingStartDate = LocalDateTime.now() - .withDayOfMonth(1) - .withHour(15) - .withMinute(0) - .withSecond(0) - .minusDays(1) - val monthlyRankingEndDate = monthlyRankingStartDate - .plusMonths(1) + val (startDate, endDate) = calculateStartAndEndDate() val totalCount = rankingService.getCompleteSeriesRankingTotalCount( memberId = memberId, @@ -191,8 +186,8 @@ class AudioContentMainTabSeriesService( val items = rankingService.getCompleteSeriesRanking( memberId = memberId, isAdult = isAdult, - startDate = monthlyRankingStartDate, - endDate = monthlyRankingEndDate, + startDate = startDate, + endDate = endDate, offset = offset, limit = limit ) @@ -218,4 +213,30 @@ class AudioContentMainTabSeriesService( isAdult = isAdult ) } + + private fun calculateStartAndEndDate(today: LocalDate = LocalDate.now()): Pair { + val yearMonth = YearMonth.from(today) + val lastDayOfMonth = yearMonth.lengthOfMonth() + + return when (today.dayOfMonth) { + in 11..20 -> Pair( + today.withDayOfMonth(1).minusDays(1).atTime(15, 0), + today.withDayOfMonth(10).atTime(15, 0) + ) + + in 21..lastDayOfMonth -> Pair( + today.withDayOfMonth(10).atTime(15, 0), + today.withDayOfMonth(20).atTime(15, 0) + ) + + else -> { + val previousMonth = yearMonth.minusMonths(1) + val lastDayOfPreviousMonth = previousMonth.lengthOfMonth() + Pair( + LocalDate.of(previousMonth.year, previousMonth.month, 20).atTime(15, 0), + LocalDate.of(previousMonth.year, previousMonth.month, lastDayOfPreviousMonth).atTime(15, 0) + ) + } + } + } }