feat(recommendation): 인기 커뮤니티 본문 번역을 적용한다

This commit is contained in:
2026-09-10 15:14:44 +09:00
parent 0d44258a61
commit da59373184
4 changed files with 240 additions and 18 deletions
@@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.v2.recommendation.application
import kr.co.vividnext.sodalive.i18n.Lang
import kr.co.vividnext.sodalive.i18n.LangContext
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.community.translation.application.CreatorCommunityTranslationService
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendationSnapshotWindowPolicy
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedSectionType
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
@@ -31,7 +32,8 @@ class HomeRecommendationQueryService(
private val cheerCreatorSnapshotFallbackService: CheerCreatorSnapshotFallbackPort? = null,
private val popularCommunitySnapshotFallbackService: PopularCommunitySnapshotFallbackPort? = null,
private val clock: Clock = Clock.systemUTC(),
private val langContext: LangContext
private val langContext: LangContext,
private val creatorCommunityTranslationService: CreatorCommunityTranslationService
) {
private val snapshotWindowPolicy = RecommendationSnapshotWindowPolicy()
@@ -154,9 +156,20 @@ class HomeRecommendationQueryService(
.associateBy { it.communityId }
val selectedCreatorIds = mutableSetOf<Long>()
return snapshots.mapNotNull { snapshot ->
val recommendations = snapshots.mapNotNull { snapshot ->
detailsById[snapshot.targetId]?.takeIf { selectedCreatorIds.add(it.creatorId) }
}.take(limit)
if (recommendations.isEmpty()) return emptyList()
val displayContents = creatorCommunityTranslationService.findDisplayContents(
recommendations.map { it.communityId },
langContext.lang.code
)
return recommendations.map { recommendation ->
displayContents[recommendation.communityId]
?.let { displayContent -> recommendation.copy(content = displayContent.content) }
?: recommendation
}
}
private fun findPopularCommunitySnapshotsWithFallback(): List<RecommendationSnapshotRecord> {