From 22f274fd321729835ad2bf7edb5062b7d57ddc5c Mon Sep 17 00:00:00 2001
From: Klaus <klaus@vividnext.co.kr>
Date: Fri, 2 Feb 2024 20:03:23 +0900
Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=A1=B0?=
 =?UTF-8?q?=ED=9A=8C=20-=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=EA=B1=B4?=
 =?UTF-8?q?=EC=97=90=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=B6=94?=
 =?UTF-8?q?=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../vividnext/sodalive/content/AudioContentController.kt | 2 ++
 .../vividnext/sodalive/content/AudioContentRepository.kt | 9 +++++++++
 .../co/vividnext/sodalive/content/AudioContentService.kt | 2 ++
 3 files changed, 13 insertions(+)

diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt
index d86afd3..409adb8 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt
@@ -105,6 +105,7 @@ class AudioContentController(private val service: AudioContentService) {
     fun getAudioContentList(
         @RequestParam("creator-id") creatorId: Long,
         @RequestParam("sort-type", required = false) sortType: SortType = SortType.NEWEST,
+        @RequestParam("category-id", required = false) categoryId: Long = 0,
         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
         pageable: Pageable
     ) = run {
@@ -114,6 +115,7 @@ class AudioContentController(private val service: AudioContentService) {
             service.getAudioContentList(
                 creatorId = creatorId,
                 sortType = sortType,
+                categoryId = categoryId,
                 member = member,
                 offset = pageable.offset,
                 limit = pageable.pageSize.toLong()
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt
index 4e90a0e..ff06f60 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt
@@ -4,6 +4,7 @@ import com.querydsl.core.types.dsl.Expressions
 import com.querydsl.jpa.impl.JPAQueryFactory
 import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
 import kr.co.vividnext.sodalive.content.QBundleAudioContent.bundleAudioContent
+import kr.co.vividnext.sodalive.content.category.QCategoryContent.categoryContent
 import kr.co.vividnext.sodalive.content.comment.QAudioContentComment.audioContentComment
 import kr.co.vividnext.sodalive.content.like.QAudioContentLike.audioContentLike
 import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem
@@ -37,6 +38,7 @@ interface AudioContentQueryRepository {
         coverImageHost: String,
         isAdult: Boolean = false,
         sortType: SortType = SortType.NEWEST,
+        categoryId: Long = 0,
         offset: Long = 0,
         limit: Long = 10
     ): List<GetAudioContentListItem>
@@ -144,6 +146,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
         coverImageHost: String,
         isAdult: Boolean,
         sortType: SortType,
+        categoryId: Long,
         offset: Long,
         limit: Long
     ): List<GetAudioContentListItem> {
@@ -163,6 +166,10 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
             where = where.and(audioContent.isAdult.isFalse)
         }
 
+        if (categoryId > 0) {
+            where = where.and(categoryContent.category.id.eq(categoryId))
+        }
+
         return queryFactory
             .select(
                 QGetAudioContentListItem(
@@ -180,6 +187,8 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
                 )
             )
             .from(audioContent)
+            .leftJoin(categoryContent)
+            .on(audioContent.id.eq(categoryContent.content.id).and(categoryContent.isActive.ne(false)))
             .leftJoin(pinContent)
             .on(audioContent.id.eq(pinContent.content.id).and(pinContent.isActive.ne(false)))
             .where(where)
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt
index 9c52cb4..832a9f9 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt
@@ -624,6 +624,7 @@ class AudioContentService(
         creatorId: Long,
         sortType: SortType,
         member: Member,
+        categoryId: Long = 0,
         offset: Long,
         limit: Long
     ): GetAudioContentListResponse {
@@ -637,6 +638,7 @@ class AudioContentService(
             coverImageHost = coverImageHost,
             isAdult = member.auth != null,
             sortType = sortType,
+            categoryId = categoryId,
             offset = offset,
             limit = limit
         )