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 2a2a983..fafccf7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -134,6 +134,15 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok(service.getDetail(id = id, member = member, timezone = timezone)) } + @GetMapping("/{id}/generate-url") + fun generateUrl( + @PathVariable id: Long, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + ApiResponse.ok(service.generateUrl(contentId = id, member = member)) + } + @PostMapping("/playback-tracking") fun addAllPlaybackTracking( @RequestBody request: AddAllPlaybackTrackingRequest, 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 05f9738..d5231df 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -827,4 +827,25 @@ class AudioContentService( pinContent.isActive = false } + + fun generateUrl(contentId: Long, member: Member): GenerateUrlResponse { + val audioContent = repository.findByIdOrNull(contentId) + ?: throw SodaException("잘못된 콘텐츠 입니다.\n다시 시도해 주세요.") + + val isExistsAudioContent = orderRepository.isExistOrdered( + memberId = member.id!!, + contentId = audioContent.id!! + ) + + val contentUrl = if (isExistsAudioContent) { + audioContentCloudFront.generateSignedURL( + resourcePath = audioContent.content!!, + expirationTime = 1000 * 60 * 60 * (audioContent.duration!!.split(":")[0].toLong() + 2) + ) + } else { + "" + } + + return GenerateUrlResponse(contentUrl) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt new file mode 100644 index 0000000..9a51cfe --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt @@ -0,0 +1,5 @@ +package kr.co.vividnext.sodalive.content + +data class GenerateUrlResponse( + val contentUrl: String +)