diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistController.kt index ef934a1..d368441 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistController.kt @@ -55,4 +55,14 @@ class AudioContentPlaylistController(private val service: AudioContentPlaylistSe ApiResponse.ok(service.getPlaylists(member)) } + + @GetMapping("/{id}") + fun getPlaylistDetail( + @PathVariable id: Long, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.getPlaylistDetail(playlistId = id, member = member)) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt index 14f3a0b..550e366 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt @@ -7,6 +7,8 @@ import kr.co.vividnext.sodalive.live.roulette.RedisIdGenerator import kr.co.vividnext.sodalive.member.Member import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service +import java.time.ZoneId +import java.time.format.DateTimeFormatter @Service class AudioContentPlaylistService( @@ -113,6 +115,33 @@ class AudioContentPlaylistService( redisRepository.delete(playlist) } + fun getPlaylistDetail(playlistId: Long, member: Member): GetPlaylistDetailResponse { + val playlist = redisRepository.findByIdOrNull(id = playlistId) + ?: throw SodaException("잘못된 요청입니다.") + + if (playlist.memberId != member.id) { + throw SodaException("잘못된 요청입니다.") + } + + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + val createdDate = playlist.createdAt + .atZone(ZoneId.of("UTC")) + .withZoneSameInstant(ZoneId.of("Asia/Seoul")) + .format(dateTimeFormatter) + + val contentList = audioContentRepository.fetchContentForPlaylist(contentIdList = playlist.contentIdList) + + return GetPlaylistDetailResponse( + playlistId = playlist.id, + title = playlist.title, + desc = playlist.desc ?: "", + createdDate = createdDate, + contentCount = contentList.size, + playlistCoverImageList = contentList.take(4).map { it.coverUrl }, + contentList = contentList + ) + } + companion object { const val SEQUENCE_NAME = "AudioContentPlaylist:sequence" } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/GetPlaylistDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/GetPlaylistDetailResponse.kt new file mode 100644 index 0000000..1d89d53 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/GetPlaylistDetailResponse.kt @@ -0,0 +1,11 @@ +package kr.co.vividnext.sodalive.content.playlist + +data class GetPlaylistDetailResponse( + val playlistId: Long, + val title: String, + val desc: String, + val createdDate: String, + val contentCount: Int, + val playlistCoverImageList: List, + val contentList: List +)