From c11c13121cfc5e20c7abfe3b791d41b8de1d0ba6 Mon Sep 17 00:00:00 2001 From: dgh06175 Date: Sat, 21 Sep 2024 16:34:06 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20#44=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=97=90=20=ED=8A=B8=EB=9E=99=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 --- .../playlist/service/PlaylistServiceImpl.java | 27 +++++++++++++++++-- .../errorCode/PlaylistErrorCode.java | 5 ++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/cabin/plat/domain/playlist/service/PlaylistServiceImpl.java b/src/main/java/com/cabin/plat/domain/playlist/service/PlaylistServiceImpl.java index a7f5040..f41aa4f 100644 --- a/src/main/java/com/cabin/plat/domain/playlist/service/PlaylistServiceImpl.java +++ b/src/main/java/com/cabin/plat/domain/playlist/service/PlaylistServiceImpl.java @@ -63,6 +63,7 @@ public PlaylistResponse.Playlists getPlaylists(Member member, int page, int size // TODO: 효율 개선 List playlists = playlistRepository.findAllByMember(member, pageable).getContent(); List playlistInfos = playlists.stream().map(playlist -> { + // TODO: playlist.getPlaylistTracks 를 가져오기 List playlistTracks = playlistTrackRepository.findAllByPlaylistIs(playlist); return playlistMapper.toPlaylistInfo(playlist, playlistTracks); }).toList(); @@ -77,6 +78,7 @@ public PlaylistResponse.Playlists getSearchedPlaylists(Member member, String tit List playlists = playlistRepository.findAllByMemberAndTitleContaining(member, title, pageable).getContent(); List playlistInfos = playlists.stream().map(playlist -> { + // TODO: playlist.getPlaylistTracks 를 가져오기 List playlistTracks = playlistTrackRepository.findAllByPlaylistIs(playlist); return playlistMapper.toPlaylistInfo(playlist, playlistTracks); }).toList(); @@ -96,6 +98,7 @@ public PlaylistResponse.PlayListId deletePlaylist(Member member, Long playlistId @Override public PlaylistResponse.PlaylistDetail getPlaylistDetail(Member member, Long playlistId) { Playlist playlist = findPlaylistById(playlistId); + // TODO: playlist.getPlaylistTracks 를 가져오기 List playlistTracks = playlistTrackRepository.findAllByPlaylistIs(playlist); List trackDetailOrders = playlistTracks.stream() .map(playlistTrack -> { @@ -108,12 +111,32 @@ public PlaylistResponse.PlaylistDetail getPlaylistDetail(Member member, Long pla @Override public PlaylistResponse.PlayListId updatePlaylist(Member member, Long playlistId, PlaylistRequest.PlaylistUpload playlistUpload) { - return null; + Playlist playlist = findPlaylistById(playlistId); + if (!playlist.getMember().equals(member)) { + throw new RestApiException(PlaylistErrorCode.PLAYLIST_UPDATE_FORBIDDEN); + } + // TODO: 플레이리스트 업데이트 + return playlistMapper.toPlaylistId(playlistId); } @Override public PlaylistResponse.PlayListId addTrackToPlaylist(Member member, Long playlistId, PlaylistRequest.TrackId trackId) { - return null; + Playlist playlist = findPlaylistById(playlistId); + Track track = findTrackById(trackId.getTrackId()); + if (!playlist.getMember().equals(member)) { + throw new RestApiException(PlaylistErrorCode.PLAYLIST_UPDATE_FORBIDDEN); + } + + // TODO: playlist.getPlaylistTracks 를 가져와서 orderIndex 계산 + List playlistTracks = playlistTrackRepository.findAllByPlaylistIs(playlist); + int nextOrderIndex = playlistTracks.isEmpty() ? 0 : playlistTracks.stream() + .mapToInt(PlaylistTrack::getOrderIndex) + .max() + .orElse(0) + 1; + + PlaylistTrack playlistTrack = playlistMapper.toPlaylistTrack(playlist, track, nextOrderIndex); + playlistTrackRepository.save(playlistTrack); + return playlistMapper.toPlaylistId(playlistId); } private Track findTrackById(Long trackId) { diff --git a/src/main/java/com/cabin/plat/global/exception/errorCode/PlaylistErrorCode.java b/src/main/java/com/cabin/plat/global/exception/errorCode/PlaylistErrorCode.java index 32d44cf..6acf06d 100644 --- a/src/main/java/com/cabin/plat/global/exception/errorCode/PlaylistErrorCode.java +++ b/src/main/java/com/cabin/plat/global/exception/errorCode/PlaylistErrorCode.java @@ -9,8 +9,9 @@ public enum PlaylistErrorCode implements ErrorCodeInterface{ PLAYLIST_NOT_FOUND("PLAYLIST001", "Playlist가 존재하지 않습니다.", HttpStatus.NOT_FOUND), PLAYLIST_DELETE_FORBIDDEN("PLAYLIST002", "이 플레이리스트를 삭제할 권한이 없습니다.", HttpStatus.FORBIDDEN), - PLAYLIST_TRACK_NOT_FOUND("PLAYLIST003", "플레이리스트에 해당 트랙이 존재하지 않습니다.", HttpStatus.NOT_FOUND), - PLAYLIST_TRACK_DELETE_FORBIDDEN("PLAYLIST004", "이 플레이리스트의 트랙을 삭제할 권한이 없습니다.", HttpStatus.FORBIDDEN), + PLAYLIST_UPDATE_FORBIDDEN("PLAYLIST003", "이 플레이리스트를 업데이트할 권한이 없습니다.", HttpStatus.FORBIDDEN), + PLAYLIST_TRACK_NOT_FOUND("PLAYLIST004", "플레이리스트에 해당 트랙이 존재하지 않습니다.", HttpStatus.NOT_FOUND), + PLAYLIST_TRACK_DELETE_FORBIDDEN("PLAYLIST005", "이 플레이리스트의 트랙을 삭제할 권한이 없습니다.", HttpStatus.FORBIDDEN), ; private final String code;