diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryService.kt new file mode 100644 index 00000000..20cdd47d --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryService.kt @@ -0,0 +1,17 @@ +package kr.co.vividnext.sodalive.v2.recommend.application + +import kr.co.vividnext.sodalive.v2.recommend.domain.RecommendedActivityType + +class HomeRecommendationQueryService { + fun resolveAudioContentActivityType(theme: String): RecommendedActivityType { + return if (theme == LIVE_REPLAY_THEME) { + RecommendedActivityType.LIVE_REPLAY + } else { + RecommendedActivityType.AUDIO + } + } + + companion object { + private const val LIVE_REPLAY_THEME = "다시듣기" + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedActivityType.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedActivityType.kt new file mode 100644 index 00000000..e20a31ce --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedActivityType.kt @@ -0,0 +1,8 @@ +package kr.co.vividnext.sodalive.v2.recommend.domain + +enum class RecommendedActivityType(val code: String) { + LIVE("LIVE"), + AUDIO("AUDIO"), + COMMUNITY("COMMUNITY"), + LIVE_REPLAY("LIVE_REPLAY") +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedSectionType.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedSectionType.kt new file mode 100644 index 00000000..8e529185 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommend/domain/RecommendedSectionType.kt @@ -0,0 +1,13 @@ +package kr.co.vividnext.sodalive.v2.recommend.domain + +enum class RecommendedSectionType(val code: String) { + LIVE("LIVE"), + BANNER("BANNER"), + ACTIVE_CREATOR("ACTIVE_CREATOR"), + DEBUT_CREATOR("DEBUT_CREATOR"), + FIRST_AUDIO_CONTENT("FIRST_AUDIO_CONTENT"), + AI_CHARACTER("AI_CHARACTER"), + GENRE_CREATOR("GENRE_CREATOR"), + CHEER_CREATOR("CHEER_CREATOR"), + POPULAR_COMMUNITY("POPULAR_COMMUNITY") +} diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryServiceTest.kt new file mode 100644 index 00000000..a8ebd10b --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommend/application/HomeRecommendationQueryServiceTest.kt @@ -0,0 +1,50 @@ +package kr.co.vividnext.sodalive.v2.recommend.application + +import kr.co.vividnext.sodalive.v2.recommend.domain.RecommendedActivityType +import kr.co.vividnext.sodalive.v2.recommend.domain.RecommendedSectionType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +class HomeRecommendationQueryServiceTest { + private val service = HomeRecommendationQueryService() + + @Test + @DisplayName("다시듣기 테마 콘텐츠는 AUDIO가 아니라 LIVE_REPLAY 활동으로 분류한다") + fun shouldClassifyLiveReplayThemeContentAsLiveReplay() { + val activityType = service.resolveAudioContentActivityType(theme = "다시듣기") + + assertEquals(RecommendedActivityType.LIVE_REPLAY, activityType) + } + + @Test + @DisplayName("다시듣기가 아닌 테마 콘텐츠는 AUDIO 활동으로 분류한다") + fun shouldClassifyNonLiveReplayThemeContentAsAudio() { + val activityType = service.resolveAudioContentActivityType(theme = "수면") + + assertEquals(RecommendedActivityType.AUDIO, activityType) + } + + @Test + @DisplayName("활동 타입 enum code는 앱 다국어 처리를 위해 영문 값과 동일하게 유지한다") + fun shouldKeepRecommendedActivityTypeCodeAsEnglishName() { + assertEquals("LIVE", RecommendedActivityType.LIVE.code) + assertEquals("AUDIO", RecommendedActivityType.AUDIO.code) + assertEquals("COMMUNITY", RecommendedActivityType.COMMUNITY.code) + assertEquals("LIVE_REPLAY", RecommendedActivityType.LIVE_REPLAY.code) + } + + @Test + @DisplayName("섹션 타입 enum code는 앱 다국어 처리를 위해 영문 값과 동일하게 유지한다") + fun shouldKeepRecommendedSectionTypeCodeAsEnglishName() { + assertEquals("LIVE", RecommendedSectionType.LIVE.code) + assertEquals("BANNER", RecommendedSectionType.BANNER.code) + assertEquals("ACTIVE_CREATOR", RecommendedSectionType.ACTIVE_CREATOR.code) + assertEquals("DEBUT_CREATOR", RecommendedSectionType.DEBUT_CREATOR.code) + assertEquals("FIRST_AUDIO_CONTENT", RecommendedSectionType.FIRST_AUDIO_CONTENT.code) + assertEquals("AI_CHARACTER", RecommendedSectionType.AI_CHARACTER.code) + assertEquals("GENRE_CREATOR", RecommendedSectionType.GENRE_CREATOR.code) + assertEquals("CHEER_CREATOR", RecommendedSectionType.CHEER_CREATOR.code) + assertEquals("POPULAR_COMMUNITY", RecommendedSectionType.POPULAR_COMMUNITY.code) + } +}