diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepository.kt index f4bd9e22..1ce83ea9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepository.kt @@ -148,8 +148,7 @@ class DefaultHomeRecommendationQueryRepository( lr.id as target_sort_id from live_room lr join member m on m.id = lr.member_id - where lr.is_active = true - and lr.channel_name is not null + where lr.channel_name is not null and lr.channel_name <> '' and (:includeAdultActivities = true or lr.is_adult = false) and m.is_active = true diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepositoryTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepositoryTest.kt index 67e887f1..73587785 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepositoryTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/recommendation/adapter/out/persistence/DefaultHomeRecommendationQueryRepositoryTest.kt @@ -437,6 +437,31 @@ class DefaultHomeRecommendationQueryRepositoryTest @Autowired constructor( assertEquals(communityCreator.id, byCreatorNickname[communityCreator.nickname]!!.targetId) } + @Test + @DisplayName("최근 활동 크리에이터는 라이브 활성 여부와 무관하게 채널명이 있는 라이브를 포함한다") + fun shouldIncludeInactiveLiveWithChannelNameInRecentlyActiveCreators() { + val baseAt = LocalDateTime.of(2026, 5, 31, 10, 0) + val inactiveLiveCreator = saveMember("activity-inactive-live", MemberRole.CREATOR) + val blankChannelCreator = saveMember("activity-blank-channel", MemberRole.CREATOR) + val emptyChannelCreator = saveMember("activity-empty-channel", MemberRole.CREATOR) + saveLiveRoom( + inactiveLiveCreator, + baseAt.plusMinutes(2), + channelName = "inactive-live-channel", + isActive = false + ) + saveLiveRoom(blankChannelCreator, baseAt.plusMinutes(1), channelName = null, isActive = false) + saveLiveRoom(emptyChannelCreator, baseAt, channelName = "", isActive = false) + flushAndClear() + + val creators = repository.findRecentlyActiveCreators(limit = 10) + + assertEquals(listOf(inactiveLiveCreator.nickname), creators.map { it.creatorNickname }) + assertEquals(CreatorActivityType.LIVE, creators.single().activityType) + assertEquals(baseAt.plusMinutes(2), creators.single().activityAt) + assertEquals(null, creators.single().targetId) + } + @Test @DisplayName("최근 활동 크리에이터는 성인 노출 정책이 꺼져 있으면 성인 라이브/오디오/커뮤니티 활동을 제외한다") fun shouldExcludeAdultActivitiesFromRecentlyActiveCreatorsWhenAdultHidden() {