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 537f560..02e1e2d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -25,7 +25,10 @@ import java.time.temporal.TemporalAdjusters @RestController @RequestMapping("/audio-content") -class AudioContentController(private val service: AudioContentService) { +class AudioContentController( + private val service: AudioContentService, + private val repository: AudioContentRepository +) { @PostMapping @PreAuthorize("hasRole('CREATOR')") fun createAudioContent( @@ -190,4 +193,16 @@ class AudioContentController(private val service: AudioContentService) { ) ) } + + @PostMapping("/release") + @PreAuthorize("hasRole('BOT')") + fun releaseContent() = run { + val contentIdList = repository.getNotReleaseContentId() + + contentIdList.forEach { + service.releaseContent(it) + } + + ApiResponse.ok(null) + } } 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 033205b..34923ec 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -98,6 +98,8 @@ interface AudioContentQueryRepository { ): List fun getAudioContentCurationList(isAdult: Boolean, offset: Long, limit: Long): List + + fun getNotReleaseContentId(): List } @Repository @@ -581,4 +583,16 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .orderBy(audioContentCuration.orders.asc()) .fetch() } + + override fun getNotReleaseContentId(): List { + val where = audioContent.isActive.isFalse + .and(audioContent.releaseDate.isNotNull) + .and(audioContent.releaseDate.loe(LocalDateTime.now())) + + return queryFactory + .select(audioContent.id) + .from(audioContent) + .where(where) + .fetch() + } } 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 dc80529..d94a4d9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -342,7 +342,6 @@ class AudioContentService( val audioContent = repository.findByIdOrNull(contentId) ?: throw SodaException("잘못된 요청입니다.") - audioContent.isActive = true audioContent.content = content audioContent.duration = duration @@ -358,6 +357,8 @@ class AudioContentService( ) if (audioContent.releaseDate == null) { + audioContent.isActive = true + applicationEventPublisher.publishEvent( FcmEvent( type = FcmEventType.UPLOAD_CONTENT, @@ -384,6 +385,38 @@ class AudioContentService( } } + @Transactional + fun releaseContent(contentId: Long) { + val audioContent = repository.findByIdOrNull(contentId) + ?: throw SodaException("잘못된 요청입니다.") + + audioContent.isActive = true + + applicationEventPublisher.publishEvent( + FcmEvent( + type = FcmEventType.UPLOAD_CONTENT, + title = audioContent.member!!.nickname, + message = "콘텐츠를 업로드 하였습니다. - ${audioContent.title}", + isAuth = audioContent.isAdult, + contentId = contentId, + creatorId = audioContent.member!!.id, + container = "ios" + ) + ) + + applicationEventPublisher.publishEvent( + FcmEvent( + type = FcmEventType.UPLOAD_CONTENT, + title = audioContent.member!!.nickname, + message = "콘텐츠를 업로드 하였습니다. - ${audioContent.title}", + isAuth = audioContent.isAdult, + contentId = contentId, + creatorId = audioContent.member!!.id, + container = "aos" + ) + ) + } + fun getDetail(id: Long, member: Member, timezone: String): GetAudioContentDetailResponse { // 묶음 콘텐츠 조회 val bundleAudioContentList = repository.findBundleByContentId(contentId = id)