[댓글] 댓글 삭제

2023. 1. 28. 13:01프로젝트/라이프 챌린지

728x90
SMALL

댓글 삭제 api를 만들자

 


CommentController

// 댓글 삭제
@DeleteMapping("/comment/delete/{comment_id}")
public ResponseEntity<ResponseBody> commentDelete(HttpServletRequest request,@PathVariable Long comment_id){
    log.info("댓글 삭제 - 댓글 삭제 유저 : {}, 삭제될 댓글 id : {}", jwtTokenProvider.getMemberFromAuthentication().getNickname(), comment_id);

    return commentService.commentDelete(request, comment_id);
}

댓글 삭제 api를 만들어준다.

  • 삭제 작업이 이루어질 것이기 때문에 DeleteMapping  타입 메소드로 만들어준다.
  • 인자값은 토큰이 저장될 HttpServletRequest, @PathVariable로 메소들 주소로 직접 넘겨받은 Comment id 가 될 것이다.

 

 

 

CommentService

// 댓글 삭제
@Transactional
public ResponseEntity<ResponseBody> commentDelete(HttpServletRequest request, Long comment_id){

    // 유저 검증
    Member auth_member = checkAuthentication(request);

    // 댓글 작성자가 아니라면 댓글을 삭제할 수 없음.
    if(queryFactory
            .selectFrom(comment)
            .where(comment.comment_id.eq(comment_id).and(comment.nickname.eq(auth_member.getNickname())))
            .fetchOne() == null){
        return new ResponseEntity<>(new ResponseBody(StatusCode.NOT_MATCH_COMMENT_WRITER.getStatusCode(), StatusCode.NOT_MATCH_COMMENT_WRITER.getStatus(), null), HttpStatus.BAD_REQUEST);
    }

    // 댓글 삭제 처리
    queryFactory
            .delete(comment)
            .where(comment.comment_id.eq(comment_id))
            .execute();

    return new ResponseEntity<>(new ResponseBody(StatusCode.OK.getStatusCode(), StatusCode.OK.getStatus(), "댓글이 삭제 되었습니다."), HttpStatus.OK);
}

댓글이 삭제될 Service 로직 수행 메소드이다.

  • checkAuthentication(request) 로 검증된 Member 객체를 받아온다.
  • 만약 삭제하고자하는 댓글이 현 유저가 작성한 댓글이 아니라면 삭제될 수 없도록 에러 처리를 해준다.
  • 작성자가 맞다면 Delete문을 사용하여 삭제를 진행해준다.
  • 삭제가 정상적으로 진행이 되었다면 "댓글이 삭제 되었습니다." 라는 문구가 나올 수 있도록 한다.

 

 

포스트맨으로 확인해보자.

# 댓글 삭제

댓글이 정상적으로 삭제된 것을 확인할 수 있다.

(Header에 토큰 필요!)

728x90
반응형
LIST