From d804ad268aff4229ab85ffd446835c4b38e407cb Mon Sep 17 00:00:00 2001
From: Klaus <klaus@vividnext.co.kr>
Date: Mon, 9 Sep 2024 23:41:29 +0900
Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EC=BD=98?=
 =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20-=20?=
 =?UTF-8?q?=EC=A0=95=EB=A0=AC(=EC=B5=9C=EC=8B=A0=EC=88=9C,=20=EB=93=B1?=
 =?UTF-8?q?=EB=A1=9D=EC=88=9C)=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../content/series/ContentSeriesController.kt   |  2 ++
 .../content/series/ContentSeriesService.kt      | 17 +++++++++++++++--
 .../content/ContentSeriesContentRepository.kt   | 11 ++++++++++-
 .../creator/admin/content/series/Series.kt      |  2 +-
 4 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt
index 5811af9..67ea69b 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt
@@ -50,6 +50,7 @@ class ContentSeriesController(private val service: ContentSeriesService) {
     @GetMapping("/{id}/content")
     fun getSeriesContentList(
         @PathVariable id: Long,
+        @RequestParam("sortType", required = false) sortType: SeriesSortType = SeriesSortType.OLDEST,
         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
         pageable: Pageable
     ) = run {
@@ -59,6 +60,7 @@ class ContentSeriesController(private val service: ContentSeriesService) {
             service.getSeriesContentList(
                 seriesId = id,
                 member = member,
+                sortType = sortType,
                 offset = pageable.offset,
                 limit = pageable.pageSize.toLong()
             )
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 1cefd7c..665eb2e 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
@@ -75,7 +75,13 @@ class ContentSeriesService(
         val rentalMinPrice = (minMaxPrice.minPrice * 0.6).toInt()
         val rentalMaxPrice = (minMaxPrice.maxPrice * 0.6).toInt()
 
-        val seriesContentList = getSeriesContentList(seriesId = seriesId, member = member, offset = 0, limit = 5)
+        val seriesContentList = getSeriesContentList(
+            seriesId = seriesId,
+            member = member,
+            sortType = SeriesSortType.NEWEST,
+            offset = 0,
+            limit = 5
+        )
 
         val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd")
         return GetSeriesDetailResponse(
@@ -110,7 +116,13 @@ class ContentSeriesService(
         )
     }
 
-    fun getSeriesContentList(seriesId: Long, member: Member, offset: Long, limit: Long): GetSeriesContentListResponse {
+    fun getSeriesContentList(
+        seriesId: Long,
+        member: Member,
+        sortType: SeriesSortType,
+        offset: Long,
+        limit: Long
+    ): GetSeriesContentListResponse {
         val isAdult = member.auth != null
 
         val totalCount = seriesContentRepository.getContentCount(seriesId, isAdult = isAdult)
@@ -118,6 +130,7 @@ class ContentSeriesService(
             seriesId = seriesId,
             isAdult = isAdult,
             imageHost = coverImageHost,
+            sortType = sortType,
             offset = offset,
             limit = limit
         )
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt
index aa83137..93d04e1 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt
@@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
 import kr.co.vividnext.sodalive.creator.admin.content.series.QSeries.series
 import kr.co.vividnext.sodalive.creator.admin.content.series.QSeriesContent.seriesContent
 import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesContent
+import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesSortType
 import org.springframework.data.jpa.repository.JpaRepository
 import java.time.LocalDateTime
 
@@ -17,6 +18,7 @@ interface ContentSeriesContentQueryRepository {
         seriesId: Long,
         isAdult: Boolean,
         imageHost: String,
+        sortType: SeriesSortType,
         offset: Long,
         limit: Long
     ): List<GetSeriesContentListItem>
@@ -49,6 +51,7 @@ class ContentSeriesContentQueryRepositoryImpl(
         seriesId: Long,
         isAdult: Boolean,
         imageHost: String,
+        sortType: SeriesSortType,
         offset: Long,
         limit: Long
     ): List<GetSeriesContentListItem> {
@@ -56,6 +59,12 @@ class ContentSeriesContentQueryRepositoryImpl(
             .and(audioContent.isActive.isTrue)
             .and(audioContent.duration.isNotNull)
 
+        var orderBy = series.createdAt.asc()
+
+        if (sortType == SeriesSortType.NEWEST) {
+            orderBy = series.createdAt.desc()
+        }
+
         if (!isAdult) {
             where = where.and(audioContent.isAdult.isFalse)
         }
@@ -89,7 +98,7 @@ class ContentSeriesContentQueryRepositoryImpl(
             .innerJoin(seriesContent.series, series)
             .innerJoin(seriesContent.content, audioContent)
             .where(where)
-            .orderBy(series.orders.asc(), series.createdAt.asc())
+            .orderBy(orderBy)
             .offset(offset)
             .limit(limit)
             .fetch()
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt
index 79f4f1b..9e2d1d6 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt
@@ -26,7 +26,7 @@ enum class SeriesState {
 }
 
 enum class SeriesSortType {
-    NEWEST, POPULAR
+    NEWEST, OLDEST
 }
 
 @Entity