diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/GetHomeResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/GetHomeResponse.kt index aa11948..efbd497 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/GetHomeResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/GetHomeResponse.kt @@ -26,5 +26,6 @@ data class GetHomeResponse( val contentRanking: List, val recommendChannelList: List, val freeContentList: List, + val pointAvailableContentList: List, val curationList: List ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt index 096ac98..b45db6e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt @@ -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 ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 64d294e..6b93c4d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -184,7 +184,8 @@ interface AudioContentQueryRepository { limit: Long, isFree: Boolean, isAdult: Boolean, - orderByRandom: Boolean = false + orderByRandom: Boolean = false, + isPointAvailableOnly: Boolean = false ): List fun findContentByCurationId( @@ -1310,7 +1311,8 @@ class AudioContentQueryRepositoryImpl( limit: Long, isFree: Boolean, isAdult: Boolean, - orderByRandom: Boolean + orderByRandom: Boolean, + isPointAvailableOnly: Boolean ): List { 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 { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index a5c4c79..23bca75 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -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 { return repository.getLatestContentByTheme( theme = theme, @@ -999,7 +1000,8 @@ class AudioContentService( limit = limit, isFree = isFree, isAdult = isAdult, - orderByRandom = orderByRandom + orderByRandom = orderByRandom, + isPointAvailableOnly = isPointAvailableOnly ) } }