게시글에 있는 댓글을 삭제하는 API이다.
우선 HttpServletRequest에서 userNumber(사용자 고유번호)를 추출하고,
삭제하고자 하는 댓글의 고유번호(commentId)를 사용해서,
댓글을 작성한 사용자가 맞는지 확인하고,
해당 댓글의 고유번호를 입력하면,
댓글 DB테이블에서 해당 데이터를 삭제하는 API이다.
.
.
.
하지만 고민이 있다.
이것은 본인이 작성한 댓글은 본인이 삭제할 수 있지만,
다음과 같은 경우에는 문제가 있을 것 같다.
그럼 어떻게 해야 할까....

다음 DB 테이블을 보면, 입력받은 commentID를 통해서 our_news테이블에서 해당 게시글을 작성한 Author를 확인할 수 있다.
서비스 단에서 해당 사용자가 게시글의 Author인것을 확인하면, 삭제를 상인하는 API를 만들 수 있겠다.
(*이건 추후 Ver.2때 디벨롭 하자.)
하지만 Admin은 어떻게 삭제할 수 있을까.
Admin용 슈퍼 API를 따로 만드는 것 말고는 생각이 나지 않는다.
뭐가 있을까 뭐가 있을까 뭐가 있을까!!!!!
우선 지금 구현한 delete api는 굉장히 쉽기 떄문에 어려움과 오류 없이 5분만에 개발을 완료했다.
/**
* 댓글 삭제 API
* @param request 사용자 요청
* @param commentId 삭제하고자 하는 댓글의 고유번호
* @return 삭제 성공 메시지
*/
@Operation(summary = "댓글 삭제 API",description = "")
@DeleteMapping("/comment/{commentId}")
public ResponseEntity<String> deleteComment(HttpServletRequest request,
@PathVariable("commentId") Long commentId){
/* 댓글 삭제 */
ourNewsService.deleteComment(request,commentId);
return ResponseEntity.ok("댓글 삭제 성공");
}
이번에는 실수하지 않고,
@PathVariable("commentId") Long commentId
를 똑바로 입력했다.
/**
* 댓글 삭제 메서드
* @param request 사용자 요청
* @param commentId 삭제하고자 하는 댓글의 고유번호
*/
void deleteComment(HttpServletRequest request, Long commentId);
/**
* 댓글 삭제 메서드
* @param request 사용자 요청
* @param commentId 삭제하고자 하는 댓글의 고유번호
*/
@Override
public void deleteComment(HttpServletRequest request, Long commentId) {
/* 사용자 고유 번호 추출 */
Long userNumber = jwtService.extractUserNumberFromRequest(request);
/* 댓글 삭제 */
ourNewsMapper.deleteComment(userNumber,commentId);
}
사용자의 고유번호와 삭제하고자 하는 표적 댓글 고유번호를 Mapper로 넘긴다.
/**
* 댓글 삭제
* @param userNumber 사용자 고유 번호
* @param commentId 삭제하고자 하는 댓글의 고유번호
*/
void deleteComment(@Param("userNumber") Long userNumber,
@Param("commentId")Long commentId);
<!-- 댓글 삭제 -->
<delete id="deleteComment">
DELETE
FROM
our_news_comment
WHERE
userNumber = #{userNumber} AND commentId =#{commentId}
</delete>
해당 댓글의 작성자가 맞는지 확인하고, 해당 표적 댓글을 삭제한다.
200ok + 댓글 삭제 성공 메시지

DB에서 1번 게시글의 삭제 완료
