1. 댓글 삭제 API

게시글에 있는 댓글을 삭제하는 API이다.

우선 HttpServletRequest에서 userNumber(사용자 고유번호)를 추출하고,
삭제하고자 하는 댓글의 고유번호(commentId)를 사용해서,

댓글을 작성한 사용자가 맞는지 확인하고,
해당 댓글의 고유번호를 입력하면,
댓글 DB테이블에서 해당 데이터를 삭제하는 API이다.

.
.
.
하지만 고민이 있다.
이것은 본인이 작성한 댓글은 본인이 삭제할 수 있지만,
다음과 같은 경우에는 문제가 있을 것 같다.

해당 댓글이 달린 게시글을 작성한 User 와 Admin은 위 API로 댓글 삭제가 불가능하다.

그럼 어떻게 해야 할까....


다음 DB 테이블을 보면, 입력받은 commentID를 통해서 our_news테이블에서 해당 게시글을 작성한 Author를 확인할 수 있다.

서비스 단에서 해당 사용자가 게시글의 Author인것을 확인하면, 삭제를 상인하는 API를 만들 수 있겠다.
(*이건 추후 Ver.2때 디벨롭 하자.)

하지만 Admin은 어떻게 삭제할 수 있을까.
Admin용 슈퍼 API를 따로 만드는 것 말고는 생각이 나지 않는다.

뭐가 있을까 뭐가 있을까 뭐가 있을까!!!!!

2. Trouble Solving

우선 지금 구현한 delete api는 굉장히 쉽기 떄문에 어려움과 오류 없이 5분만에 개발을 완료했다.

3. 구현

3.1 Controller

  /**
     * 댓글 삭제 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

를 똑바로 입력했다.

3.2 Service

3.2.1 Interface

/**
     * 댓글 삭제 메서드
     * @param request 사용자 요청
     * @param commentId 삭제하고자 하는 댓글의 고유번호
     */
    void deleteComment(HttpServletRequest request, Long commentId);

3.2.2 Implements

 /**
     * 댓글 삭제 메서드
     * @param request 사용자 요청
     * @param commentId 삭제하고자 하는 댓글의 고유번호
     */
    @Override
    public void deleteComment(HttpServletRequest request, Long commentId) {

        /* 사용자 고유 번호 추출 */
        Long userNumber = jwtService.extractUserNumberFromRequest(request);

        /* 댓글 삭제 */
        ourNewsMapper.deleteComment(userNumber,commentId);

    }

사용자의 고유번호와 삭제하고자 하는 표적 댓글 고유번호를 Mapper로 넘긴다.

3.3 Mapper

3.3.1 mapper

/**
     * 댓글 삭제
     * @param userNumber 사용자 고유 번호
     * @param commentId 삭제하고자 하는 댓글의 고유번호
     */
    void deleteComment(@Param("userNumber") Long userNumber,
                       @Param("commentId")Long commentId);

3.3.2 xml

<!-- 댓글 삭제 -->
    <delete id="deleteComment">
        DELETE

        FROM
            our_news_comment
        WHERE
            userNumber = #{userNumber} AND commentId =#{commentId}
    </delete>

해당 댓글의 작성자가 맞는지 확인하고, 해당 표적 댓글을 삭제한다.

4. 결과

200ok + 댓글 삭제 성공 메시지

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

profile
내가 있는 그 조직에서 가장 성실하기만 하자

0개의 댓글