refactor(creator-channel): 오디오 콘텐츠 응답을 공통화한다

This commit is contained in:
2026-06-19 15:18:48 +09:00
parent 9a1bfed6a4
commit f743d090c3
20 changed files with 74 additions and 170 deletions

View File

@@ -9,8 +9,8 @@ import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.v2.api.creator.channel.home.application.CreatorChannelHomeFacade
import kr.co.vividnext.sodalive.v2.api.creator.channel.home.dto.CreatorChannelHomeResponse
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation
@@ -198,7 +198,6 @@ class CreatorChannelHomeControllerTest @Autowired constructor(
isAdult = true,
isPointAvailable = true,
isFirstContent = true,
publishedAt = LocalDateTime.of(2026, 6, 11, 1, 0),
seriesName = "series",
isOriginalSeries = true,
isOwned = true,
@@ -233,7 +232,6 @@ class CreatorChannelHomeControllerTest @Autowired constructor(
isAdult = false,
isPointAvailable = false,
isFirstContent = false,
publishedAt = LocalDateTime.of(2026, 6, 10, 1, 0),
seriesName = null,
isOriginalSeries = null,
isOwned = false,

View File

@@ -3,9 +3,9 @@ package kr.co.vividnext.sodalive.v2.api.creator.channel.home.application
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.application.CreatorChannelHomeQueryService
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation
@@ -128,7 +128,6 @@ class CreatorChannelHomeFacadeTest {
isAdult = true,
isPointAvailable = true,
isFirstContent = true,
publishedAt = LocalDateTime.of(2026, 6, 11, 1, 0),
seriesName = "series",
isOriginalSeries = true,
isOwned = true,
@@ -163,7 +162,6 @@ class CreatorChannelHomeFacadeTest {
isAdult = false,
isPointAvailable = false,
isFirstContent = false,
publishedAt = LocalDateTime.of(2026, 6, 10, 1, 0),
seriesName = null,
isOriginalSeries = null,
isOwned = false,

View File

@@ -6,8 +6,8 @@ import kr.co.vividnext.sodalive.i18n.SodaMessageSource
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberAdapter
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.v2.api.creator.channel.common.dto.CreatorChannelAudioContentResponse
import kr.co.vividnext.sodalive.v2.api.creator.channel.live.application.CreatorChannelLiveFacade
import kr.co.vividnext.sodalive.v2.api.creator.channel.live.dto.CreatorChannelAudioContentResponse
import kr.co.vividnext.sodalive.v2.api.creator.channel.live.dto.CreatorChannelLiveResponse
import kr.co.vividnext.sodalive.v2.api.creator.channel.live.dto.CreatorChannelLiveTabResponse
import kr.co.vividnext.sodalive.v2.common.domain.ContentSort

View File

@@ -3,8 +3,8 @@ package kr.co.vividnext.sodalive.v2.api.creator.channel.live.application
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.v2.common.domain.ContentSort
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.live.application.CreatorChannelLiveQueryService
import kr.co.vividnext.sodalive.v2.creator.channel.live.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.live.domain.CreatorChannelLive
import kr.co.vividnext.sodalive.v2.creator.channel.live.domain.CreatorChannelLiveTab
import kr.co.vividnext.sodalive.v2.creator.channel.live.domain.CreatorChannelPage
@@ -86,7 +86,6 @@ class CreatorChannelLiveFacadeTest {
isAdult = false,
isPointAvailable = true,
isFirstContent = true,
publishedAt = LocalDateTime.of(2026, 6, 16, 1, 0),
seriesName = "series",
isOriginalSeries = true,
isOwned = true,

View File

@@ -15,8 +15,8 @@ import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreference
import kr.co.vividnext.sodalive.member.contentpreference.ViewerContentPreference
import kr.co.vividnext.sodalive.v2.api.creator.channel.home.dto.CreatorChannelHomeResponse
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation
@@ -307,7 +307,6 @@ class CreatorChannelHomeQueryServiceTest {
isAdult = true,
isPointAvailable = true,
isFirstContent = true,
publishedAt = LocalDateTime.of(2026, 6, 11, 1, 0),
seriesName = "series",
isOriginalSeries = true,
isOwned = true,
@@ -342,7 +341,6 @@ class CreatorChannelHomeQueryServiceTest {
isAdult = false,
isPointAvailable = false,
isFirstContent = false,
publishedAt = LocalDateTime.of(2026, 6, 10, 1, 0),
seriesName = null,
isOriginalSeries = null,
isOwned = false,
@@ -646,7 +644,6 @@ private class FakeCreatorChannelHomeQueryPort : CreatorChannelHomeQueryPort {
isAdult = false,
isPointAvailable = true,
isFirstContent = false,
publishedAt = LocalDateTime.of(2026, 6, 10, 0, audioContentId.toInt() % 60),
seriesName = null,
isOriginalSeries = null,
isOwned = audioContentId == 201L || audioContentId == 202L,

View File

@@ -1,9 +1,8 @@
package kr.co.vividnext.sodalive.v2.creator.channel.home.domain
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import java.time.LocalDateTime
@@ -80,23 +79,6 @@ class CreatorChannelHomeQueryPolicyTest {
assertEquals(listOf(1L, 3L), filtered.map { it.audioContentId })
}
@Test
@DisplayName("오디오 콘텐츠의 첫 공개 콘텐츠 여부는 공개 시각 오름차순, 동일 시각이면 id 오름차순으로 판정한다")
fun shouldMarkFirstAudioContentByPublishedAtAndId() {
val publishedAt = LocalDateTime.of(2026, 6, 12, 10, 0)
val audioContents = listOf(
audioContent(3L, publishedAt = publishedAt.plusDays(1)),
audioContent(2L, publishedAt = publishedAt),
audioContent(1L, publishedAt = publishedAt)
)
val marked = policy.markFirstAudioContent(audioContents)
assertTrue(marked.first { it.audioContentId == 1L }.isFirstContent)
assertFalse(marked.first { it.audioContentId == 2L }.isFirstContent)
assertFalse(marked.first { it.audioContentId == 3L }.isFirstContent)
}
private fun schedule(
targetId: Long,
scheduledAt: LocalDateTime,
@@ -112,10 +94,7 @@ class CreatorChannelHomeQueryPolicyTest {
)
}
private fun audioContent(
audioContentId: Long,
publishedAt: LocalDateTime = LocalDateTime.of(2026, 6, 12, 10, 0)
): CreatorChannelAudioContent {
private fun audioContent(audioContentId: Long): CreatorChannelAudioContent {
return CreatorChannelAudioContent(
audioContentId = audioContentId,
title = "audio-$audioContentId",
@@ -125,7 +104,6 @@ class CreatorChannelHomeQueryPolicyTest {
isAdult = false,
isPointAvailable = false,
isFirstContent = false,
publishedAt = publishedAt,
seriesName = null,
isOriginalSeries = null,
isOwned = false,

View File

@@ -388,7 +388,6 @@ private fun audioContentRecord(audioContentId: Long): CreatorChannelAudioContent
isAdult = false,
isPointAvailable = true,
isFirstContent = audioContentId == 1L,
publishedAt = LocalDateTime.of(2026, 6, 16, 10, 0),
seriesName = "series",
isOriginalSeries = true,
isOwned = audioContentId == 1L,