Skip to content

Commit

Permalink
Merge branch 'develop' into test
Browse files Browse the repository at this point in the history
  • Loading branch information
gerry-mandering committed May 3, 2024
2 parents 0fe7a38 + d1d5eb7 commit dcc5c6d
Show file tree
Hide file tree
Showing 12 changed files with 152 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@

@Slf4j
public class JwtVerifyFilter extends OncePerRequestFilter {
private static final String[] whitelist = {"/signUp", "/login" , "/refresh", "/tracks/**", "/playlists/**", "/tags/**", "/genres/**", "/search"};
private static final String[] whitelist = { "/signUp", "/login", "/refresh", "/tracks", "/tracks/**", "/playlists",
"/playlists/**", "/tags", "/tags/**", "/genres", "/genres/**", "/search" };

private static void checkAuthorizationHeader(String header) {
if(header == null) {
if (header == null) {
throw new CustomJwtException("토큰이 전달되지 않았습니다");
} else if (!header.startsWith(JwtConstants.JWT_TYPE)) {
throw new CustomJwtException("BEARER 로 시작하지 않는 올바르지 않은 토큰 형식입니다");
Expand All @@ -39,19 +40,19 @@ protected boolean shouldNotFilter(HttpServletRequest request) throws ServletExce
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {

String authHeader = request.getHeader(JwtConstants.JWT_HEADER);

try {
checkAuthorizationHeader(authHeader); // header 가 올바른 형식인지 체크
checkAuthorizationHeader(authHeader); // header 가 올바른 형식인지 체크
String token = JwtUtils.getTokenFromHeader(authHeader);
Authentication authentication = JwtUtils.getAuthentication(token);


SecurityContextHolder.getContext().setAuthentication(authentication);

filterChain.doFilter(request, response); // 다음 필터로 이동
filterChain.doFilter(request, response); // 다음 필터로 이동
} catch (Exception e) {
Gson gson = new Gson();
String json = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequiredArgsConstructor
@RequestMapping("/genres")
Expand All @@ -34,12 +33,14 @@ public class GenreController {
@Operation(summary = "장르별 곡 3개씩 가져오기")
public ResponseEntity<Page<GenreWithTracksOverviewResponseDto>> getGenresWithTracksOverview(
@PageableDefault(page = 0, size = 4, sort = "id", direction = Sort.Direction.ASC) Pageable pageable) {

return ResponseEntity.ok(genreService.getGenresWithTracksOverview(pageable));
}

@GetMapping("/list")
@Operation(summary = "모든 장르 리스트 가져오기")
public ResponseEntity<List<GenreResponseDto>> listAllGenres() {

return ResponseEntity.ok(genreService.listAllGenres());
}

Expand All @@ -48,7 +49,7 @@ public ResponseEntity<List<GenreResponseDto>> listAllGenres() {
public ResponseEntity<GenreWithTracksResponseDto> getGenreWithTracks(@PathVariable("genre_id") Long genreId,
@PageableDefault(page = 0, size = 30, sort = "id", direction = Sort.Direction.DESC) Pageable pageable,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {
Long userId = userDetailPrincipal.getUserId();
return ResponseEntity.ok(genreService.getGenreWithTracks(genreId, pageable, userId));

return ResponseEntity.ok(genreService.getGenreWithTracks(genreId, pageable, userDetailPrincipal.getUserId()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class GenreService {

@Transactional(readOnly = true)
public Page<GenreWithTracksOverviewResponseDto> getGenresWithTracksOverview(Pageable pageable) {

// 장르들 가져오기
Page<Genre> genres = genreRepository.findAll(pageable);

Expand All @@ -56,13 +57,15 @@ public Page<GenreWithTracksOverviewResponseDto> getGenresWithTracksOverview(Page

@Transactional(readOnly = true)
public List<GenreResponseDto> listAllGenres() {

return genreRepository.findAll().stream()
.map(genre -> GenreResponseDto.toDto(genre))
.collect(Collectors.toList());
}

@Transactional(readOnly = true)
public GenreWithTracksResponseDto getGenreWithTracks(Long genreId, Pageable pageable, Long userId) {

// genreId로 해당하는 장르 가져오기
Genre genre = genreRepository.findById(genreId)
.orElseThrow(() -> new IllegalArgumentException("Genre not found"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;


@RestController
@RequiredArgsConstructor
@RequestMapping("/playlists")
Expand All @@ -43,8 +42,11 @@ public class PlaylistController {
@PostMapping
@Operation(summary = "새 플레이리스트 생성")
public ResponseEntity<PlaylistResponseDto> createPlaylist(
@RequestBody CreatePlaylistRequestDto createPlaylistRequestDto) {
PlaylistResponseDto createPlaylistResponseDto = playlistService.createPlaylist(createPlaylistRequestDto);
@RequestBody CreatePlaylistRequestDto createPlaylistRequestDto,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

PlaylistResponseDto createPlaylistResponseDto = playlistService.createPlaylist(createPlaylistRequestDto,
userDetailPrincipal.getUserId());

// HTTP 201 Created 상태 코드와 함께 생성된 리소스의 URI를 반환
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
Expand All @@ -60,6 +62,7 @@ public ResponseEntity<PlaylistResponseDto> createPlaylist(
public ResponseEntity<Page<PlaylistWithTracksOverviewResponseDto>> getPlaylistsWithTracksOverview(
@ValidPlaylistType @RequestParam("type") String type,
@PageableDefault(page = 0, size = 6, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) {

return ResponseEntity.ok(playlistService.getPlaylistsWithTracksOverview(type, pageable));
}

Expand All @@ -69,50 +72,64 @@ public ResponseEntity<PlaylistWithTracksResponseDto> getPlaylistWithTracks(
@PathVariable("playlist_id") Long playlistId,
@PageableDefault(page = 0, size = 30, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {
Long userId = userDetailPrincipal.getUserId();
return ResponseEntity.ok(playlistService.getPlaylistWithTracks(playlistId, pageable, userId));

return ResponseEntity
.ok(playlistService.getPlaylistWithTracks(playlistId, pageable, userDetailPrincipal.getUserId()));
}

@PatchMapping("/{playlist_id}")
@Operation(summary = "특정 플레이리스트 이름 수정하기")
public ResponseEntity<PlaylistResponseDto> updatePlaylistName(
@PathVariable("playlist_id") Long playlistId,
@RequestBody UpdatePlaylistNameRequestDto updatePlaylistNameRequestDto) {
return ResponseEntity.ok(playlistService.updatePlaylistName(playlistId, updatePlaylistNameRequestDto));
@RequestBody UpdatePlaylistNameRequestDto updatePlaylistNameRequestDto,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

return ResponseEntity.ok(playlistService.updatePlaylistName(playlistId, updatePlaylistNameRequestDto,
userDetailPrincipal.getUserId()));
}

@DeleteMapping("/{playlist_id}")
@Operation(summary = "특정 플레이리스트 삭제하기")
public ResponseEntity<Void> deletePlaylist(@PathVariable("playlist_id") Long playlistId) {
playlistService.deletePlaylist(playlistId);
public ResponseEntity<Void> deletePlaylist(@PathVariable("playlist_id") Long playlistId,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

playlistService.deletePlaylist(playlistId, userDetailPrincipal.getUserId());
return ResponseEntity.noContent().build();
}

@PostMapping("/{playlist_id}/tracks")
@Operation(summary = "특정 플레이리스트에 곡 추가하기")
public ResponseEntity<Void> addTrackToPlaylist(@PathVariable("playlist_id") Long playlistId,
@RequestBody AddTrackToPlaylistRequestDto addTrackToPlaylistRequestDto) {
playlistService.addTrackToPlaylist(playlistId, addTrackToPlaylistRequestDto);
@RequestBody AddTrackToPlaylistRequestDto addTrackToPlaylistRequestDto,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

playlistService.addTrackToPlaylist(playlistId, addTrackToPlaylistRequestDto, userDetailPrincipal.getUserId());
return ResponseEntity.ok().build();
}

@DeleteMapping("/{playlist_id}/tracks/{track_id}")
@Operation(summary = "특정 플레이리스트의 곡 삭제하기")
public ResponseEntity<Void> deleteTrackFromPlaylist(@PathVariable("playlist_id") Long playlistId,
@PathVariable("track_id") Long trackId) {
playlistService.deleteTrackFromPlaylist(playlistId, trackId);
@PathVariable("track_id") Long trackId,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

playlistService.deleteTrackFromPlaylist(playlistId, trackId, userDetailPrincipal.getUserId());
return ResponseEntity.noContent().build();
}

@PostMapping("/{playlist_id}/follow")
public ResponseEntity<Void> followPlaylist(@PathVariable("playlist_id") Long playlistId) {
playlistService.followPlaylist(playlistId);
public ResponseEntity<Void> followPlaylist(@PathVariable("playlist_id") Long playlistId,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

playlistService.followPlaylist(playlistId, userDetailPrincipal.getUserId());
return ResponseEntity.ok().build();
}

@DeleteMapping("/{playlist_id}/follow")
public ResponseEntity<Void> unfollowPlaylist(@PathVariable("playlist_id") Long playlistId) {
playlistService.unfollowPlaylist(playlistId);
public ResponseEntity<Void> unfollowPlaylist(@PathVariable("playlist_id") Long playlistId,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

playlistService.unfollowPlaylist(playlistId, userDetailPrincipal.getUserId());
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,32 @@ public class PlaylistWithTracksResponseDto {

private Long playlistId;
private String playlistName;
private String ownerName;
private Boolean isPublic;
private Boolean isCurated;
private String ownerName;
private Boolean isOwner;
private Page<TrackResponseDto> tracks;

@Builder
public PlaylistWithTracksResponseDto(Long playlistId, String playlistName, Boolean isPublic, Boolean isCurated,
String ownerName, Page<TrackResponseDto> tracks) {
public PlaylistWithTracksResponseDto(Long playlistId, String playlistName, String ownerName, Boolean isPublic,
Boolean isCurated, Boolean isOwner, Page<TrackResponseDto> tracks) {
this.playlistId = playlistId;
this.playlistName = playlistName;
this.ownerName = ownerName;
this.isPublic = isPublic;
this.isCurated = isCurated;
this.ownerName = ownerName;
this.isOwner = isOwner;
this.tracks = tracks;
}

public static PlaylistWithTracksResponseDto toDto(Playlist playlist, Page<TrackResponseDto> tracks) {
public static PlaylistWithTracksResponseDto toDto(Playlist playlist, Page<TrackResponseDto> tracks, Boolean isOwner) {
return PlaylistWithTracksResponseDto.builder()
.playlistId(playlist.getId())
.playlistName(playlist.getPlaylistName())
.ownerName(playlist.getUser().getDisplayName())
.isPublic(playlist.getIsPublic())
.isCurated(playlist.getIsCurated())
.ownerName(playlist.getUser().getDisplayName())
.isOwner(isOwner)
.tracks(tracks)
.build();
}
Expand Down
Loading

0 comments on commit dcc5c6d

Please sign in to comment.