From 9464cc5ed447166f3a3f71a860156bf50885edf5 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 13 Nov 2025 10:22:55 +0900 Subject: [PATCH] =?UTF-8?q?feat(series):=20=EC=99=84=EA=B2=B0=EB=90=9C=20?= =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=EB=A5=BC=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20isComplet?= =?UTF-8?q?ed=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=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/ContentSeriesRepository.kt | 28 +++++++++++++++++-- .../content/series/ContentSeriesService.kt | 7 +++-- 3 files changed, 33 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 5eab4b9..e9f69fd 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 @@ -20,6 +20,7 @@ class ContentSeriesController(private val service: ContentSeriesService) { fun getSeriesList( @RequestParam(required = false) creatorId: Long?, @RequestParam(name = "isOriginal", required = false) isOriginal: Boolean? = null, + @RequestParam(name = "isCompleted", required = false) isCompleted: Boolean? = null, @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, @@ -31,6 +32,7 @@ class ContentSeriesController(private val service: ContentSeriesService) { service.getSeriesList( creatorId = creatorId, isOriginal = isOriginal ?: false, + isCompleted = isCompleted ?: false, isAdultContentVisible = isAdultContentVisible ?: true, contentType = contentType ?: ContentType.ALL, member = member, 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 93a7666..e27eb56 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 @@ -14,6 +14,7 @@ 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.Series import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek +import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesState import kr.co.vividnext.sodalive.creator.admin.content.series.keyword.QSeriesKeyword.seriesKeyword import kr.co.vividnext.sodalive.member.MemberRole import kr.co.vividnext.sodalive.member.QMember.member @@ -23,13 +24,21 @@ import org.springframework.data.jpa.repository.JpaRepository interface ContentSeriesRepository : JpaRepository, ContentSeriesQueryRepository interface ContentSeriesQueryRepository { - fun getSeriesTotalCount(creatorId: Long?, isAuth: Boolean, contentType: ContentType, isOriginal: Boolean): Int + fun getSeriesTotalCount( + creatorId: Long?, + isAuth: Boolean, + contentType: ContentType, + isOriginal: Boolean, + isCompleted: Boolean + ): Int + fun getSeriesList( imageHost: String, creatorId: Long?, isAuth: Boolean, contentType: ContentType, isOriginal: Boolean, + isCompleted: Boolean, offset: Long, limit: Long ): List @@ -60,7 +69,13 @@ interface ContentSeriesQueryRepository { class ContentSeriesQueryRepositoryImpl( private val queryFactory: JPAQueryFactory ) : ContentSeriesQueryRepository { - override fun getSeriesTotalCount(creatorId: Long?, isAuth: Boolean, contentType: ContentType, isOriginal: Boolean): Int { + override fun getSeriesTotalCount( + creatorId: Long?, + isAuth: Boolean, + contentType: ContentType, + isOriginal: Boolean, + isCompleted: Boolean + ): Int { var where = series.isActive.isTrue if (creatorId != null) { @@ -71,6 +86,10 @@ class ContentSeriesQueryRepositoryImpl( where = where.and(series.isOriginal.isTrue) } + if (isCompleted) { + where = where.and(series.state.eq(SeriesState.COMPLETE)) + } + if (!isAuth) { where = where.and(series.isAdult.isFalse) } else { @@ -104,6 +123,7 @@ class ContentSeriesQueryRepositoryImpl( isAuth: Boolean, contentType: ContentType, isOriginal: Boolean, + isCompleted: Boolean, offset: Long, limit: Long ): List { @@ -116,6 +136,10 @@ class ContentSeriesQueryRepositoryImpl( where = where.and(series.isOriginal.isTrue) } + if (isCompleted) { + where = where.and(series.state.eq(SeriesState.COMPLETE)) + } + if (!isAuth) { where = where.and(series.isAdult.isFalse) } else { 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 c75b665..005fdcc 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 @@ -51,11 +51,12 @@ class ContentSeriesService( fun getSeriesList( creatorId: Long?, isOriginal: Boolean = false, + isCompleted: Boolean = false, isAdultContentVisible: Boolean, contentType: ContentType, member: Member, offset: Long = 0, - limit: Long = 10 + limit: Long = 20 ): GetSeriesListResponse { val isAuth = member.auth != null && isAdultContentVisible @@ -63,7 +64,8 @@ class ContentSeriesService( creatorId = creatorId, isAuth = isAuth, contentType = contentType, - isOriginal = isOriginal + isOriginal = isOriginal, + isCompleted = isCompleted ) val rawItems = repository.getSeriesList( @@ -72,6 +74,7 @@ class ContentSeriesService( isAuth = isAuth, contentType = contentType, isOriginal = isOriginal, + isCompleted = isCompleted, offset = offset, limit = limit ).filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) }