fix(channel-donation): 후원 메시지 회원 로딩을 보장한다
This commit is contained in:
@@ -52,6 +52,7 @@ class ChannelDonationMessageQueryRepositoryImpl(
|
|||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.selectFrom(channelDonationMessage)
|
.selectFrom(channelDonationMessage)
|
||||||
|
.leftJoin(channelDonationMessage.member).fetchJoin()
|
||||||
.where(where)
|
.where(where)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import java.time.format.DateTimeFormatter
|
|||||||
import java.time.temporal.TemporalAdjusters
|
import java.time.temporal.TemporalAdjusters
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@Transactional(readOnly = true)
|
||||||
class ChannelDonationService(
|
class ChannelDonationService(
|
||||||
private val canPaymentService: CanPaymentService,
|
private val canPaymentService: CanPaymentService,
|
||||||
private val memberRepository: MemberRepository,
|
private val memberRepository: MemberRepository,
|
||||||
|
|||||||
@@ -133,6 +133,37 @@ class ChannelDonationMessageRepositoryTest @Autowired constructor(
|
|||||||
assertEquals(3, totalCount)
|
assertEquals(3, totalCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("목록 조회 시 후원자 회원 정보를 함께 로딩한다")
|
||||||
|
fun shouldFetchMemberWithDonationMessages() {
|
||||||
|
// given: 크리에이터/후원자와 조회 대상 메시지를 준비한다.
|
||||||
|
val creator = saveMember(nickname = "creator3", role = MemberRole.CREATOR)
|
||||||
|
val viewer = saveMember(nickname = "viewer3", role = MemberRole.USER)
|
||||||
|
val message = saveMessage(member = viewer, creator = creator, can = 1, isSecret = false)
|
||||||
|
val monthStart = LocalDateTime.now().withDayOfMonth(1).toLocalDate().atStartOfDay()
|
||||||
|
val nextMonthStart = monthStart.plusMonths(1)
|
||||||
|
updateCreatedAt(message.id!!, monthStart.plusDays(1))
|
||||||
|
entityManager.flush()
|
||||||
|
entityManager.clear()
|
||||||
|
|
||||||
|
// when: 목록을 조회한 뒤 영속성 컨텍스트를 비운다.
|
||||||
|
val list = channelDonationMessageRepository.getChannelDonationMessageList(
|
||||||
|
creatorId = creator.id!!,
|
||||||
|
memberId = viewer.id!!,
|
||||||
|
isCreator = false,
|
||||||
|
offset = 0,
|
||||||
|
limit = 10,
|
||||||
|
startDateTime = monthStart,
|
||||||
|
endDateTime = nextMonthStart
|
||||||
|
)
|
||||||
|
entityManager.clear()
|
||||||
|
|
||||||
|
// then: 조회 결과의 후원자 정보는 세션 없이도 접근 가능해야 한다.
|
||||||
|
assertEquals(1, list.size)
|
||||||
|
assertEquals(viewer.id, list[0].member!!.id)
|
||||||
|
assertEquals("viewer3", list[0].member!!.nickname)
|
||||||
|
}
|
||||||
|
|
||||||
private fun saveMember(nickname: String, role: MemberRole): Member {
|
private fun saveMember(nickname: String, role: MemberRole): Member {
|
||||||
return memberRepository.saveAndFlush(
|
return memberRepository.saveAndFlush(
|
||||||
Member(
|
Member(
|
||||||
|
|||||||
Reference in New Issue
Block a user