feat(home): 인기 커뮤니티 fallback을 홈 조회에 연결한다
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user