feat(home): 인기 커뮤니티 fallback을 홈 조회에 연결한다

This commit is contained in:
2026-07-10 08:58:16 +09:00
parent 94b03a8c11
commit b4555a4460
2 changed files with 117 additions and 8 deletions

View File

@@ -27,6 +27,7 @@ class HomeRecommendationQueryService(
private val snapshotPort: RecommendationSnapshotPort,
private val aiCharacterSnapshotFallbackService: AiCharacterSnapshotFallbackPort? = null,
private val cheerCreatorSnapshotFallbackService: CheerCreatorSnapshotFallbackPort? = null,
private val popularCommunitySnapshotFallbackService: PopularCommunitySnapshotFallbackPort? = null,
private val clock: Clock = Clock.systemUTC()
) {
private val snapshotWindowPolicy = RecommendationSnapshotWindowPolicy()
@@ -129,8 +130,7 @@ class HomeRecommendationQueryService(
memberId: Long? = null,
includeAdultCommunities: Boolean = false
): List<HomePopularCommunityRecommendationRecord> {
val snapshots = snapshotPort.findLatestSnapshots(RecommendedSectionType.POPULAR_COMMUNITY)
.take(POPULAR_COMMUNITY_CANDIDATE_LIMIT)
val snapshots = findPopularCommunitySnapshotsWithFallback()
val detailsById = queryPort.findPopularCommunityRecommendationDetails(
snapshots.map { it.targetId },
memberId,
@@ -144,6 +144,21 @@ class HomeRecommendationQueryService(
}.take(limit)
}
private fun findPopularCommunitySnapshotsWithFallback(): List<RecommendationSnapshotRecord> {
val nowUtc = LocalDateTime.now(clock)
val snapshotAt = snapshotWindowPolicy.previousKstDayUtcWindow(nowUtc).snapshotAt
val snapshots = snapshotPort.findSnapshots(
RecommendedSectionType.POPULAR_COMMUNITY,
snapshotAt,
limit = POPULAR_COMMUNITY_CANDIDATE_LIMIT
)
if (snapshots.isNotEmpty()) return snapshots
if (snapshotPort.existsSnapshot(RecommendedSectionType.POPULAR_COMMUNITY, snapshotAt)) return emptyList()
return popularCommunitySnapshotFallbackService
?.refreshPopularCommunityIfMissing(offset = 0, limit = POPULAR_COMMUNITY_CANDIDATE_LIMIT, nowUtc = nowUtc)
.orEmpty()
}
fun findGenreCreatorRecommendations(
memberId: Long?,
includeAdultGenres: Boolean,