feat(content-ranking): 랭킹 공개 최근 소식을 발행한다

This commit is contained in:
2026-06-26 02:50:51 +09:00
parent e89b5e1dad
commit 59439df33e
2 changed files with 148 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
package kr.co.vividnext.sodalive.v2.ranking.application
import kr.co.vividnext.sodalive.v2.home.following.application.HomeFollowingNewsPublishService
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingPeriodPolicy
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingScorePolicy
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingSnapshotCandidate
@@ -19,7 +20,8 @@ import java.time.ZonedDateTime
@Service
class CreatorRankingSnapshotRefreshService(
private val aggregationPort: CreatorRankingAggregationPort,
private val snapshotPort: CreatorRankingSnapshotPort
private val snapshotPort: CreatorRankingSnapshotPort,
private val homeFollowingNewsPublishService: HomeFollowingNewsPublishService
) {
private val log = LoggerFactory.getLogger(javaClass)
private val periodPolicy = CreatorRankingPeriodPolicy()
@@ -47,6 +49,28 @@ class CreatorRankingSnapshotRefreshService(
visibleFromAtUtc = visibleFromAtUtc,
newSnapshots = snapshots
)
afterCommit {
snapshots.forEachIndexed { index, snapshot ->
runCatching {
homeFollowingNewsPublishService.publishCreatorRankingVisible(
creatorId = snapshot.creatorId,
creatorNickname = snapshot.nickname,
creatorProfileImagePath = snapshot.profileImageUrl,
aggregationStartAtUtc = utcRange.startInclusiveUtc,
visibleFromAtUtc = visibleFromAtUtc,
rank = index + 1
)
}.onFailure { ex ->
log.warn(
"event=home_following_creator_ranking_news_publish_failure creatorId={} rank={} error={}",
snapshot.creatorId,
index + 1,
ex.message,
ex
)
}
}
}
aggregationResult.toLogCounts(storedCount = snapshots.size)
}.onSuccess { counts ->
afterCommit {
@@ -92,12 +116,18 @@ class CreatorRankingSnapshotRefreshService(
private fun afterCommit(action: () -> Unit) {
if (!TransactionSynchronizationManager.isSynchronizationActive()) {
action()
runCatching(action).onFailure { ex ->
log.warn("event=creator_ranking_after_commit_failure error={}", ex.message, ex)
}
return
}
TransactionSynchronizationManager.registerSynchronization(
object : TransactionSynchronization {
override fun afterCommit() = action()
override fun afterCommit() {
runCatching(action).onFailure { ex ->
log.warn("event=creator_ranking_after_commit_failure error={}", ex.message, ex)
}
}
}
)
}