포스트 수정/삭제 기능

Sol's·2023년 1월 11일

프로젝트

목록 보기
12/16

이제 특정 포스트를 조회하는 기능을 만들어 보자.

포스트 수정삭제 기능

Controller

//게시글 수정
    @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()));
    }

Dto

@Getter
@AllArgsConstructor
public class PostResponse {
    private String message;
    private Long postId;

    public static PostResponse of(String message, Long postId) {
        return new PostResponse(message, postId);
    }

Service

	/**
     *게시글 수정
     */
    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);
    }

Repositoy

public interface PostRepository extends JpaRepository<Post, Long> {
}

이제 수정/삭제를 할 수 있다.
Swagger를 통해 확인해 보자.

  • 수정

  • 삭제

profile
배우고, 생각하고, 행동해라

0개의 댓글