이제 특정 포스트를 조회하는 기능을 만들어 보자.
//게시글 수정
@ApiOperation(value = "게시글 수정기능",notes = "로그인 한 사용자가 title,body 값으로 게시글 수정")
@PutMapping("/{id}")
public Response<PostResponse> modify(@PathVariable Long id, @RequestBody PostRequest postRequest, Authentication authentication) {
return Response.success(postService.modify(id, postRequest, authentication.getName()));
}
//게시글 삭제
@ApiOperation(value = "게시글 삭제기능")
@DeleteMapping("/{id}")
public Response<PostResponse> delete(@PathVariable Long id, Authentication authentication) {
return Response.success(postService.delete(id, authentication.getName()));
}
@Getter
@AllArgsConstructor
public class PostResponse {
private String message;
private Long postId;
public static PostResponse of(String message, Long postId) {
return new PostResponse(message, postId);
}
/**
*게시글 수정
*/
public PostResponse modify(Long id, PostRequest dto, String userName) {
//게시글 작성자 꺼내기
User postUser = userRepository.findByUserName(userName).
orElseThrow(() -> new AppException(ErrorCode.USERNAME_NOT_FOUND, userName + "이 없습니다."));
//게시글 꺼내기
Post beforePost = postRepository.findById(id)
.orElseThrow(() -> new AppException(ErrorCode.POST_NOT_FOUND, id + "가 없습니다."));
//ADMIN이면 수정가능, USER라면 작성자가 맞는지 일치여부 확인
if(!(postUser.getRole() == UserRole.ROLE_ADMIN)) {
if (!postUser.getPosts().contains(beforePost)) {
throw new AppException(ErrorCode.INVALID_PERMISSION, "작성자가 일치하지 않습니다");
}
}
beforePost.setTitle(dto.getTitle());
beforePost.setBody(dto.getBody());
return PostResponse.of("포스트 수정 완료", id);
}
/**
*게시글 삭제
*/
public PostResponse delete(Long id, String userName) {
//게시글 작성자 꺼내기
User postUser = userRepository.findByUserName(userName).
orElseThrow(() -> new AppException(ErrorCode.USERNAME_NOT_FOUND, userName + "이 없습니다."));
//id 값으로 게시글 찾기
Post beforePost = postRepository.findById(id)
.orElseThrow(() -> new AppException(ErrorCode.POST_NOT_FOUND, id + "가 없습니다."));
if(!(postUser.getRole() == UserRole.ROLE_ADMIN)) {
if (!postUser.getPosts().contains(beforePost)) {
throw new AppException(ErrorCode.INVALID_PERMISSION, "작성자가 일치하지 않습니다");
}
}
// 게시글 삭제
postRepository.delete(beforePost);
return PostResponse.of("포스트 삭제 완료", id);
}
public interface PostRepository extends JpaRepository<Post, Long> {
}
이제 수정/삭제를 할 수 있다.
Swagger를 통해 확인해 보자.



