From 7f70e508e46f023e93c81ba2defdf2e64a41663c Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 16 Oct 2024 12:09:13 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20-=20?= =?UTF-8?q?=EC=98=A4=ED=94=88=20/=20=EC=98=A4=ED=94=88=20=EC=98=88?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/content/AdminContentController.kt | 18 +++++++++++- .../admin/content/AdminContentRepository.kt | 29 +++++++++++++++++-- .../admin/content/AdminContentService.kt | 5 ++-- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentController.kt index 2b951e6..088d95b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentController.kt @@ -15,7 +15,15 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/admin/audio-content") class AdminContentController(private val service: AdminContentService) { @GetMapping("/list") - fun getAudioContentList(pageable: Pageable) = ApiResponse.ok(service.getAudioContentList(pageable)) + fun getAudioContentList( + @RequestParam(value = "status", required = false) status: ContentReleaseStatus?, + pageable: Pageable + ) = ApiResponse.ok( + service.getAudioContentList( + status = status ?: ContentReleaseStatus.OPEN, + pageable + ) + ) @GetMapping("/search") fun searchAudioContent( @@ -28,3 +36,11 @@ class AdminContentController(private val service: AdminContentService) { @RequestBody request: UpdateAdminContentRequest ) = ApiResponse.ok(service.updateAudioContent(request)) } + +enum class ContentReleaseStatus { + // 콘텐츠가 공개된 상태 + OPEN, + + // 예약된 콘텐츠, 아직 공개되지 않은 상태 + SCHEDULED +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentRepository.kt index a62b247..f9819d9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentRepository.kt @@ -18,8 +18,13 @@ import java.time.LocalDateTime interface AdminContentRepository : JpaRepository, AdminAudioContentQueryRepository interface AdminAudioContentQueryRepository { - fun getAudioContentTotalCount(searchWord: String = ""): Int + fun getAudioContentTotalCount( + searchWord: String = "", + status: ContentReleaseStatus = ContentReleaseStatus.OPEN + ): Int + fun getAudioContentList( + status: ContentReleaseStatus = ContentReleaseStatus.OPEN, imageHost: String, offset: Long, limit: Long, @@ -32,7 +37,12 @@ interface AdminAudioContentQueryRepository { class AdminAudioContentQueryRepositoryImpl( private val queryFactory: JPAQueryFactory ) : AdminAudioContentQueryRepository { - override fun getAudioContentTotalCount(searchWord: String): Int { + override fun getAudioContentTotalCount( + searchWord: String, + status: ContentReleaseStatus + ): Int { + val now = LocalDateTime.now() + var where = audioContent.duration.isNotNull .and(audioContent.member.isNotNull) .and(audioContent.isActive.isTrue.or(audioContent.releaseDate.isNotNull)) @@ -44,6 +54,12 @@ class AdminAudioContentQueryRepositoryImpl( ) } + where = if (status == ContentReleaseStatus.SCHEDULED) { + where.and(audioContent.releaseDate.after(now)) + } else { + where.and(audioContent.releaseDate.before(now)) + } + return queryFactory .select(audioContent.id) .from(audioContent) @@ -53,11 +69,14 @@ class AdminAudioContentQueryRepositoryImpl( } override fun getAudioContentList( + status: ContentReleaseStatus, imageHost: String, offset: Long, limit: Long, searchWord: String ): List { + val now = LocalDateTime.now() + var where = audioContent.duration.isNotNull .and(audioContent.member.isNotNull) .and(audioContent.isActive.isTrue.or(audioContent.releaseDate.isNotNull)) @@ -69,6 +88,12 @@ class AdminAudioContentQueryRepositoryImpl( ) } + where = if (status == ContentReleaseStatus.SCHEDULED) { + where.and(audioContent.releaseDate.after(now)) + } else { + where.and(audioContent.releaseDate.before(now)) + } + return queryFactory .select( QGetAdminContentListItem( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentService.kt index 0edf5ab..d3ec4ac 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/content/AdminContentService.kt @@ -20,16 +20,16 @@ class AdminContentService( @Value("\${cloud.aws.cloud-front.host}") private val coverImageHost: String ) { - fun getAudioContentList(pageable: Pageable): GetAdminContentListResponse { + fun getAudioContentList(status: ContentReleaseStatus, pageable: Pageable): GetAdminContentListResponse { val totalCount = repository.getAudioContentTotalCount() val audioContentAndThemeList = repository.getAudioContentList( + status = status, imageHost = coverImageHost, offset = pageable.offset, limit = pageable.pageSize.toLong() ) val audioContentList = audioContentAndThemeList - .asSequence() .map { val tags = repository .getHashTagList(audioContentId = it.audioContentId) @@ -44,7 +44,6 @@ class AdminContentService( ) it } - .toList() return GetAdminContentListResponse(totalCount, audioContentList) }