refactor(recommendation): 홈 추천 활동 타입 참조를 교체한다
This commit is contained in:
@@ -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
|
||||||
import kr.co.vividnext.sodalive.member.QMember.member
|
import kr.co.vividnext.sodalive.member.QMember.member
|
||||||
import kr.co.vividnext.sodalive.member.block.QBlockMember
|
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.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.domain.RecommendedSectionType
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
||||||
@@ -197,7 +197,7 @@ class DefaultHomeRecommendationQueryRepository(
|
|||||||
RecentlyActiveCreatorRecord(
|
RecentlyActiveCreatorRecord(
|
||||||
creatorNickname = row[0] as String,
|
creatorNickname = row[0] as String,
|
||||||
creatorProfileImage = row[1] 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]),
|
activityAt = toLocalDateTime(row[3]),
|
||||||
targetId = (row[4] as Number?)?.toLong()
|
targetId = (row[4] as Number?)?.toLong()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package kr.co.vividnext.sodalive.v2.recommendation.application
|
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.domain.RecommendedSectionType
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
||||||
@@ -150,11 +150,11 @@ class HomeRecommendationQueryService(
|
|||||||
return selectedGroups.take(genreLimit)
|
return selectedGroups.take(genreLimit)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resolveAudioContentActivityType(theme: String): RecommendedActivityType {
|
fun resolveAudioContentActivityType(theme: String): CreatorActivityType {
|
||||||
return if (theme == LIVE_REPLAY_THEME) {
|
return if (theme == LIVE_REPLAY_THEME) {
|
||||||
RecommendedActivityType.LIVE_REPLAY
|
CreatorActivityType.LIVE_REPLAY
|
||||||
} else {
|
} else {
|
||||||
RecommendedActivityType.AUDIO
|
CreatorActivityType.AUDIO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package kr.co.vividnext.sodalive.v2.recommendation.port.out
|
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
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
interface HomeRecommendationQueryPort {
|
interface HomeRecommendationQueryPort {
|
||||||
@@ -97,7 +97,7 @@ data class HomeBannerRecommendationRecord(
|
|||||||
data class RecentlyActiveCreatorRecord(
|
data class RecentlyActiveCreatorRecord(
|
||||||
val creatorNickname: String,
|
val creatorNickname: String,
|
||||||
val creatorProfileImage: String?,
|
val creatorProfileImage: String?,
|
||||||
val activityType: RecommendedActivityType,
|
val activityType: CreatorActivityType,
|
||||||
val activityAt: LocalDateTime,
|
val activityAt: LocalDateTime,
|
||||||
val targetId: Long?
|
val targetId: Long?
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ import kr.co.vividnext.sodalive.member.MemberKind
|
|||||||
import kr.co.vividnext.sodalive.member.MemberRole
|
import kr.co.vividnext.sodalive.member.MemberRole
|
||||||
import kr.co.vividnext.sodalive.member.block.BlockMember
|
import kr.co.vividnext.sodalive.member.block.BlockMember
|
||||||
import kr.co.vividnext.sodalive.member.following.CreatorFollowing
|
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.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.domain.RecommendedSectionType
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeCheerCreatorRecommendationRecord
|
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),
|
listOf(liveCreator.nickname, audioCreator.nickname, replayCreator.nickname, communityCreator.nickname),
|
||||||
creators.map { it.creatorNickname }
|
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(null, byCreatorNickname[liveCreator.nickname]!!.targetId)
|
||||||
assertEquals(baseAt, byCreatorNickname[liveCreator.nickname]!!.activityAt)
|
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(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(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)
|
assertEquals(communityCreator.id, byCreatorNickname[communityCreator.nickname]!!.targetId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,10 +405,10 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor(
|
|||||||
assertEquals(null, visibleCreators[1].targetId)
|
assertEquals(null, visibleCreators[1].targetId)
|
||||||
assertEquals(adultAudio.id, visibleCreators[2].targetId)
|
assertEquals(adultAudio.id, visibleCreators[2].targetId)
|
||||||
assertEquals(adultCommunityCreator.id, visibleCreators[3].targetId)
|
assertEquals(adultCommunityCreator.id, visibleCreators[3].targetId)
|
||||||
assertEquals(RecommendedActivityType.LIVE, visibleCreators[0].activityType)
|
assertEquals(CreatorActivityType.LIVE, visibleCreators[0].activityType)
|
||||||
assertEquals(RecommendedActivityType.LIVE, visibleCreators[1].activityType)
|
assertEquals(CreatorActivityType.LIVE, visibleCreators[1].activityType)
|
||||||
assertEquals(RecommendedActivityType.AUDIO, visibleCreators[2].activityType)
|
assertEquals(CreatorActivityType.AUDIO, visibleCreators[2].activityType)
|
||||||
assertEquals(RecommendedActivityType.COMMUNITY, visibleCreators[3].activityType)
|
assertEquals(CreatorActivityType.COMMUNITY, visibleCreators[3].activityType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -430,7 +430,7 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor(
|
|||||||
val creators = repository.findRecentlyActiveCreators(limit = 10, memberId = viewer.id)
|
val creators = repository.findRecentlyActiveCreators(limit = 10, memberId = viewer.id)
|
||||||
|
|
||||||
assertEquals(listOf(visibleCreator.nickname), creators.map { it.creatorNickname })
|
assertEquals(listOf(visibleCreator.nickname), creators.map { it.creatorNickname })
|
||||||
assertEquals(RecommendedActivityType.COMMUNITY, creators.single().activityType)
|
assertEquals(CreatorActivityType.COMMUNITY, creators.single().activityType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package kr.co.vividnext.sodalive.v2.recommendation.application
|
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.domain.RecommendedSectionType
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeAiCharacterRecommendationRecord
|
||||||
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
import kr.co.vividnext.sodalive.v2.recommendation.port.out.HomeBannerRecommendationRecord
|
||||||
@@ -30,7 +30,7 @@ class HomeRecommendationQueryServiceTest {
|
|||||||
fun shouldClassifyLiveReplayThemeContentAsLiveReplay() {
|
fun shouldClassifyLiveReplayThemeContentAsLiveReplay() {
|
||||||
val activityType = service.resolveAudioContentActivityType(theme = "다시듣기")
|
val activityType = service.resolveAudioContentActivityType(theme = "다시듣기")
|
||||||
|
|
||||||
assertEquals(RecommendedActivityType.LIVE_REPLAY, activityType)
|
assertEquals(CreatorActivityType.LIVE_REPLAY, activityType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -38,16 +38,7 @@ class HomeRecommendationQueryServiceTest {
|
|||||||
fun shouldClassifyNonLiveReplayThemeContentAsAudio() {
|
fun shouldClassifyNonLiveReplayThemeContentAsAudio() {
|
||||||
val activityType = service.resolveAudioContentActivityType(theme = "수면")
|
val activityType = service.resolveAudioContentActivityType(theme = "수면")
|
||||||
|
|
||||||
assertEquals(RecommendedActivityType.AUDIO, activityType)
|
assertEquals(CreatorActivityType.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
|
@Test
|
||||||
@@ -653,7 +644,7 @@ class HomeRecommendationQueryServiceTest {
|
|||||||
RecentlyActiveCreatorRecord(
|
RecentlyActiveCreatorRecord(
|
||||||
creatorNickname = "creator",
|
creatorNickname = "creator",
|
||||||
creatorProfileImage = "profile.png",
|
creatorProfileImage = "profile.png",
|
||||||
activityType = RecommendedActivityType.LIVE,
|
activityType = CreatorActivityType.LIVE,
|
||||||
activityAt = LocalDateTime.of(2026, 5, 31, 10, 0),
|
activityAt = LocalDateTime.of(2026, 5, 31, 10, 0),
|
||||||
targetId = null
|
targetId = null
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user