feat(content-ranking): 스냅샷 갱신에 공개 시각을 반영한다

This commit is contained in:
2026-06-24 23:46:40 +09:00
parent f2ea82f4a4
commit 30b687737e
2 changed files with 26 additions and 0 deletions
@@ -1,6 +1,7 @@
package kr.co.vividnext.sodalive.v2.ranking.application
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingSnapshotCandidate
import kr.co.vividnext.sodalive.v2.ranking.domain.CreatorRankingType
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingAggregationPort
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingAggregationResult
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingSnapshotPort
@@ -49,6 +50,8 @@ class CreatorRankingSnapshotRefreshServiceTest {
assertEquals(LocalDateTime.of(2026, 6, 7, 15, 0, 0), aggregationPort.endExclusiveUtc)
assertEquals(aggregationPort.startInclusiveUtc, snapshotPort.aggregationStartAtUtc)
assertEquals(aggregationPort.endExclusiveUtc, snapshotPort.aggregationEndAtUtc)
assertEquals(CreatorRankingType.WEEKLY, snapshotPort.rankingType)
assertEquals(LocalDateTime.of(2026, 6, 8, 0, 0), snapshotPort.visibleFromAtUtc)
assertEquals(85.0, stored.contentLiveScore, 0.0001)
assertEquals(7.0, stored.engagementScore, 0.0001)
assertEquals(19.8, stored.supportScore, 0.0001)
@@ -240,8 +243,10 @@ private class FakeCreatorRankingAggregationPort : CreatorRankingAggregationPort
private class FakeCreatorRankingSnapshotPort : CreatorRankingSnapshotPort {
val snapshots = mutableListOf<CreatorRankingSnapshotRecord>()
var rankingType: CreatorRankingType? = null
var aggregationStartAtUtc: LocalDateTime? = null
var aggregationEndAtUtc: LocalDateTime? = null
var visibleFromAtUtc: LocalDateTime? = null
override fun findSnapshotsByAggregationPeriod(
aggregationStartAtUtc: LocalDateTime,
@@ -256,15 +261,30 @@ private class FakeCreatorRankingSnapshotPort : CreatorRankingSnapshotPort {
override fun findPreviousCompletedSnapshots(): List<CreatorRankingSnapshotRecord> = snapshots
override fun findLatestVisibleSnapshots(
rankingType: CreatorRankingType,
nowUtc: LocalDateTime
): List<CreatorRankingSnapshotRecord> = snapshots
override fun findPreviousVisibleSnapshots(
rankingType: CreatorRankingType,
currentAggregationStartAtUtc: LocalDateTime,
nowUtc: LocalDateTime
): List<CreatorRankingSnapshotRecord> = snapshots
override fun isSnapshotTableEmpty(): Boolean = snapshots.isEmpty()
override fun replaceSnapshots(
rankingType: CreatorRankingType,
aggregationStartAtUtc: LocalDateTime,
aggregationEndAtUtc: LocalDateTime,
visibleFromAtUtc: LocalDateTime,
newSnapshots: List<CreatorRankingSnapshotRecord>
) {
this.rankingType = rankingType
this.aggregationStartAtUtc = aggregationStartAtUtc
this.aggregationEndAtUtc = aggregationEndAtUtc
this.visibleFromAtUtc = visibleFromAtUtc
snapshots.removeIf {
it.aggregationStartAtUtc == aggregationStartAtUtc && it.aggregationEndAtUtc == aggregationEndAtUtc
}