fix(content): 무료 콘텐츠 포인트 사용 조건을 보정한다

This commit is contained in:
2026-07-31 20:00:58 +09:00
parent eb0ff7537e
commit 033044b4de
27 changed files with 1396 additions and 41 deletions

View File

@@ -967,7 +967,7 @@ class AudioContentService(
previousContent = previousContent,
nextContent = nextContent,
buyerList = buyerList,
isAvailableUsePoint = audioContent.isPointAvailable,
isAvailableUsePoint = audioContent.isPointAvailable && audioContent.price > 0,
translated = translated
)
}

View File

@@ -60,7 +60,7 @@ data class MainContentAudioResponse(
imageUrl = audio.imageUrl,
price = audio.price,
isAdult = audio.isAdult,
isPointAvailable = audio.isPointAvailable,
isPointAvailable = audio.isPointAvailable && audio.price > 0,
isFirstContent = audio.isFirstContent,
isOriginalSeries = audio.isOriginalSeries,
creatorNickname = audio.creatorNickname

View File

@@ -46,7 +46,7 @@ data class ContentOverviewItemResponse(
title = audio.title,
coverImage = audio.imageUrl,
price = audio.price,
isPointAvailable = audio.isPointAvailable,
isPointAvailable = audio.isPointAvailable && audio.price > 0,
creatorNickname = audio.creatorNickname,
isAdult = audio.isAdult,
isFirstContent = audio.isFirstContent,
@@ -65,7 +65,7 @@ data class ContentOverviewItemResponse(
title = audio.title,
coverImage = coverImage,
price = audio.price,
isPointAvailable = audio.isPointAvailable,
isPointAvailable = audio.isPointAvailable && audio.price > 0,
creatorNickname = audio.creatorNickname,
isAdult = isAdult,
isFirstContent = true,

View File

@@ -69,7 +69,7 @@ data class AudioCardResponse(
imageUrl = audio.imageUrl,
price = audio.price,
isAdult = audio.isAdult,
isPointAvailable = audio.isPointAvailable,
isPointAvailable = audio.isPointAvailable && audio.price > 0,
isFirstContent = audio.isFirstContent,
isOriginalSeries = audio.isOriginalSeries,
creatorNickname = audio.creatorNickname

View File

@@ -32,7 +32,7 @@ data class CreatorChannelAudioContentResponse(
imageUrl = audioContent.imageUrl,
price = audioContent.price,
isAdult = audioContent.isAdult,
isPointAvailable = audioContent.isPointAvailable,
isPointAvailable = audioContent.isPointAvailable && audioContent.price > 0,
isFirstContent = audioContent.isFirstContent,
seriesName = audioContent.seriesName,
isOriginalSeries = audioContent.isOriginalSeries,

View File

@@ -267,7 +267,7 @@ class HomeRecommendationFacade(
title = title,
price = price,
coverImage = imageUrl(cloudFrontHost, coverImage),
isPointAvailable = isPointAvailable
isPointAvailable = isPointAvailable && price > 0
)
private fun HomeAiCharacterRecommendationRecord.toItem() = HomeAiCharacterItem(

View File

@@ -406,7 +406,7 @@ class DefaultMainContentAllQueryRepository(
}
private fun optionalAudioPointCondition(onlyPointAvailable: Boolean): BooleanExpression? {
return if (onlyPointAvailable) audioContent.isPointAvailable.isTrue else null
return if (onlyPointAvailable) audioContent.isPointAvailable.isTrue.and(audioContent.price.gt(0)) else null
}
private fun optionalOriginalCondition(onlyOriginal: Boolean): BooleanExpression? {

View File

@@ -135,7 +135,12 @@ class DefaultAudioRecommendationQueryRepository(
now: LocalDateTime
): List<AudioCard> {
val randomTieBreaker = Expressions.numberTemplate(Double::class.java, "function('rand')")
val rows = audioRows(memberId, canViewAdultContent, now, audioContent.isPointAvailable.isTrue) {
val rows = audioRows(
memberId,
canViewAdultContent,
now,
audioContent.isPointAvailable.isTrue.and(audioContent.price.gt(0))
) {
orderBy(randomTieBreaker.asc()).limit(limit.toLong())
}
return rows.toAudioCards(now, canViewAdultContent)