Skip to content

Commit 29715b5

Browse files
committed
feat(PlaylistController): 곡 상세 정보 조회용 API 추가
1 parent a657e83 commit 29715b5

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

main-server/src/main/java/com/example/demo/domain/playlist/controller/PlaylistController.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,28 @@ public class PlaylistController {
3232
private final PlaylistService playlistService;
3333

3434
@Operation(
35-
summary = "플레이리스트 상세 조회 + 재생 기록 저장",
36-
description = "플레이리스트 상세를 조회하면서 동시에 재생 기록을 저장합니다."
35+
summary = "플레이리스트 재생",
36+
description = "플레이리스트 상세 정보를 조회하면서 동시에 재생 기록을 저장합니다."
37+
)
38+
@ApiResponse(
39+
responseCode = "200",
40+
description = "플레이리스트 상세 정보",
41+
content = @Content(schema = @Schema(implementation = MainPlaylistDetailResponse.class))
42+
)
43+
@PostMapping("/{playlistId}/")
44+
public ResponseEntity<MainPlaylistDetailResponse> playPlaylist(
45+
@Parameter(description = "플레이리스트 ID", example = "101")
46+
@PathVariable Long playlistId,
47+
@Parameter(hidden = true)
48+
@AuthenticationPrincipal CustomUserDetails user
49+
) {
50+
MainPlaylistDetailResponse response = playlistService.playPlaylist(playlistId, user.getId());
51+
return ResponseEntity.ok(response);
52+
}
53+
54+
@Operation(
55+
summary = "플레이리스트 상세 정보 조회",
56+
description = "플레이리스트 상세 정보를 조회합니다"
3757
)
3858
@ApiResponse(
3959
responseCode = "200",

main-server/src/main/java/com/example/demo/domain/playlist/service/PlaylistService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
public interface PlaylistService {
1111

12+
MainPlaylistDetailResponse playPlaylist(Long playlistId, String userId);
13+
1214
MainPlaylistDetailResponse getPlaylistDetail(Long playlistId, String userId);
1315

1416
PlaylistWithSongsResponse saveFinalPlaylistWithSongsAndCd(String usersId, PlaylistCreateRequest request, List<CdItemRequest> cdItemRequestList);

main-server/src/main/java/com/example/demo/domain/playlist/service/PlaylistServiceImpl.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class PlaylistServiceImpl implements PlaylistService {
4141

4242
@Override
4343
@Transactional
44-
public MainPlaylistDetailResponse getPlaylistDetail(Long playlistId, String userId) {
44+
public MainPlaylistDetailResponse playPlaylist(Long playlistId, String userId) {
4545
Playlist playlist = playlistRepository.findById(playlistId)
4646
.filter(Playlist::isPublic)
4747
.orElseThrow(() -> new PlaylistException("플레이리스트가 없거나 비공개 상태입니다.", PlaylistErrorCode.PLAYLIST_NOT_FOUND));
@@ -59,6 +59,23 @@ public MainPlaylistDetailResponse getPlaylistDetail(Long playlistId, String user
5959
return MainPlaylistDetailResponse.from(playlist, songDtos, cdResponse);
6060
}
6161

62+
@Override
63+
@Transactional
64+
public MainPlaylistDetailResponse getPlaylistDetail(Long playlistId, String userId) {
65+
Playlist playlist = playlistRepository.findById(playlistId)
66+
.filter(Playlist::isPublic)
67+
.orElseThrow(() -> new PlaylistException("플레이리스트가 없거나 비공개 상태입니다.", PlaylistErrorCode.PLAYLIST_NOT_FOUND));
68+
69+
Users user = userRepository.findById(userId)
70+
.orElseThrow(() -> new UserException(UserErrorCode.USER_NOT_FOUND));
71+
72+
List<Song> songs = songRepository.findSongsByPlaylistId(playlist.getId());
73+
List<SongDto> songDtos = songs.stream().map(SongDto::from).toList();
74+
75+
var cdResponse = cdService.getOnlyCdByPlaylistId(playlistId);
76+
return MainPlaylistDetailResponse.from(playlist, songDtos, cdResponse);
77+
}
78+
6279
@Override
6380
@Transactional
6481
public PlaylistWithSongsResponse saveFinalPlaylistWithSongsAndCd(String usersId, PlaylistCreateRequest request,

0 commit comments

Comments
 (0)