fix(content): 최근 댓글 오디오 후보를 크리에이터별로 제한한다
This commit is contained in:
@@ -288,7 +288,8 @@ class DefaultAudioRecommendationQueryRepository(
|
||||
else 0.0
|
||||
end * 20.0
|
||||
""".trimIndent(),
|
||||
requireComments = true
|
||||
requireComments = true,
|
||||
dedupeByCreator = true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -325,12 +326,13 @@ class DefaultAudioRecommendationQueryRepository(
|
||||
limit: Int,
|
||||
sectionType: RecommendedSectionType,
|
||||
scoreExpression: String,
|
||||
requireComments: Boolean = false
|
||||
requireComments: Boolean = false,
|
||||
dedupeByCreator: Boolean = false
|
||||
): List<RecommendationSnapshotRecord> {
|
||||
val commentJoin = if (requireComments) "join" else "left join"
|
||||
val commentRequirement = if (requireComments) "and cm.comment_count is not null" else ""
|
||||
val sql = """
|
||||
select c.id, ($scoreExpression) score, rand() random_tie_breaker
|
||||
val scoredSql = """
|
||||
select c.id, c.member_id creator_id, ($scoreExpression) score, rand() random_tie_breaker
|
||||
from content c
|
||||
join member creator on creator.id = c.member_id
|
||||
join content_theme theme on theme.id = c.theme_id
|
||||
@@ -372,9 +374,29 @@ class DefaultAudioRecommendationQueryRepository(
|
||||
and theme.is_active = true
|
||||
and (:includeAdult = true or c.is_adult = false)
|
||||
$commentRequirement
|
||||
order by score desc, random_tie_breaker asc
|
||||
limit :limit
|
||||
""".trimIndent()
|
||||
val sql = if (dedupeByCreator) {
|
||||
"""
|
||||
select id, score, random_tie_breaker
|
||||
from (
|
||||
select scored.*, row_number() over (
|
||||
partition by creator_id
|
||||
order by score desc, random_tie_breaker asc
|
||||
) creator_rank
|
||||
from ($scoredSql) scored
|
||||
) ranked
|
||||
where creator_rank = 1
|
||||
order by score desc, random_tie_breaker asc
|
||||
limit :limit
|
||||
""".trimIndent()
|
||||
} else {
|
||||
"""
|
||||
select id, score, random_tie_breaker
|
||||
from ($scoredSql) scored
|
||||
order by score desc, random_tie_breaker asc
|
||||
limit :limit
|
||||
""".trimIndent()
|
||||
}
|
||||
return entityManager.createNativeQuery(sql)
|
||||
.setParameter("windowStart", windowStart)
|
||||
.setParameter("snapshotAt", snapshotAt)
|
||||
|
||||
Reference in New Issue
Block a user