parent
10dd50b332
commit
a8589ef4e7
|
@ -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()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue