refactor(recommendation): 홈 추천 활동 타입 참조를 교체한다

This commit is contained in:
2026-06-12 16:37:11 +09:00
parent 9305dc600d
commit b85c61bd0b
6 changed files with 22 additions and 39 deletions

View File

@@ -24,8 +24,8 @@ import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom
import kr.co.vividnext.sodalive.member.QMember
import kr.co.vividnext.sodalive.member.QMember.member
import kr.co.vividnext.sodalive.member.block.QBlockMember
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendationScoreSpec
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedSectionType
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
@@ -197,7 +197,7 @@ class DefaultHomeRecommendationQueryRepository(
RecentlyActiveCreatorRecord(
creatorNickname = row[0] as String,
creatorProfileImage = row[1] as String?,
activityType = RecommendedActivityType.valueOf(row[2] as String),
activityType = CreatorActivityType.valueOf(row[2] as String),
activityAt = toLocalDateTime(row[3]),
targetId = (row[4] as Number?)?.toLong()
)

View File

@@ -1,6 +1,6 @@
package kr.co.vividnext.sodalive.v2.recommendation.application
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedActivityType
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedSectionType
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
@@ -150,11 +150,11 @@ class HomeRecommendationQueryService(
return selectedGroups.take(genreLimit)
}
fun resolveAudioContentActivityType(theme: String): RecommendedActivityType {
fun resolveAudioContentActivityType(theme: String): CreatorActivityType {
return if (theme == LIVE_REPLAY_THEME) {
RecommendedActivityType.LIVE_REPLAY
CreatorActivityType.LIVE_REPLAY
} else {
RecommendedActivityType.AUDIO
CreatorActivityType.AUDIO
}
}

View File

@@ -1,8 +0,0 @@
package kr.co.vividnext.sodalive.v2.recommendation.domain
enum class RecommendedActivityType(val code: String) {
LIVE("LIVE"),
AUDIO("AUDIO"),
COMMUNITY("COMMUNITY"),
LIVE_REPLAY("LIVE_REPLAY")
}

View File

@@ -1,6 +1,6 @@
package kr.co.vividnext.sodalive.v2.recommendation.port.out
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedActivityType
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import java.time.LocalDateTime
interface HomeRecommendationQueryPort {
@@ -97,7 +97,7 @@ data class HomeBannerRecommendationRecord(
data class RecentlyActiveCreatorRecord(
val creatorNickname: String,
val creatorProfileImage: String?,
val activityType: RecommendedActivityType,
val activityType: CreatorActivityType,
val activityAt: LocalDateTime,
val targetId: Long?
)

View File

@@ -35,8 +35,8 @@ import kr.co.vividnext.sodalive.member.MemberKind
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.member.block.BlockMember
import kr.co.vividnext.sodalive.member.following.CreatorFollowing
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendationScorePolicy
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedSectionType
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeCheerCreatorRecommendationRecord
@@ -362,14 +362,14 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor(
listOf(liveCreator.nickname, audioCreator.nickname, replayCreator.nickname, communityCreator.nickname),
creators.map { it.creatorNickname }
)
assertEquals(RecommendedActivityType.LIVE, byCreatorNickname[liveCreator.nickname]!!.activityType)
assertEquals(CreatorActivityType.LIVE, byCreatorNickname[liveCreator.nickname]!!.activityType)
assertEquals(null, byCreatorNickname[liveCreator.nickname]!!.targetId)
assertEquals(baseAt, byCreatorNickname[liveCreator.nickname]!!.activityAt)
assertEquals(RecommendedActivityType.AUDIO, byCreatorNickname[audioCreator.nickname]!!.activityType)
assertEquals(CreatorActivityType.AUDIO, byCreatorNickname[audioCreator.nickname]!!.activityType)
assertEquals(audio.id, byCreatorNickname[audioCreator.nickname]!!.targetId)
assertEquals(RecommendedActivityType.LIVE_REPLAY, byCreatorNickname[replayCreator.nickname]!!.activityType)
assertEquals(CreatorActivityType.LIVE_REPLAY, byCreatorNickname[replayCreator.nickname]!!.activityType)
assertEquals(replay.id, byCreatorNickname[replayCreator.nickname]!!.targetId)
assertEquals(RecommendedActivityType.COMMUNITY, byCreatorNickname[communityCreator.nickname]!!.activityType)
assertEquals(CreatorActivityType.COMMUNITY, byCreatorNickname[communityCreator.nickname]!!.activityType)
assertEquals(communityCreator.id, byCreatorNickname[communityCreator.nickname]!!.targetId)
}
@@ -405,10 +405,10 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor(
assertEquals(null, visibleCreators[1].targetId)
assertEquals(adultAudio.id, visibleCreators[2].targetId)
assertEquals(adultCommunityCreator.id, visibleCreators[3].targetId)
assertEquals(RecommendedActivityType.LIVE, visibleCreators[0].activityType)
assertEquals(RecommendedActivityType.LIVE, visibleCreators[1].activityType)
assertEquals(RecommendedActivityType.AUDIO, visibleCreators[2].activityType)
assertEquals(RecommendedActivityType.COMMUNITY, visibleCreators[3].activityType)
assertEquals(CreatorActivityType.LIVE, visibleCreators[0].activityType)
assertEquals(CreatorActivityType.LIVE, visibleCreators[1].activityType)
assertEquals(CreatorActivityType.AUDIO, visibleCreators[2].activityType)
assertEquals(CreatorActivityType.COMMUNITY, visibleCreators[3].activityType)
}
@Test
@@ -430,7 +430,7 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor(
val creators = repository.findRecentlyActiveCreators(limit = 10, memberId = viewer.id)
assertEquals(listOf(visibleCreator.nickname), creators.map { it.creatorNickname })
assertEquals(RecommendedActivityType.COMMUNITY, creators.single().activityType)
assertEquals(CreatorActivityType.COMMUNITY, creators.single().activityType)
}
@Test

View File

@@ -1,6 +1,6 @@
package kr.co.vividnext.sodalive.v2.recommendation.application
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedActivityType
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.recommendation.domain.RecommendedSectionType
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
@@ -30,7 +30,7 @@ class HomeRecommendationQueryServiceTest {
fun shouldClassifyLiveReplayThemeContentAsLiveReplay() {
val activityType = service.resolveAudioContentActivityType(theme = "다시듣기")
assertEquals(RecommendedActivityType.LIVE_REPLAY, activityType)
assertEquals(CreatorActivityType.LIVE_REPLAY, activityType)
}
@Test
@@ -38,16 +38,7 @@ class HomeRecommendationQueryServiceTest {
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)
assertEquals(CreatorActivityType.AUDIO, activityType)
}
@Test
@@ -653,7 +644,7 @@ class HomeRecommendationQueryServiceTest {
RecentlyActiveCreatorRecord(
creatorNickname = "creator",
creatorProfileImage = "profile.png",
activityType = RecommendedActivityType.LIVE,
activityType = CreatorActivityType.LIVE,
activityAt = LocalDateTime.of(2026, 5, 31, 10, 0),
targetId = null
)