From 23df3da784575fbb4fb541cb0e622b1bc9d84d8a Mon Sep 17 00:00:00 2001 From: Klaus Date: Sun, 12 Jul 2026 22:42:44 +0900 Subject: [PATCH] =?UTF-8?q?fix(content):=20=EC=98=A4=EB=94=94=EC=98=A4=20?= =?UTF-8?q?=EC=8A=A4=EB=83=85=EC=83=B7=20empty=20marker=EB=A5=BC=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ecommendationSnapshotPersistenceAdapter.kt | 8 ++- ...mendationSnapshotPersistenceAdapterTest.kt | 53 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapter.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapter.kt index f4a030e1..5d1e236e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapter.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapter.kt @@ -86,7 +86,13 @@ class RecommendationSnapshotPersistenceAdapter( private fun supportsEmptySnapshotMarker(sectionType: RecommendedSectionType): Boolean { return sectionType == RecommendedSectionType.AI_CHARACTER || sectionType == RecommendedSectionType.CHEER_CREATOR || - sectionType == RecommendedSectionType.POPULAR_COMMUNITY + sectionType == RecommendedSectionType.POPULAR_COMMUNITY || + sectionType == RecommendedSectionType.NEW_AND_HOT_AUDIO_SAFE || + sectionType == RecommendedSectionType.NEW_AND_HOT_AUDIO_ALL || + sectionType == RecommendedSectionType.MOST_COMMENTED_AUDIO_SAFE || + sectionType == RecommendedSectionType.MOST_COMMENTED_AUDIO_ALL || + sectionType == RecommendedSectionType.RECOMMENDED_AUDIO_SAFE || + sectionType == RecommendedSectionType.RECOMMENDED_AUDIO_ALL } companion object { diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapterTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapterTest.kt index 5704f384..041f5ec2 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapterTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/RecommendationSnapshotPersistenceAdapterTest.kt @@ -236,6 +236,59 @@ class RecommendationSnapshotPersistenceAdapterTest @Autowired constructor( ) } + @Test + fun shouldSaveAudioEmptySnapshotMarkerWhenReplacingWithEmptySnapshots() { + val snapshotAt = LocalDateTime.of(2026, 5, 29, 23, 59, 59) + + adapter.replaceSnapshots(RecommendedSectionType.NEW_AND_HOT_AUDIO_SAFE, snapshotAt, emptyList()) + adapter.replaceSnapshots(RecommendedSectionType.MOST_COMMENTED_AUDIO_SAFE, snapshotAt, emptyList()) + adapter.replaceSnapshots(RecommendedSectionType.RECOMMENDED_AUDIO_SAFE, snapshotAt, emptyList()) + + assertEquals( + emptyList(), + adapter.findSnapshots(RecommendedSectionType.NEW_AND_HOT_AUDIO_SAFE, snapshotAt) + ) + assertEquals( + emptyList(), + adapter.findSnapshots(RecommendedSectionType.MOST_COMMENTED_AUDIO_SAFE, snapshotAt) + ) + assertEquals( + emptyList(), + adapter.findSnapshots(RecommendedSectionType.RECOMMENDED_AUDIO_SAFE, snapshotAt) + ) + assertEquals(true, adapter.existsSnapshot(RecommendedSectionType.NEW_AND_HOT_AUDIO_SAFE, snapshotAt)) + assertEquals(true, adapter.existsSnapshot(RecommendedSectionType.MOST_COMMENTED_AUDIO_SAFE, snapshotAt)) + assertEquals(true, adapter.existsSnapshot(RecommendedSectionType.RECOMMENDED_AUDIO_SAFE, snapshotAt)) + } + + @Test + fun shouldReplaceAudioEmptyMarkerWithRealSnapshotsAndExcludeMarkerFromLatestSnapshots() { + val snapshotAt = LocalDateTime.of(2026, 5, 29, 23, 59, 59) + adapter.replaceSnapshots(RecommendedSectionType.RECOMMENDED_AUDIO_ALL, snapshotAt, emptyList()) + + adapter.replaceSnapshots( + RecommendedSectionType.RECOMMENDED_AUDIO_ALL, + snapshotAt, + listOf( + RecommendationSnapshotRecord( + sectionType = RecommendedSectionType.RECOMMENDED_AUDIO_ALL, + targetId = 99L, + score = 99.0, + snapshotAt = snapshotAt, + randomTieBreaker = 0.9 + ) + ) + ) + + assertEquals(listOf(99L), adapter.findLatestSnapshots(RecommendedSectionType.RECOMMENDED_AUDIO_ALL).map { it.targetId }) + assertEquals( + listOf(99L), + repository.findAll() + .filter { it.sectionType == RecommendedSectionType.RECOMMENDED_AUDIO_ALL } + .map { it.targetId } + ) + } + @Test fun shouldReplaceCheerCreatorEmptyMarkerWithRealSnapshots() { val snapshotAt = LocalDateTime.of(2026, 5, 29, 23, 59, 59)