feat(recommend): 홈 장르 추천 크리에이터 중복 보충을 개선한다
This commit is contained in:
@@ -116,14 +116,38 @@ class HomeRecommendationQueryService(
|
||||
creatorLimit: Int = DEFAULT_GENRE_CREATOR_CREATOR_LIMIT
|
||||
): List<HomeGenreCreatorRecommendationGroup> {
|
||||
val selectedCreatorIds = mutableSetOf<Long>()
|
||||
val candidateLimit = genreLimit * creatorLimit
|
||||
val partialFallbackGroups = mutableListOf<HomeGenreCreatorRecommendationGroup>()
|
||||
val selectedGroups = mutableListOf<HomeGenreCreatorRecommendationGroup>()
|
||||
|
||||
return queryPort.findGenreCreatorRecommendations(memberId, includeAdultGenres, genreLimit, candidateLimit)
|
||||
.map { group ->
|
||||
group.copy(creators = group.creators.filter { selectedCreatorIds.add(it.creatorId) }.take(creatorLimit))
|
||||
queryPort.findGenreCreatorRecommendations(memberId, includeAdultGenres, genreLimit, creatorLimit)
|
||||
.forEach { group ->
|
||||
if (selectedGroups.size >= genreLimit) return@forEach
|
||||
|
||||
val creators = group.creators.filter { it.creatorId !in selectedCreatorIds }.take(creatorLimit)
|
||||
if (creators.isEmpty()) return@forEach
|
||||
|
||||
val deduplicatedGroup = group.copy(creators = creators)
|
||||
if (group.isViewedTheme || creators.size == creatorLimit) {
|
||||
selectedGroups.add(deduplicatedGroup)
|
||||
selectedCreatorIds.addAll(creators.map { it.creatorId })
|
||||
} else {
|
||||
partialFallbackGroups.add(group)
|
||||
}
|
||||
}
|
||||
.filter { it.creators.isNotEmpty() }
|
||||
.take(genreLimit)
|
||||
|
||||
if (selectedGroups.size < genreLimit) {
|
||||
partialFallbackGroups.forEach { group ->
|
||||
if (selectedGroups.size >= genreLimit) return@forEach
|
||||
|
||||
val creators = group.creators.filter { it.creatorId !in selectedCreatorIds }.take(creatorLimit)
|
||||
if (creators.isEmpty()) return@forEach
|
||||
|
||||
selectedGroups.add(group.copy(creators = creators))
|
||||
selectedCreatorIds.addAll(creators.map { it.creatorId })
|
||||
}
|
||||
}
|
||||
|
||||
return selectedGroups.take(genreLimit)
|
||||
}
|
||||
|
||||
fun resolveAudioContentActivityType(theme: String): RecommendedActivityType {
|
||||
|
||||
Reference in New Issue
Block a user