feat(creator): 채널 홈 조회 계약을 보정한다

This commit is contained in:
2026-06-13 18:51:52 +09:00
parent 8b2957c249
commit 951bd1b2d1
3 changed files with 17 additions and 3 deletions

View File

@@ -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.live.room.visit.QLiveRoomVisit.liveRoomVisit
import kr.co.vividnext.sodalive.member.Gender import kr.co.vividnext.sodalive.member.Gender
import kr.co.vividnext.sodalive.member.MemberKind 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.QMember.member
import kr.co.vividnext.sodalive.member.block.QBlockMember import kr.co.vividnext.sodalive.member.block.QBlockMember
import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing
@@ -50,11 +49,10 @@ class DefaultCreatorChannelHomeQueryRepository(
) : CreatorChannelHomeQueryRepository { ) : CreatorChannelHomeQueryRepository {
override fun findCreator(creatorId: Long, viewerId: Long?): CreatorChannelCreatorRecord? { override fun findCreator(creatorId: Long, viewerId: Long?): CreatorChannelCreatorRecord? {
val creator = queryFactory 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) .from(member)
.where( .where(
member.id.eq(creatorId), member.id.eq(creatorId),
member.role.eq(MemberRole.CREATOR),
member.isActive.isTrue member.isActive.isTrue
) )
.fetchFirst() ?: return null .fetchFirst() ?: return null
@@ -82,6 +80,7 @@ class DefaultCreatorChannelHomeQueryRepository(
return CreatorChannelCreatorRecord( return CreatorChannelCreatorRecord(
creatorId = creator.get(member.id)!!, creatorId = creator.get(member.id)!!,
role = creator.get(member.role)!!,
characterId = characterId, characterId = characterId,
nickname = creator.get(member.nickname)!!, nickname = creator.get(member.nickname)!!,
profileImagePath = creator.get(member.profileImage), profileImagePath = creator.get(member.profileImage),

View File

@@ -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.content.ContentType
import kr.co.vividnext.sodalive.member.Gender import kr.co.vividnext.sodalive.member.Gender
import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import java.time.LocalDateTime import java.time.LocalDateTime
@@ -76,6 +77,7 @@ interface CreatorChannelHomeQueryPort {
data class CreatorChannelCreatorRecord( data class CreatorChannelCreatorRecord(
val creatorId: Long, val creatorId: Long,
val role: MemberRole,
val characterId: Long?, val characterId: Long?,
val nickname: String, val nickname: String,
val profileImagePath: String?, val profileImagePath: String?,

View File

@@ -111,6 +111,19 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor(
assertEquals(5, record!!.followerCount) 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 @Test
@DisplayName("홈 repository 조회는 Phase 3 projection/bulk 최적화 대상에서 entity 전체 fetch와 per-row helper를 사용하지 않는다") @DisplayName("홈 repository 조회는 Phase 3 projection/bulk 최적화 대상에서 entity 전체 fetch와 per-row helper를 사용하지 않는다")
fun shouldUseProjectionAndBulkQueriesForPhaseThreeOptimizedMethods() { fun shouldUseProjectionAndBulkQueriesForPhaseThreeOptimizedMethods() {