From 7bafb6ba0d949c44e99f425fa9d57c7f2e4516aa Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 6 Feb 2024 16:11:57 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=BD=98=ED=85=90=EC=B8=A0=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20-=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=A1=B0=ED=9A=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentRepository.kt | 14 +++++++++++--- .../sodalive/content/AudioContentService.kt | 3 ++- .../content/CreatorAdminContentController.kt | 7 ++++--- .../content/CreatorAdminContentRepository.kt | 19 +++++++++++++++++-- .../content/CreatorAdminContentService.kt | 7 ++++--- 5 files changed, 38 insertions(+), 12 deletions(-) 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 ff06f60..bd4ff8f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -43,7 +43,7 @@ interface AudioContentQueryRepository { limit: Long = 10 ): List - fun findTotalCountByCreatorId(creatorId: Long, isAdult: Boolean = false): Int + fun findTotalCountByCreatorId(creatorId: Long, isAdult: Boolean = false, categoryId: Long = 0): Int fun getCreatorOtherContentList( cloudfrontHost: String, contentId: Long, @@ -200,7 +200,8 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) override fun findTotalCountByCreatorId( creatorId: Long, - isAdult: Boolean + isAdult: Boolean, + categoryId: Long ): Int { var where = audioContent.member.id.eq(creatorId) .and( @@ -212,8 +213,15 @@ 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 - .selectFrom(audioContent) + .select(audioContent.id) + .from(audioContent) + .leftJoin(categoryContent) + .on(audioContent.id.eq(categoryContent.content.id).and(categoryContent.isActive.ne(false))) .where(where) .fetch() .size 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 832a9f9..de0e173 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -630,7 +630,8 @@ class AudioContentService( ): GetAudioContentListResponse { val totalCount = repository.findTotalCountByCreatorId( creatorId = creatorId, - isAdult = member.auth != null + isAdult = member.auth != null, + categoryId = categoryId ) val audioContentList = repository.findByCreatorId( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt index f19e973..12a6074 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt @@ -20,12 +20,13 @@ import org.springframework.web.multipart.MultipartFile class CreatorAdminContentController(private val service: CreatorAdminContentService) { @GetMapping("/list") fun getAudioContentList( - pageable: Pageable, - @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + @RequestParam("category-id", required = false) categoryId: Long? = 0, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, + pageable: Pageable ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getAudioContentList(pageable, member)) + ApiResponse.ok(service.getAudioContentList(pageable, member, categoryId ?: 0)) } @GetMapping("/search") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentRepository.kt index e856992..c2598e6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentRepository.kt @@ -6,6 +6,7 @@ import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.content.AudioContent import kr.co.vividnext.sodalive.content.QAudioContent.audioContent +import kr.co.vividnext.sodalive.content.category.QCategoryContent.categoryContent import kr.co.vividnext.sodalive.content.hashtag.QAudioContentHashTag.audioContentHashTag import kr.co.vividnext.sodalive.content.hashtag.QHashTag.hashTag import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme @@ -16,11 +17,12 @@ import java.time.LocalDateTime interface CreatorAdminContentRepository : JpaRepository, CreatorAdminAudioContentQueryRepository interface CreatorAdminAudioContentQueryRepository { - fun getAudioContentTotalCount(memberId: Long, searchWord: String = ""): Int + fun getAudioContentTotalCount(memberId: Long, searchWord: String = "", categoryId: Long = 0): Int fun getAudioContentList( memberId: Long, offset: Long, limit: Long, + categoryId: Long = 0, searchWord: String = "" ): List @@ -32,7 +34,7 @@ interface CreatorAdminAudioContentQueryRepository { class CreatorAdminAudioContentQueryRepositoryImpl( private val queryFactory: JPAQueryFactory ) : CreatorAdminAudioContentQueryRepository { - override fun getAudioContentTotalCount(memberId: Long, searchWord: String): Int { + override fun getAudioContentTotalCount(memberId: Long, searchWord: String, categoryId: Long): Int { var where = audioContent.duration.isNotNull .and(audioContent.member.isNotNull) .and(audioContent.isActive.isTrue.or(audioContent.releaseDate.isNotNull)) @@ -45,9 +47,15 @@ class CreatorAdminAudioContentQueryRepositoryImpl( ) } + if (categoryId > 0) { + where = where.and(categoryContent.category.id.eq(categoryId)) + } + return queryFactory .select(audioContent.id) .from(audioContent) + .leftJoin(categoryContent) + .on(audioContent.id.eq(categoryContent.content.id).and(categoryContent.isActive.ne(false))) .where(where) .fetch() .size @@ -57,6 +65,7 @@ class CreatorAdminAudioContentQueryRepositoryImpl( memberId: Long, offset: Long, limit: Long, + categoryId: Long, searchWord: String ): List { var where = audioContent.duration.isNotNull @@ -64,6 +73,10 @@ class CreatorAdminAudioContentQueryRepositoryImpl( .and(audioContent.isActive.isTrue.or(audioContent.releaseDate.isNotNull)) .and(audioContent.member.id.eq(memberId)) + if (categoryId > 0) { + where = where.and(categoryContent.category.id.eq(categoryId)) + } + if (searchWord.trim().length > 1) { where = where.and( audioContent.title.contains(searchWord) @@ -91,6 +104,8 @@ class CreatorAdminAudioContentQueryRepositoryImpl( ) .from(audioContent) .innerJoin(audioContent.theme, audioContentTheme) + .leftJoin(categoryContent) + .on(audioContent.id.eq(categoryContent.content.id).and(categoryContent.isActive.ne(false))) .where(where) .offset(offset) .limit(limit) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt index 9d1438d..615b5e2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt @@ -26,12 +26,13 @@ class CreatorAdminContentService( @Value("\${cloud.aws.cloud-front.host}") private val coverImageHost: String ) { - fun getAudioContentList(pageable: Pageable, member: Member): GetCreatorAdminContentListResponse { - val totalCount = repository.getAudioContentTotalCount(memberId = member.id!!) + fun getAudioContentList(pageable: Pageable, member: Member, categoryId: Long): GetCreatorAdminContentListResponse { + val totalCount = repository.getAudioContentTotalCount(memberId = member.id!!, categoryId = categoryId) val audioContentAndThemeList = repository.getAudioContentList( memberId = member.id!!, offset = pageable.offset, - limit = pageable.pageSize.toLong() + limit = pageable.pageSize.toLong(), + categoryId = categoryId ) val audioContentList = audioContentAndThemeList