게시글 삭제

1. 게시글 삭제

BoardRepository 에서 게시글 삭제 쿼리를 만들어 보자.
JPA  API , JPQL 객체 지향 쿼리 작성 (삭제 권한)
/**
 * 게시글 삭제하기
 * @param id
 */
// DELETE JPA API 메서드를 활용(영속성 컨텍트), JPQL --> QDSL ... namedQuery ...
@Transactional
public void deleteById(int id) {
    Query jpql = em.createQuery("DELETE FROM Board b WHERE b.id = :id");
    jpql.setParameter("id", id);
    jpql.executeUpdate();
}

/**
 * JPA API 활용
 */
// DELETE JPA API 메서드를 활용(영속성 컨텍트), JPQL --> QDSL ... namedQuery ...
@Transactional
public void deleteByIdWithAPI(int id) {
    em.remove(findById(id));
}

 

BoardController 에서 게시글 삭제 요청
// 게시글 삭제
// form 태그에서는 GET, POST 방식만 지원
@PostMapping("/board/{id}/delete") // form 활용이기 때문에 delete 선언
public String delete(@PathVariable(name = "id") Integer id, HttpServletRequest request) {
    // 유효성, 인증검사
    // 세션에서 로그인 사용자 정보 가져오기 -> 인증, 인가(권한)
    User sessionUser = (User) session.getAttribute("sessionUser");
    if (sessionUser == null) {
        return "redirect:/login-form";
    }

    // 권한 체크
    Board board = boardRepository.findById(id);
    if (board == null) {
        return "redirect:/error-404";
    }

    if (!board.getUser().getId().equals(sessionUser.getId())) {
        return "redirect:/error-403";
    }
    boardRepository.deleteByIdWithAPI(id);
    return "redirect:/";
}

 

detail.mustache
<!-- 수정, 삭제버튼 -->
{{#authUser}}

    <div class="d-flex justify-content-end">

        <a href="/board/{{board.id}}/update-form" class="btn btn-warning me-1">수정</a>
        <form action="/board/{{board.id}}/delete" method="post">
            <button class="btn btn-danger">삭제</button>
        </form>
    </div>
{{/authUser}}

목차로 돌아가기

 

'Spring Boot > Blog 프로젝트 만들기(JPA)' 카테고리의 다른 글

회원 가입  (0) 2024.10.10
게시글 수정  (0) 2024.10.10
게시글 쓰기  (0) 2024.10.08
로그인 & 로그아웃 구현하기  (0) 2024.10.08
게시글 목록보기 (Post List View)  (1) 2024.10.08