diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepository.kt index ce6278b8..ff177312 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepository.kt @@ -22,7 +22,6 @@ import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom import kr.co.vividnext.sodalive.live.room.visit.QLiveRoomVisit.liveRoomVisit import kr.co.vividnext.sodalive.member.Gender import kr.co.vividnext.sodalive.member.MemberKind -import kr.co.vividnext.sodalive.member.MemberRole import kr.co.vividnext.sodalive.member.QMember.member import kr.co.vividnext.sodalive.member.block.QBlockMember import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing @@ -50,11 +49,10 @@ class DefaultCreatorChannelHomeQueryRepository( ) : CreatorChannelHomeQueryRepository { override fun findCreator(creatorId: Long, viewerId: Long?): CreatorChannelCreatorRecord? { val creator = queryFactory - .select(member.id, member.nickname, member.profileImage, member.introduce, member.memberKind) + .select(member.id, member.role, member.nickname, member.profileImage, member.introduce, member.memberKind) .from(member) .where( member.id.eq(creatorId), - member.role.eq(MemberRole.CREATOR), member.isActive.isTrue ) .fetchFirst() ?: return null @@ -82,6 +80,7 @@ class DefaultCreatorChannelHomeQueryRepository( return CreatorChannelCreatorRecord( creatorId = creator.get(member.id)!!, + role = creator.get(member.role)!!, characterId = characterId, nickname = creator.get(member.nickname)!!, profileImagePath = creator.get(member.profileImage), diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/port/out/CreatorChannelHomeQueryPort.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/port/out/CreatorChannelHomeQueryPort.kt index 39c8d8d1..00ba456d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/port/out/CreatorChannelHomeQueryPort.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/port/out/CreatorChannelHomeQueryPort.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.v2.creator.channel.port.out import kr.co.vividnext.sodalive.content.ContentType import kr.co.vividnext.sodalive.member.Gender +import kr.co.vividnext.sodalive.member.MemberRole import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType import java.time.LocalDateTime @@ -76,6 +77,7 @@ interface CreatorChannelHomeQueryPort { data class CreatorChannelCreatorRecord( val creatorId: Long, + val role: MemberRole, val characterId: Long?, val nickname: String, val profileImagePath: String?, diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepositoryTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepositoryTest.kt index aa166a16..c0c55b5a 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepositoryTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/out/persistence/DefaultCreatorChannelHomeQueryRepositoryTest.kt @@ -111,6 +111,19 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor( assertEquals(5, record!!.followerCount) } + @Test + @DisplayName("기본 회원 조회는 비크리에이터도 role과 함께 반환해 service가 기존 채널 정책 순서로 검증할 수 있게 한다") + fun shouldFindNonCreatorMemberWithRoleForServiceValidationOrder() { + val user = saveMember("non-creator-target", MemberRole.USER) + flushAndClear() + + val record = repository.findCreator(user.id!!, viewerId = null) + + assertNotNull(record) + assertEquals(MemberRole.USER, record!!.role) + assertEquals(user.id, record.creatorId) + } + @Test @DisplayName("홈 repository 조회는 Phase 3 projection/bulk 최적화 대상에서 entity 전체 fetch와 per-row helper를 사용하지 않는다") fun shouldUseProjectionAndBulkQueriesForPhaseThreeOptimizedMethods() {