콘텐츠 URL 생성 API

This commit is contained in:
Klaus 2024-12-06 23:07:59 +09:00
parent ba17095536
commit bf62482137
3 changed files with 35 additions and 0 deletions

View File

@ -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,

View File

@ -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)
}
}

View File

@ -0,0 +1,5 @@
package kr.co.vividnext.sodalive.content
data class GenerateUrlResponse(
val contentUrl: String
)