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