feat(creator): 채널 홈 오디오 주문 상태를 조회한다

This commit is contained in:
2026-06-17 16:07:59 +09:00
parent fe19be90f9
commit 81978442b2
2 changed files with 103 additions and 6 deletions

View File

@@ -8,6 +8,8 @@ import kr.co.vividnext.sodalive.chat.character.ChatCharacter
import kr.co.vividnext.sodalive.configs.QueryDslConfig
import kr.co.vividnext.sodalive.content.AudioContent
import kr.co.vividnext.sodalive.content.ContentType
import kr.co.vividnext.sodalive.content.order.Order
import kr.co.vividnext.sodalive.content.order.OrderType
import kr.co.vividnext.sodalive.content.theme.AudioContentTheme
import kr.co.vividnext.sodalive.creator.admin.content.series.Series
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesContent
@@ -526,6 +528,44 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor(
assertTrue(records.last().isPointAvailable)
}
@Test
@DisplayName("최신 오디오와 오디오 목록은 조회자의 유효한 소장/대여 주문 상태를 함께 반환한다")
fun shouldFindAudioContentOwnershipFlagsByViewerOrders() {
val now = LocalDateTime.of(2026, 6, 12, 12, 0)
val viewer = saveMember("audio-order-viewer", MemberRole.USER)
val creator = saveMember("audio-order-creator", MemberRole.CREATOR)
val keepAndRental = saveAudioContent(creator, now.minusDays(3), isAdult = false)
val rentalOnly = saveAudioContent(creator, now.minusDays(2), isAdult = false)
val keepOnly = saveAudioContent(creator, now.minusDays(1), isAdult = false)
saveOrder(viewer, creator, keepOnly, OrderType.KEEP)
saveOrder(viewer, creator, rentalOnly, OrderType.RENTAL, endDate = now.plusDays(1))
saveOrder(viewer, creator, keepAndRental, OrderType.KEEP)
saveOrder(viewer, creator, keepAndRental, OrderType.RENTAL, endDate = now.plusDays(1))
flushAndClear()
val latestRecord = repository.findLatestAudioContent(
creator.id!!,
now,
canViewAdultContent = false,
viewerId = viewer.id!!
)
val records = repository.findAudioContents(
creator.id!!,
now,
latestAudioContentId = latestRecord!!.audioContentId,
canViewAdultContent = false,
viewerId = viewer.id!!,
limit = 9
)
assertEquals(keepOnly.id, latestRecord.audioContentId)
assertTrue(latestRecord.isOwned)
assertFalse(latestRecord.isRented)
assertEquals(listOf(rentalOnly.id, keepAndRental.id), records.map { it.audioContentId })
assertEquals(listOf(false, true), records.map { it.isOwned })
assertEquals(listOf(true, true), records.map { it.isRented })
}
@Test
@DisplayName("오디오 목록은 releaseDate가 null인 콘텐츠를 제외한다")
fun shouldExcludeNullReleaseDateAudioContent() {
@@ -1441,6 +1481,23 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor(
return useCan
}
private fun saveOrder(
member: Member,
creator: Member,
content: AudioContent,
type: OrderType,
isActive: Boolean = true,
endDate: LocalDateTime? = null
): Order {
val order = Order(type = type, isActive = isActive)
order.member = member
order.creator = creator
order.audioContent = content
endDate?.let { order.endDate = it }
entityManager.persist(order)
return order
}
private fun saveCheers(
member: Member,
creator: Member,