Skip to content

Commit 22b57c7

Browse files
authored
Merge pull request #155 from dnd-side-project/dev
feat(PlaylistController): ๊ณก ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ์šฉ API ์ถ”๊ฐ€
2 parents 3ed62fe + e1838a1 commit 22b57c7

File tree

6 files changed

+57
-13
lines changed

6 files changed

+57
-13
lines changed

โ€Žmain-server/src/main/java/com/example/demo/domain/like/repository/LikesRepositoryCustomImpl.javaโ€Ž

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ public List<Playlist> findLikedPlaylistsWithMeta(String userId,
3636
.join(l).on(l.playlist.id.eq(p.id))
3737
.join(p.users, u).fetchJoin()
3838
.where(
39-
l.users.id.eq(userId),
40-
p.isPublic.isTrue()
39+
l.users.id.eq(userId)
4140
)
4241
.orderBy(order)
4342
.limit(limit)

โ€Ž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/dto/playlistdto/PlaylistResponse.javaโ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ public record PlaylistResponse(
1515
@Schema(description = "ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ์ด๋ฆ„", example = "์—ฌ๋ฆ„ ๋“œ๋ผ์ด๋ธŒ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ")
1616
String playlistName,
1717

18+
@Schema(description = "ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ์ œ์ž‘์ž ์ด๋ฆ„", example = "์—ฌ๋ฆ„ ๋“œ๋ผ์ด๋ธŒ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ")
19+
String creatorNickname,
20+
1821
@Schema(description = "ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ๊ณต๊ฐœ ์—ฌ๋ถ€", example = "true")
1922
boolean isPublic,
2023

@@ -26,6 +29,7 @@ public static PlaylistResponse from(Playlist playlist, CdResponse cd) {
2629
return PlaylistResponse.builder()
2730
.playlistId(playlist.getId())
2831
.playlistName(playlist.getName())
32+
.creatorNickname(playlist.getUsers().getUsername())
2933
.isPublic(playlist.isPublic())
3034
.cdResponse(cd)
3135
.build();

โ€Žmain-server/src/main/java/com/example/demo/domain/playlist/repository/PlaylistRepository.javaโ€Ž

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@
1111
public interface PlaylistRepository extends JpaRepository<Playlist, Long>, PlaylistRepositoryCustom {
1212

1313
@Query("""
14-
SELECT p FROM Playlist p
15-
WHERE p.users.id = :userId
16-
AND p.isPublic = true
17-
ORDER BY p.visitCount DESC
14+
SELECT p
15+
FROM Playlist p
16+
JOIN FETCH p.users u
17+
WHERE u.id = :userId
18+
ORDER BY p.visitCount DESC
1819
""")
1920
List<Playlist> findByUserIdPopular(@Param("userId") String userId);
2021

2122
@Query("""
22-
SELECT p FROM Playlist p
23-
WHERE p.users.id = :userId
24-
AND p.isPublic = true
25-
ORDER BY p.id DESC
23+
SELECT p
24+
FROM Playlist p
25+
JOIN FETCH p.users u
26+
WHERE u.id = :userId
27+
ORDER BY p.id DESC
2628
""")
2729
List<Playlist> findByUserIdRecent(@Param("userId") String userId);
2830

โ€Ž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)