From 39760e16ffc1080472e148309c09a9dbe80bf043 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 12 Nov 2025 17:25:38 +0900 Subject: [PATCH] =?UTF-8?q?feat(series):=20=EC=98=A4=EC=A7=81=20=EB=B3=B4?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EC=98=A8=EC=97=90=EC=84=9C=EB=A7=8C(?= =?UTF-8?q?=EC=98=A4=EB=A6=AC=EC=A7=80=EB=84=90)=20=EC=A0=9C=EA=B3=B5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=BD=98=ED=85=90=EC=B8=A0=EB=8F=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20isOriginal=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0?= =?UTF-8?q?=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 | 4 ++- .../content/series/ContentSeriesRepository.kt | 31 ++++++++++++++----- .../content/series/ContentSeriesService.kt | 8 +++-- 3 files changed, 32 insertions(+), 11 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 998bbc7..5eab4b9 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 @@ -18,7 +18,8 @@ import org.springframework.web.bind.annotation.RestController class ContentSeriesController(private val service: ContentSeriesService) { @GetMapping fun getSeriesList( - @RequestParam creatorId: Long, + @RequestParam(required = false) creatorId: Long?, + @RequestParam(name = "isOriginal", required = false) isOriginal: Boolean? = null, @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, @@ -29,6 +30,7 @@ class ContentSeriesController(private val service: ContentSeriesService) { ApiResponse.ok( service.getSeriesList( creatorId = creatorId, + isOriginal = isOriginal ?: 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 8cf50e7..93a7666 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 @@ -23,12 +23,13 @@ import org.springframework.data.jpa.repository.JpaRepository interface ContentSeriesRepository : JpaRepository, ContentSeriesQueryRepository interface ContentSeriesQueryRepository { - fun getSeriesTotalCount(creatorId: Long, isAuth: Boolean, contentType: ContentType): Int + fun getSeriesTotalCount(creatorId: Long?, isAuth: Boolean, contentType: ContentType, isOriginal: Boolean): Int fun getSeriesList( imageHost: String, - creatorId: Long, + creatorId: Long?, isAuth: Boolean, contentType: ContentType, + isOriginal: Boolean, offset: Long, limit: Long ): List @@ -59,9 +60,16 @@ interface ContentSeriesQueryRepository { class ContentSeriesQueryRepositoryImpl( private val queryFactory: JPAQueryFactory ) : ContentSeriesQueryRepository { - override fun getSeriesTotalCount(creatorId: Long, isAuth: Boolean, contentType: ContentType): Int { - var where = series.member.id.eq(creatorId) - .and(series.isActive.isTrue) + override fun getSeriesTotalCount(creatorId: Long?, isAuth: Boolean, contentType: ContentType, isOriginal: Boolean): Int { + var where = series.isActive.isTrue + + if (creatorId != null) { + where = where.and(series.member.id.eq(creatorId)) + } + + if (isOriginal) { + where = where.and(series.isOriginal.isTrue) + } if (!isAuth) { where = where.and(series.isAdult.isFalse) @@ -92,14 +100,21 @@ class ContentSeriesQueryRepositoryImpl( override fun getSeriesList( imageHost: String, - creatorId: Long, + creatorId: Long?, isAuth: Boolean, contentType: ContentType, + isOriginal: Boolean, offset: Long, limit: Long ): List { - var where = series.member.id.eq(creatorId) - .and(series.isActive.isTrue) + var where = series.isActive.isTrue + + if (creatorId != null) { + where = where.and(series.member.id.eq(creatorId)) + } + if (isOriginal) { + where = where.and(series.isOriginal.isTrue) + } if (!isAuth) { where = where.and(series.isAdult.isFalse) 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 20404de..c75b665 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 @@ -49,7 +49,8 @@ class ContentSeriesService( } fun getSeriesList( - creatorId: Long, + creatorId: Long?, + isOriginal: Boolean = false, isAdultContentVisible: Boolean, contentType: ContentType, member: Member, @@ -61,13 +62,16 @@ class ContentSeriesService( val totalCount = repository.getSeriesTotalCount( creatorId = creatorId, isAuth = isAuth, - contentType = contentType + contentType = contentType, + isOriginal = isOriginal ) + val rawItems = repository.getSeriesList( imageHost = coverImageHost, creatorId = creatorId, isAuth = isAuth, contentType = contentType, + isOriginal = isOriginal, offset = offset, limit = limit ).filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) }