From 7b04803aa07d3fe5ebc08dac6cb49a4a1d7d2672 Mon Sep 17 00:00:00 2001
From: Klaus <klaus@vividnext.co.kr>
Date: Thu, 25 Apr 2024 04:31:36 +0900
Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EB=A6=AC?=
 =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20API=20-=20DTO=20?=
 =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=8B=9C=20EnumCollection=20=EB=B6=80?=
 =?UTF-8?q?=EB=B6=84=EC=9D=98=20=EB=AC=B8=EC=A0=9C=EB=A1=9C=20series=20?=
 =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C?=
 =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../content/series/ContentSeriesRepository.kt | 38 ++-----------
 .../content/series/ContentSeriesService.kt    | 42 +++++++++++++-
 .../content/series/GetSeriesListRawItem.kt    | 57 -------------------
 3 files changed, 45 insertions(+), 92 deletions(-)
 delete mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/series/GetSeriesListRawItem.kt

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 80898f2..9ac91e2 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
@@ -1,23 +1,21 @@
 package kr.co.vividnext.sodalive.content.series
 
 import com.querydsl.jpa.impl.JPAQueryFactory
-import kr.co.vividnext.sodalive.admin.content.series.genre.QSeriesGenre
 import kr.co.vividnext.sodalive.creator.admin.content.series.QSeries.series
 import kr.co.vividnext.sodalive.creator.admin.content.series.Series
-import kr.co.vividnext.sodalive.member.QMember
 import org.springframework.data.jpa.repository.JpaRepository
 
 interface ContentSeriesRepository : JpaRepository<Series, Long>, ContentSeriesQueryRepository
 
 interface ContentSeriesQueryRepository {
     fun getSeriesTotalCount(creatorId: Long, isAuth: Boolean): Int
-    fun getSeriesRawItemList(
+    fun getSeriesList(
         imageHost: String,
         creatorId: Long,
         isAuth: Boolean,
         offset: Long,
         limit: Long
-    ): List<GetSeriesListRawItem>
+    ): List<Series>
 }
 
 class ContentSeriesQueryRepositoryImpl(
@@ -39,16 +37,13 @@ class ContentSeriesQueryRepositoryImpl(
             .size
     }
 
-    override fun getSeriesRawItemList(
+    override fun getSeriesList(
         imageHost: String,
         creatorId: Long,
         isAuth: Boolean,
         offset: Long,
         limit: Long
-    ): List<GetSeriesListRawItem> {
-        val qMember = QMember.member
-        val qSeriesGenre = QSeriesGenre.seriesGenre
-
+    ): List<Series> {
         var where = series.member.id.eq(creatorId)
             .and(series.isActive.isTrue)
 
@@ -56,31 +51,8 @@ class ContentSeriesQueryRepositoryImpl(
             where = where.and(series.isAdult.isFalse)
         }
 
-        println(
-            queryFactory.select(series.publishedDaysOfWeek)
-                .from(series)
-                .where(where)
-                .fetch()
-        )
-
         return queryFactory
-            .select(
-                QGetSeriesListRawItem(
-                    series.id,
-                    series.title,
-                    series.coverImage.prepend("/").prepend(imageHost),
-                    series.publishedDaysOfWeek,
-                    series.state,
-                    qSeriesGenre.genre,
-                    series.isAdult,
-                    qMember.id,
-                    qMember.nickname,
-                    qMember.profileImage.prepend("/").prepend(imageHost)
-                )
-            )
-            .from(series)
-            .innerJoin(series.member, qMember)
-            .innerJoin(series.genre, qSeriesGenre)
+            .selectFrom(series)
             .where(where)
             .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 6f08877..e3324ba 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
@@ -1,7 +1,9 @@
 package kr.co.vividnext.sodalive.content.series
 
 import kr.co.vividnext.sodalive.content.series.content.ContentSeriesContentRepository
+import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek
 import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesSortType
+import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesState
 import kr.co.vividnext.sodalive.member.Member
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.stereotype.Service
@@ -23,7 +25,7 @@ class ContentSeriesService(
         limit: Long = 10
     ): GetSeriesListResponse {
         val totalCount = repository.getSeriesTotalCount(creatorId = creatorId, isAuth = member.auth != null)
-        val rawItems = repository.getSeriesRawItemList(
+        val rawItems = repository.getSeriesList(
             imageHost = coverImageHost,
             creatorId = creatorId,
             isAuth = member.auth != null,
@@ -32,7 +34,20 @@ class ContentSeriesService(
         )
 
         val items = rawItems
-            .map { it.toSeriesListItem() }
+            .map {
+                GetSeriesListResponse.SeriesListItem(
+                    seriesId = it.id!!,
+                    title = it.title,
+                    coverImage = "$coverImageHost/${it.coverImage!!}",
+                    publishedDaysOfWeek = publishedDaysOfWeekText(it.publishedDaysOfWeek),
+                    isComplete = it.state == SeriesState.COMPLETE,
+                    creator = GetSeriesListResponse.SeriesListItemCreator(
+                        creatorId = it.member!!.id!!,
+                        nickname = it.member!!.nickname,
+                        profileImage = "$coverImageHost/${it.member!!.profileImage!!}"
+                    )
+                )
+            }
             .map {
                 it.numberOfContent = seriesContentRepository.getContentCount(
                     seriesId = it.seriesId,
@@ -56,4 +71,27 @@ class ContentSeriesService(
 
         return GetSeriesListResponse(totalCount, items)
     }
+
+    private fun publishedDaysOfWeekText(publishedDaysOfWeek: Set<SeriesPublishedDaysOfWeek>): String {
+        val dayOfWeekText = publishedDaysOfWeek.toList().sortedBy { it.ordinal }
+            .map {
+                when (it) {
+                    SeriesPublishedDaysOfWeek.SUN -> "일"
+                    SeriesPublishedDaysOfWeek.MON -> "월"
+                    SeriesPublishedDaysOfWeek.TUE -> "화"
+                    SeriesPublishedDaysOfWeek.WED -> "수"
+                    SeriesPublishedDaysOfWeek.THU -> "목"
+                    SeriesPublishedDaysOfWeek.FRI -> "금"
+                    SeriesPublishedDaysOfWeek.SAT -> "토"
+                    SeriesPublishedDaysOfWeek.RANDOM -> "랜덤"
+                }
+            }
+            .joinToString(", ") { it }
+
+        return if (publishedDaysOfWeek.contains(SeriesPublishedDaysOfWeek.RANDOM)) {
+            dayOfWeekText
+        } else {
+            "매주 ${dayOfWeekText}요일"
+        }
+    }
 }
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/GetSeriesListRawItem.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/GetSeriesListRawItem.kt
deleted file mode 100644
index 8b65f7d..0000000
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/GetSeriesListRawItem.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package kr.co.vividnext.sodalive.content.series
-
-import com.querydsl.core.annotations.QueryProjection
-import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek
-import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesState
-
-data class GetSeriesListRawItem @QueryProjection constructor(
-    val seriesId: Long,
-    val title: String,
-    val coverImage: String,
-    val publishedDaysOfWeek: Set<SeriesPublishedDaysOfWeek>,
-    val state: SeriesState,
-    val genre: String,
-    val isAdult: Boolean,
-    val creatorId: Long,
-    val creatorNickname: String,
-    val creatorProfileImage: String
-
-) {
-    fun toSeriesListItem(): GetSeriesListResponse.SeriesListItem {
-        return GetSeriesListResponse.SeriesListItem(
-            seriesId = seriesId,
-            title = title,
-            coverImage = coverImage,
-            publishedDaysOfWeek = publishedDaysOfWeekText(),
-            isComplete = state == SeriesState.COMPLETE,
-            creator = GetSeriesListResponse.SeriesListItemCreator(
-                creatorId = creatorId,
-                nickname = creatorNickname,
-                profileImage = creatorProfileImage
-            )
-        )
-    }
-
-    private fun publishedDaysOfWeekText(): String {
-        val dayOfWeekText = publishedDaysOfWeek.toList().sortedBy { it.ordinal }
-            .map {
-                when (it) {
-                    SeriesPublishedDaysOfWeek.SUN -> "일"
-                    SeriesPublishedDaysOfWeek.MON -> "월"
-                    SeriesPublishedDaysOfWeek.TUE -> "화"
-                    SeriesPublishedDaysOfWeek.WED -> "수"
-                    SeriesPublishedDaysOfWeek.THU -> "목"
-                    SeriesPublishedDaysOfWeek.FRI -> "금"
-                    SeriesPublishedDaysOfWeek.SAT -> "토"
-                    SeriesPublishedDaysOfWeek.RANDOM -> "랜덤"
-                }
-            }
-            .joinToString(", ") { it }
-
-        return if (publishedDaysOfWeek.contains(SeriesPublishedDaysOfWeek.RANDOM)) {
-            dayOfWeekText
-        } else {
-            "매주 ${dayOfWeekText}요일"
-        }
-    }
-}