From a9456abfb0910a00912b39c89de25871c94a20c4 Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 20 Jun 2026 04:49:36 +0900 Subject: [PATCH] =?UTF-8?q?refactor(creator):=20=EC=8B=9C=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20subtitle=20=EB=AA=A8=EB=8D=B8=EC=9D=84=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/CreatorChannelSeriesMappers.kt | 18 ++++++++--------- .../model/CreatorChannelSeriesUiModels.kt | 8 +++++++- .../series/CreatorChannelSeriesMapperTest.kt | 20 +++++++++++-------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt index b3e45f93..a696225f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt @@ -2,10 +2,6 @@ package kr.co.vividnext.sodalive.v2.creator.channel.series.model import kr.co.vividnext.sodalive.v2.creator.channel.series.data.CreatorChannelSeriesResponse -private const val BULLET_SEPARATOR = " • " -private const val STATUS_PROCEEDING = "연재" -private const val STATUS_COMPLETED = "완결" - fun List.toSeriesItemUiModels( isOwner: Boolean ): List = mapNotNull { it.toSeriesItemUiModel(isOwner) } @@ -16,7 +12,7 @@ private fun CreatorChannelSeriesResponse.toSeriesItemUiModel(isOwner: Boolean): return CreatorChannelSeriesItemUiModel( seriesId = seriesId, title = title, - subtitle = subtitle(), + subtitle = toSubtitleUiModel(), coverImageUrl = coverImageUrl, showOriginalTag = isOriginal, showAdultBadge = isAdult, @@ -24,11 +20,13 @@ private fun CreatorChannelSeriesResponse.toSeriesItemUiModel(isOwner: Boolean): ) } -private fun CreatorChannelSeriesResponse.subtitle(): String = listOfNotNull( - publishedDaysOfWeek?.takeIf { it.isNotBlank() }, - "총 ${contentCount}화", - if (isProceeding) STATUS_PROCEEDING else STATUS_COMPLETED -).joinToString(BULLET_SEPARATOR) +private fun CreatorChannelSeriesResponse.toSubtitleUiModel(): CreatorChannelSeriesSubtitleUiModel { + return CreatorChannelSeriesSubtitleUiModel( + publishedDaysOfWeek = publishedDaysOfWeek?.takeIf { it.isNotBlank() }, + contentCount = contentCount, + isProceeding = isProceeding + ) +} private fun CreatorChannelSeriesResponse.toProgressUiModel(isOwner: Boolean): CreatorChannelSeriesProgressUiModel? { if (isOwner) return null diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt index 8a83b3f9..cad58183 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt @@ -3,13 +3,19 @@ package kr.co.vividnext.sodalive.v2.creator.channel.series.model data class CreatorChannelSeriesItemUiModel( val seriesId: Long, val title: String, - val subtitle: String, + val subtitle: CreatorChannelSeriesSubtitleUiModel, val coverImageUrl: String?, val showOriginalTag: Boolean, val showAdultBadge: Boolean, val progress: CreatorChannelSeriesProgressUiModel? ) +data class CreatorChannelSeriesSubtitleUiModel( + val publishedDaysOfWeek: String?, + val contentCount: Int, + val isProceeding: Boolean +) + data class CreatorChannelSeriesProgressUiModel( val purchasedCount: Int, val paidCount: Int, diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt index f288e27e..f1998812 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt @@ -11,35 +11,39 @@ import org.junit.Test class CreatorChannelSeriesMapperTest { @Test - fun `isProceeding true이면 subtitle에 연재가 포함된다`() { + fun `isProceeding true이면 subtitle status가 proceeding이다`() { val item = listOf(series(isProceeding = true)).toSeriesItemUiModels(isOwner = false).single() - assertTrue(item.subtitle.contains("연재")) + assertEquals(true, item.subtitle.isProceeding) } @Test - fun `isProceeding false이면 subtitle에 완결이 포함된다`() { + fun `isProceeding false이면 subtitle status가 completed이다`() { val item = listOf(series(isProceeding = false)).toSeriesItemUiModels(isOwner = false).single() - assertTrue(item.subtitle.contains("완결")) + assertEquals(false, item.subtitle.isProceeding) } @Test - fun `publishedDaysOfWeek contentCount 진행 상태를 bullet 형식으로 조합한다`() { + fun `publishedDaysOfWeek contentCount 진행 상태를 subtitle 조각으로 유지한다`() { val item = listOf( series(publishedDaysOfWeek = "매주 월", contentCount = 45, isProceeding = true) ).toSeriesItemUiModels(isOwner = false).single() - assertEquals("매주 월 • 총 45화 • 연재", item.subtitle) + assertEquals("매주 월", item.subtitle.publishedDaysOfWeek) + assertEquals(45, item.subtitle.contentCount) + assertEquals(true, item.subtitle.isProceeding) } @Test - fun `publishedDaysOfWeek가 blank이면 빈 bullet 없이 조합한다`() { + fun `publishedDaysOfWeek가 blank이면 subtitle 조각에서 제외한다`() { val item = listOf( series(publishedDaysOfWeek = " ", contentCount = 45, isProceeding = true) ).toSeriesItemUiModels(isOwner = false).single() - assertEquals("총 45화 • 연재", item.subtitle) + assertNull(item.subtitle.publishedDaysOfWeek) + assertEquals(45, item.subtitle.contentCount) + assertEquals(true, item.subtitle.isProceeding) } @Test