콘텐츠 메인 시리즈 탭

- 완결 시리즈 전체보기 API
This commit is contained in:
Klaus 2025-02-14 04:31:05 +09:00
parent 10dd50b332
commit a8589ef4e7
4 changed files with 108 additions and 4 deletions

View File

@ -37,4 +37,21 @@ class AudioContentMainTabSeriesController(private val service: AudioContentMainT
)
)
}
@GetMapping("/completed-monthly-rank")
fun getRankMonthlyCompletedSeriesList(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
pageable: Pageable
) = run {
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
ApiResponse.ok(
service.getRankMonthlyCompletedSeriesList(
memberId = member.id!!,
isAdult = member.auth != null,
offset = pageable.offset,
limit = pageable.pageSize.toLong()
)
)
}
}

View File

@ -166,4 +166,38 @@ class AudioContentMainTabSeriesService(
return GetSeriesListResponse(totalCount, items)
}
fun getRankMonthlyCompletedSeriesList(
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 totalCount = rankingService.getCompleteSeriesRankingTotalCount(
memberId = memberId,
isAdult = isAdult,
startDate = monthlyRankingStartDate,
endDate = monthlyRankingEndDate
)
val items = rankingService.getCompleteSeriesRanking(
memberId = memberId,
isAdult = isAdult,
startDate = monthlyRankingStartDate,
endDate = monthlyRankingEndDate,
offset = offset,
limit = limit
)
return GetSeriesListResponse(totalCount, items)
}
}

View File

@ -209,6 +209,48 @@ class RankingRepository(
.fetch()
}
fun getCompleteSeriesRankingTotalCount(
memberId: Long,
isAdult: Boolean,
startDate: LocalDateTime,
endDate: LocalDateTime
): Int {
val blockMemberCondition = blockMember.member.id.eq(member.id)
.and(blockMember.isActive.isTrue)
.and(blockMember.blockedMember.id.eq(memberId))
var where = series.isActive.isTrue
.and(series.state.eq(SeriesState.COMPLETE))
.and(audioContent.isActive.isTrue)
.and(member.isActive.isTrue)
.and(member.isNotNull)
.and(member.role.eq(MemberRole.CREATOR))
.and(audioContent.duration.isNotNull)
.and(audioContent.limited.isNull)
.and(blockMember.id.isNull)
.and(order.isActive.isTrue)
.and(order.createdAt.goe(startDate))
.and(order.createdAt.lt(endDate))
if (!isAdult) {
where = where.and(series.isAdult.isFalse)
}
return queryFactory
.select(series.id)
.from(seriesContent)
.innerJoin(seriesContent.series, series)
.innerJoin(seriesContent.content, audioContent)
.innerJoin(series.member, member)
.leftJoin(order).on(audioContent.id.eq(order.audioContent.id))
.leftJoin(blockMember).on(blockMemberCondition)
.where(where)
.groupBy(series.id)
.orderBy(order.can.sum().desc())
.fetch()
.size
}
fun getCompleteSeriesRanking(
memberId: Long,
isAdult: Boolean,
@ -248,10 +290,7 @@ class RankingRepository(
.leftJoin(blockMember).on(blockMemberCondition)
.where(where)
.groupBy(series.id)
.orderBy(
order.can.sum().desc(),
Expressions.numberTemplate(Double::class.java, "function('rand')").asc()
)
.orderBy(order.can.sum().desc())
.offset(offset)
.limit(limit)
.fetch()

View File

@ -82,6 +82,20 @@ class RankingService(
return seriesToSeriesListItem(seriesList = seriesList, isAdult = isAdult)
}
fun getCompleteSeriesRankingTotalCount(
memberId: Long,
isAdult: Boolean,
startDate: LocalDateTime,
endDate: LocalDateTime
): Int {
return repository.getCompleteSeriesRankingTotalCount(
memberId = memberId,
isAdult = isAdult,
startDate = startDate,
endDate = endDate
)
}
fun getCompleteSeriesRanking(
memberId: Long,
isAdult: Boolean,