From 3093d2159d87ecd9139b83b094fef7e6eae89ebc Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 27 Nov 2024 19:09:18 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=83=81=EC=84=B8=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AudioContentPlaylistController.kt | 10 +++++++ .../playlist/AudioContentPlaylistService.kt | 29 +++++++++++++++++++ .../playlist/GetPlaylistDetailResponse.kt | 11 +++++++ 3 files changed, 50 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/GetPlaylistDetailResponse.kt 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 +)