feat(banner): 구형 공개 조회에 예약 기간 필터를 적용한다
This commit is contained in:
@@ -16,6 +16,7 @@ import kr.co.vividnext.sodalive.content.main.QGetAudioContentMainItem
|
||||
import kr.co.vividnext.sodalive.content.main.QGetAudioContentRankingItem
|
||||
import kr.co.vividnext.sodalive.content.main.banner.AudioContentBanner
|
||||
import kr.co.vividnext.sodalive.content.main.banner.QAudioContentBanner.audioContentBanner
|
||||
import kr.co.vividnext.sodalive.content.main.banner.isVisibleAt
|
||||
import kr.co.vividnext.sodalive.content.main.curation.AudioContentCuration
|
||||
import kr.co.vividnext.sodalive.content.main.curation.QAudioContentCuration.audioContentCuration
|
||||
import kr.co.vividnext.sodalive.content.main.curation.QAudioContentCurationItem.audioContentCurationItem
|
||||
@@ -38,6 +39,7 @@ import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
import java.time.LocalDateTime
|
||||
import java.time.ZoneOffset
|
||||
|
||||
@Repository
|
||||
interface AudioContentRepository : JpaRepository<AudioContent, Long>, AudioContentQueryRepository
|
||||
@@ -215,7 +217,8 @@ class AudioContentQueryRepositoryImpl(
|
||||
private val queryFactory: JPAQueryFactory,
|
||||
|
||||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val imageHost: String
|
||||
private val imageHost: String,
|
||||
private val nowProvider: () -> LocalDateTime = { LocalDateTime.now(ZoneOffset.UTC) }
|
||||
) : AudioContentQueryRepository {
|
||||
override fun findByIdAndActive(contentId: Long): AudioContent? {
|
||||
return queryFactory
|
||||
@@ -904,7 +907,7 @@ class AudioContentQueryRepositoryImpl(
|
||||
.leftJoin(audioContentBanner.tab, audioContentMainTab)
|
||||
.leftJoin(audioContentBanner.event, event)
|
||||
.leftJoin(audioContentBanner.creator, member)
|
||||
.where(where)
|
||||
.where(where, audioContentBanner.isVisibleAt(nowProvider()))
|
||||
.orderBy(audioContentBanner.orders.asc())
|
||||
.fetch()
|
||||
}
|
||||
|
||||
+5
-2
@@ -7,6 +7,8 @@ import kr.co.vividnext.sodalive.event.QEvent.event
|
||||
import kr.co.vividnext.sodalive.i18n.Lang
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import java.time.LocalDateTime
|
||||
import java.time.ZoneOffset
|
||||
|
||||
interface AudioContentBannerRepository : JpaRepository<AudioContentBanner, Long>, AudioContentBannerQueryRepository
|
||||
|
||||
@@ -15,7 +17,8 @@ interface AudioContentBannerQueryRepository {
|
||||
}
|
||||
|
||||
class AudioContentBannerQueryRepositoryImpl(
|
||||
private val queryFactory: JPAQueryFactory
|
||||
private val queryFactory: JPAQueryFactory,
|
||||
private val nowProvider: () -> LocalDateTime = { LocalDateTime.now(ZoneOffset.UTC) }
|
||||
) : AudioContentBannerQueryRepository {
|
||||
override fun getAudioContentMainBannerList(tabId: Long, isAdult: Boolean, lang: Lang?): List<AudioContentBanner> {
|
||||
var where = audioContentBanner.isActive.isTrue
|
||||
@@ -39,7 +42,7 @@ class AudioContentBannerQueryRepositoryImpl(
|
||||
.leftJoin(audioContentBanner.tab, audioContentMainTab)
|
||||
.leftJoin(audioContentBanner.event, event)
|
||||
.leftJoin(audioContentBanner.creator, member)
|
||||
.where(where)
|
||||
.where(where, audioContentBanner.isVisibleAt(nowProvider()))
|
||||
.orderBy(audioContentBanner.orders.asc())
|
||||
.fetch()
|
||||
}
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package kr.co.vividnext.sodalive.content.main.banner
|
||||
|
||||
import com.querydsl.core.types.dsl.BooleanExpression
|
||||
import java.time.LocalDateTime
|
||||
import java.time.temporal.ChronoUnit
|
||||
|
||||
fun QAudioContentBanner.isVisibleAt(now: LocalDateTime): BooleanExpression {
|
||||
val currentSecond = now.truncatedTo(ChronoUnit.SECONDS)
|
||||
return startDate.isNull.or(startDate.loe(currentSecond))
|
||||
.and(endDate.isNull.or(endDate.goe(currentSecond)))
|
||||
}
|
||||
Reference in New Issue
Block a user