feat(home): 포인트 사용 가능 콘텐츠 리스트 추가

This commit is contained in:
2025-11-10 13:58:17 +09:00
parent eab7dc4521
commit e24e8372a8
4 changed files with 30 additions and 4 deletions

View File

@@ -26,5 +26,6 @@ data class GetHomeResponse(
val contentRanking: List<GetAudioContentRankingItem>,
val recommendChannelList: List<RecommendChannelResponse>,
val freeContentList: List<AudioContentMainItem>,
val pointAvailableContentList: List<AudioContentMainItem>,
val curationList: List<GetContentCurationResponse>
)

View File

@@ -175,6 +175,22 @@ class HomeService(
}
}
// 포인트 사용가능 콘텐츠 리스트 - 랜덤으로 가져오기 (DB에서 isPointAvailable 조건 적용)
val pointAvailableContentList = contentService.getLatestContentByTheme(
theme = emptyList(),
contentType = contentType,
isFree = false,
isAdult = isAdult,
orderByRandom = true,
isPointAvailableOnly = true
).filter {
if (memberId != null) {
!memberService.isBlocked(blockedMemberId = memberId, memberId = it.creatorId)
} else {
true
}
}
val curationList = curationService.getContentCurationList(
tabId = 3L, // 기존에 사용하던 단편 탭의 큐레이션을 사용
isAdult = isAdult,
@@ -196,6 +212,7 @@ class HomeService(
contentRanking = contentRanking,
recommendChannelList = recommendChannelList,
freeContentList = freeContentList,
pointAvailableContentList = pointAvailableContentList,
curationList = curationList
)
}

View File

@@ -184,7 +184,8 @@ interface AudioContentQueryRepository {
limit: Long,
isFree: Boolean,
isAdult: Boolean,
orderByRandom: Boolean = false
orderByRandom: Boolean = false,
isPointAvailableOnly: Boolean = false
): List<AudioContentMainItem>
fun findContentByCurationId(
@@ -1310,7 +1311,8 @@ class AudioContentQueryRepositoryImpl(
limit: Long,
isFree: Boolean,
isAdult: Boolean,
orderByRandom: Boolean
orderByRandom: Boolean,
isPointAvailableOnly: Boolean
): List<AudioContentMainItem> {
var where = audioContent.isActive.isTrue
.and(audioContent.duration.isNotNull)
@@ -1345,6 +1347,10 @@ class AudioContentQueryRepositoryImpl(
where = where.and(audioContent.price.loe(0))
}
if (isPointAvailableOnly) {
where = where.and(audioContent.isPointAvailable.isTrue)
}
val orderBy = if (orderByRandom) {
Expressions.numberTemplate(Double::class.java, "function('rand')").asc()
} else {

View File

@@ -990,7 +990,8 @@ class AudioContentService(
limit: Long = 20,
isFree: Boolean = false,
isAdult: Boolean = false,
orderByRandom: Boolean = false
orderByRandom: Boolean = false,
isPointAvailableOnly: Boolean = false
): List<AudioContentMainItem> {
return repository.getLatestContentByTheme(
theme = theme,
@@ -999,7 +1000,8 @@ class AudioContentService(
limit = limit,
isFree = isFree,
isAdult = isAdult,
orderByRandom = orderByRandom
orderByRandom = orderByRandom,
isPointAvailableOnly = isPointAvailableOnly
)
}
}