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}요일"
- }
- }
-}