From 06d670df5011e92d17972e13296b4668d5a78169 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 9 Jan 2024 22:50:44 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20-=20=EC=98=A4?= =?UTF-8?q?=ED=94=88=EC=98=88=EC=A0=95=EC=9D=B8=20=EC=9E=91=ED=92=88?= =?UTF-8?q?=EC=9D=80=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=BD=98=ED=85=90?= =?UTF-8?q?=EC=B8=A0=EC=97=90=EC=84=9C=20=EB=B3=B4=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20-=20?= =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=83=81=EC=84=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=97=90=20=EC=98=A4=ED=94=88=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=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 | 23 ++++++++- .../sodalive/content/AudioContentService.kt | 49 ++++++++++++++----- .../content/GetAudioContentDetailResponse.kt | 1 + .../content/main/AudioContentMainService.kt | 5 +- 4 files changed, 62 insertions(+), 16 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 f609302..033205b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -56,6 +56,7 @@ interface AudioContentQueryRepository { fun findByTheme( cloudfrontHost: String, + memberId: Long, theme: String = "", isAdult: Boolean = false, offset: Long = 0, @@ -64,13 +65,14 @@ interface AudioContentQueryRepository { fun findByThemeFor2Weeks( cloudfrontHost: String, + memberId: Long, theme: String = "", isAdult: Boolean = false, offset: Long = 0, limit: Long = 20 ): List - fun totalCountNewContentFor2Weeks(theme: String, isAdult: Boolean): Int + fun totalCountNewContentFor2Weeks(theme: String, memberId: Long, isAdult: Boolean): Int fun getNewContentUploadCreatorList( cloudfrontHost: String, @@ -242,12 +244,18 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) override fun findByTheme( cloudfrontHost: String, + memberId: Long, theme: String, isAdult: Boolean, offset: Long, limit: Long ): List { var where = audioContent.isActive.isTrue + .and( + audioContent.releaseDate.isNull + .or(audioContent.releaseDate.loe(LocalDateTime.now())) + .or(audioContent.member.id.eq(memberId)) + ) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) @@ -278,9 +286,14 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .fetch() } - override fun totalCountNewContentFor2Weeks(theme: String, isAdult: Boolean): Int { + override fun totalCountNewContentFor2Weeks(theme: String, memberId: Long, isAdult: Boolean): Int { var where = audioContent.isActive.isTrue .and(audioContent.createdAt.goe(LocalDateTime.now().minusWeeks(2))) + .and( + audioContent.releaseDate.isNull + .or(audioContent.releaseDate.loe(LocalDateTime.now())) + .or(audioContent.member.id.eq(memberId)) + ) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) @@ -302,6 +315,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) override fun findByThemeFor2Weeks( cloudfrontHost: String, + memberId: Long, theme: String, isAdult: Boolean, offset: Long, @@ -309,6 +323,11 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) ): List { var where = audioContent.isActive.isTrue .and(audioContent.createdAt.goe(LocalDateTime.now().minusWeeks(2))) + .and( + audioContent.releaseDate.isNull + .or(audioContent.releaseDate.loe(LocalDateTime.now())) + .or(audioContent.member.id.eq(memberId)) + ) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) 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 da54c5e..e3044c0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -438,19 +438,41 @@ class AudioContentService( 0 } - val audioContentUrl = audioContentCloudFront.generateSignedURL( - resourcePath = if ( - isExistsAudioContent || - isExistsBundleAudioContent || - audioContent.member!!.id!! == member.id!! || - audioContent.price <= 0 - ) { - audioContent.content!! - } else { - audioContent.content!!.replace("output/", "preview/") - }, - expirationTime = 1000 * 60 * 60 * (audioContent.duration!!.split(":")[0].toLong() + 2) - ) + val releaseDate = if ( + audioContent.releaseDate != null && + audioContent.releaseDate!! < LocalDateTime.now() && + creatorId != member.id!! + ) { + audioContent.releaseDate!! + .atZone(ZoneId.of("UTC")) + .withZoneSameInstant(ZoneId.of("Asia/Seoul")) + .toLocalDateTime() + .format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 오픈")) + } else { + null + } + + val audioContentUrl = if ( + audioContent.releaseDate != null && + audioContent.releaseDate!! < LocalDateTime.now() && + creatorId != member.id!! + ) { + audioContentCloudFront.generateSignedURL( + resourcePath = if ( + isExistsAudioContent || + isExistsBundleAudioContent || + audioContent.member!!.id!! == member.id!! || + audioContent.price <= 0 + ) { + audioContent.content!! + } else { + audioContent.content!!.replace("output/", "preview/") + }, + expirationTime = 1000 * 60 * 60 * (audioContent.duration!!.split(":")[0].toLong() + 2) + ) + } else { + "" + } val tag = audioContent.audioContentHashTags .map { it.hashTag!!.tag } @@ -496,6 +518,7 @@ class AudioContentService( tag = tag, price = audioContent.price, duration = audioContent.duration ?: "", + releaseDate = releaseDate, isAdult = audioContent.isAdult, isMosaic = audioContent.isAdult && member.auth == null, isOnlyRental = audioContent.isOnlyRental, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt index 8d0c468..c91248f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt @@ -14,6 +14,7 @@ data class GetAudioContentDetailResponse( val tag: String, val price: Int, val duration: String, + val releaseDate: String?, val isAdult: Boolean, val isMosaic: Boolean, val isOnlyRental: Boolean, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt index 96d4b75..8f282f0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt @@ -33,6 +33,7 @@ class AudioContentMainService( fun getNewContentByTheme(theme: String, member: Member, pageable: Pageable): List { return repository.findByTheme( cloudfrontHost = imageHost, + memberId = member.id!!, theme = theme, isAdult = member.auth != null, offset = pageable.offset, @@ -45,9 +46,11 @@ class AudioContentMainService( @Transactional(readOnly = true) fun getNewContentFor2WeeksByTheme(theme: String, member: Member, pageable: Pageable): GetNewContentAllResponse { - val totalCount = repository.totalCountNewContentFor2Weeks(theme, isAdult = member.auth != null) + val totalCount = + repository.totalCountNewContentFor2Weeks(theme, memberId = member.id!!, isAdult = member.auth != null) val items = repository.findByThemeFor2Weeks( cloudfrontHost = imageHost, + memberId = member.id!!, theme = theme, isAdult = member.auth != null, offset = pageable.offset,