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 c934c91..d66d1f8 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 @@ -124,7 +124,8 @@ class HomeService( val originalAudioDramaList = seriesService.getOriginalAudioDramaList( isAdult = isAdult, - contentType = contentType + contentType = contentType, + orderByRandom = true ) val auditionList = auditionService.getInProgressAuditionList(isAdult = isAdult) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt index bb74ddc..a1e682a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt @@ -39,6 +39,7 @@ interface ContentSeriesQueryRepository { contentType: ContentType, isOriginal: Boolean, isCompleted: Boolean, + orderByRandom: Boolean, offset: Long, limit: Long ): List @@ -65,6 +66,7 @@ interface ContentSeriesQueryRepository { fun getOriginalAudioDramaList( isAdult: Boolean, contentType: ContentType, + orderByRandom: Boolean = false, offset: Long = 0, limit: Long = 20 ): List @@ -139,6 +141,7 @@ class ContentSeriesQueryRepositoryImpl( contentType: ContentType, isOriginal: Boolean, isCompleted: Boolean, + orderByRandom: Boolean, offset: Long, limit: Long ): List { @@ -173,7 +176,9 @@ class ContentSeriesQueryRepositoryImpl( } } - val orderBy = if (creatorId != null) { + val orderBy = if (orderByRandom) { + listOf(Expressions.numberTemplate(Double::class.java, "function('rand')").asc()) + } else if (creatorId != null) { listOf(series.orders.asc(), series.createdAt.asc()) } else { listOf(audioContent.releaseDate.max().desc(), series.createdAt.asc()) @@ -362,6 +367,7 @@ class ContentSeriesQueryRepositoryImpl( override fun getOriginalAudioDramaList( isAdult: Boolean, contentType: ContentType, + orderByRandom: Boolean, offset: Long, limit: Long ): List { @@ -390,7 +396,13 @@ class ContentSeriesQueryRepositoryImpl( .selectFrom(series) .innerJoin(series.member, member) .where(where) - .orderBy(series.id.desc()) + .orderBy( + if (orderByRandom) { + Expressions.numberTemplate(Double::class.java, "function('rand')").asc() + } else { + series.id.desc() + } + ) .offset(offset) .limit(limit) .fetch() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt index cfde3f0..3a2cc9b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt @@ -37,10 +37,11 @@ class ContentSeriesService( fun getOriginalAudioDramaList( isAdult: Boolean, contentType: ContentType, + orderByRandom: Boolean = false, offset: Long = 0, limit: Long = 20 ): List { - val originalAudioDramaList = repository.getOriginalAudioDramaList(isAdult, contentType, offset, limit) + val originalAudioDramaList = repository.getOriginalAudioDramaList(isAdult, contentType, orderByRandom, offset, limit) return seriesToSeriesListItem(originalAudioDramaList, isAdult, contentType) } @@ -52,6 +53,7 @@ class ContentSeriesService( creatorId: Long?, isOriginal: Boolean = false, isCompleted: Boolean = false, + orderByRandom: Boolean = false, isAdultContentVisible: Boolean, contentType: ContentType, member: Member, @@ -75,6 +77,7 @@ class ContentSeriesService( contentType = contentType, isOriginal = isOriginal, isCompleted = isCompleted, + orderByRandom = orderByRandom, offset = offset, limit = limit ).filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) }