From 4097e5a13318bee58e926dfd09f0d169acf85bc3 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 27 Nov 2024 19:31:59 +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=EC=97=90=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=BD=98=ED=85=90=EC=B8=A0ID=EC=97=90=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=EC=88=9C=EC=84=9C=20=EA=B0=92=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?-=20=EC=9D=B4=EC=9C=A0:=20=ED=94=8C=EB=A0=88=EC=9D=B4=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=97=90=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=BD=98=ED=85=90=EC=B8=A0ID=EC=97=90?= =?UTF-8?q?=EB=8A=94=20=EC=88=9C=EC=84=9C=EA=B0=80=20=EC=9E=88=EC=A7=80?= =?UTF-8?q?=EB=A7=8C=20=ED=95=B4=EB=8B=B9=20=EA=B0=92=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=ED=95=9C=20=EC=BD=98=ED=85=90=EC=B8=A0=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EB=82=B4=EC=9A=A9=EC=9D=98=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=EC=9D=B4=20=EC=BD=98=ED=85=90=EC=B8=A0ID=EA=B0=80=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=EB=90=9C=20=EC=88=9C=EC=84=9C=EB=8C=80?= =?UTF-8?q?=EB=A1=9C=20=EB=82=98=EC=98=A8=EB=8B=A4=EB=8A=94=20=EB=B3=B4?= =?UTF-8?q?=EC=9E=A5=EC=9D=B4=20=EC=97=86=EC=9D=8C,=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=9C=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EC=9D=98=20=EC=A0=95=EB=A0=AC=EC=9D=84=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/playlist/AudioContentPlaylist.kt | 2 +- .../playlist/AudioContentPlaylistService.kt | 32 ++++++++++++------- .../content/playlist/CreatePlaylistRequest.kt | 2 +- .../playlist/PlaylistContentIdAndOrder.kt | 6 ++++ .../content/playlist/UpdatePlaylistRequest.kt | 2 +- 5 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt index aac2ee7..d9dd2ec 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt @@ -15,7 +15,7 @@ data class AudioContentPlaylist( val memberId: Long, var title: String, var desc: String? = null, - var contentIdList: List, + var contentIdAndOrderList: List, // ISO 8601 형식의 String private val _createdAt: String = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 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 550e366..4bc76ce 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 @@ -18,7 +18,7 @@ class AudioContentPlaylistService( private val redisRepository: AudioContentPlaylistRedisRepository ) { fun createPlaylist(request: CreatePlaylistRequest, member: Member) { - if (request.contentIdList.size >= 30) { + if (request.contentIdAndOrderList.size >= 30) { throw SodaException("플레이 리스트에는 최대 30개의 콘텐츠를 저장할 수 있습니다.") } @@ -29,7 +29,7 @@ class AudioContentPlaylistService( // 콘텐츠 유효성 검사 (소장으로 구매한 콘텐츠 인가?) checkOrderedContent( - contentIdList = request.contentIdList, + contentIdList = request.contentIdAndOrderList.map { it.contentId }, memberId = member.id!! ) @@ -38,7 +38,7 @@ class AudioContentPlaylistService( memberId = member.id!!, title = request.title, desc = request.desc, - contentIdList = request.contentIdList + contentIdAndOrderList = request.contentIdAndOrderList ) redisRepository.save(playlist) @@ -55,7 +55,7 @@ class AudioContentPlaylistService( } fun updatePlaylist(playlistId: Long, request: UpdatePlaylistRequest, member: Member) { - if (request.contentIdList.size >= 30) { + if (request.contentIdAndOrderList.size >= 30) { throw SodaException("플레이 리스트에는 최대 30개의 콘텐츠를 저장할 수 있습니다.") } @@ -67,14 +67,14 @@ class AudioContentPlaylistService( } checkOrderedContent( - contentIdList = request.contentIdList, + contentIdList = request.contentIdAndOrderList.map { it.contentId }, memberId = member.id!! ) val updatePlaylist = playlist.copy( title = request.title ?: playlist.title, desc = request.desc ?: playlist.desc, - contentIdList = request.contentIdList + contentIdAndOrderList = request.contentIdAndOrderList ) redisRepository.save(updatePlaylist) @@ -86,9 +86,9 @@ class AudioContentPlaylistService( return GetPlaylistsResponse( totalCount = playlists.size, items = playlists.map { - val contentCount = it.contentIdList.size + val contentCount = it.contentIdAndOrderList.size val coverImageUrl = if (contentCount > 0) { - audioContentRepository.getCoverImageById(id = it.contentIdList[0]) + audioContentRepository.getCoverImageById(id = it.contentIdAndOrderList[0].contentId) ?: "" } else { "" @@ -129,16 +129,24 @@ class AudioContentPlaylistService( .withZoneSameInstant(ZoneId.of("Asia/Seoul")) .format(dateTimeFormatter) - val contentList = audioContentRepository.fetchContentForPlaylist(contentIdList = playlist.contentIdList) + val contentList = audioContentRepository.fetchContentForPlaylist( + contentIdList = playlist.contentIdAndOrderList.map { it.contentId } + ) + + val orderMap = playlist.contentIdAndOrderList.sortedBy { it.order } + .mapIndexed { index, item -> item.contentId to index } + .toMap() + + val sortedContentList = contentList.sortedBy { orderMap[it.id] } 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 + contentCount = sortedContentList.size, + playlistCoverImageList = sortedContentList.take(4).map { it.coverUrl }, + contentList = sortedContentList ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt index 914cb90..1cdc09e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/CreatePlaylistRequest.kt @@ -3,5 +3,5 @@ package kr.co.vividnext.sodalive.content.playlist data class CreatePlaylistRequest( val title: String, val desc: String? = null, - val contentIdList: List = emptyList() + val contentIdAndOrderList: List = emptyList() ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt new file mode 100644 index 0000000..2e0d558 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/PlaylistContentIdAndOrder.kt @@ -0,0 +1,6 @@ +package kr.co.vividnext.sodalive.content.playlist + +data class PlaylistContentIdAndOrder( + val contentId: Long, + val order: Int +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt index 2fd2300..2c739c1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/UpdatePlaylistRequest.kt @@ -3,5 +3,5 @@ package kr.co.vividnext.sodalive.content.playlist data class UpdatePlaylistRequest( val title: String? = null, val desc: String? = null, - val contentIdList: List = emptyList() + val contentIdAndOrderList: List = emptyList() )