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)
|
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()
|
.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(
|
fun getCompleteSeriesRanking(
|
||||||
memberId: Long,
|
memberId: Long,
|
||||||
isAdult: Boolean,
|
isAdult: Boolean,
|
||||||
|
@ -248,10 +290,7 @@ class RankingRepository(
|
||||||
.leftJoin(blockMember).on(blockMemberCondition)
|
.leftJoin(blockMember).on(blockMemberCondition)
|
||||||
.where(where)
|
.where(where)
|
||||||
.groupBy(series.id)
|
.groupBy(series.id)
|
||||||
.orderBy(
|
.orderBy(order.can.sum().desc())
|
||||||
order.can.sum().desc(),
|
|
||||||
Expressions.numberTemplate(Double::class.java, "function('rand')").asc()
|
|
||||||
)
|
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.fetch()
|
.fetch()
|
||||||
|
|
|
@ -82,6 +82,20 @@ class RankingService(
|
||||||
return seriesToSeriesListItem(seriesList = seriesList, isAdult = isAdult)
|
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(
|
fun getCompleteSeriesRanking(
|
||||||
memberId: Long,
|
memberId: Long,
|
||||||
isAdult: Boolean,
|
isAdult: Boolean,
|
||||||
|
|
Loading…
Reference in New Issue