SpringBoot 프로젝트

Spring Boot - 리뷰 CRUD기능 구현하기 (4)

orin602 2024. 11. 19. 15:14

삭제 버튼 추가 (reviewDetail.html)

<button class="delete-btn" type="button" onclick="delete_review()">리뷰 삭제</button> 클릭 시 호출할 함수 작성

review.js > delete_review() 함수 추가

	var writer = /*[[${review.member.id}]]*/ '';
	var viewer = /*[[${loginUser.id}]]*/ '';
	var review_seq = /*[[${review.review_seq}]]*/ 0;

function delete_review() {
    // 작성자와 현재 로그인한 사용자가 동일한지 확인
    if (writer === viewer) {
        swal.fire({
            title: '정말로 삭제하시겠습니까?',
            text: '삭제된 리뷰는 복구할 수 없습니다.',
            icon: 'warning',
            showCancelButton: true, // 취소 버튼 추가
            confirmButtonText: '삭제',
            cancelButtonText: '취소'
        }).then((result) => {
            if (result.isConfirmed) {
                // 리뷰 삭제를 위한 URL로 이동 (GET 방식으로 전달)
                window.location.href = '/delete?review_seq=' + review_seq;
            }
        });
    } else {
        swal.fire({
            title: '리뷰 삭제 실패',
            icon: 'warning',
            text: '작성자만 삭제 가능합니다.',
            confirmButtonText: '확인'
        });
    }
}

삭제 버튼 클릭 시

URL 매핑 및 삭제 처리 - Controller

@GetMapping("/delete")
	public String deleteReview(@RequestParam("review_seq") int review_seq, HttpSession session, Model model) {
	    Member loginUser = (Member) session.getAttribute("loginUser");
	    Review review = reviewService.getReviewBySeq(review_seq);
	    
	    // 로그인 상태 확인
	    if (loginUser == null) {
	        model.addAttribute("message", "로그인 페이지로 이동");
	        model.addAttribute("text", "리뷰 삭제를 위해 로그인해주세요.");
	        model.addAttribute("messageType", "info");
	        return "login/login"; // 로그인 페이지로 이동
	    }

	    // 작성자 확인
	    if (!review.getMember().getId().equals(loginUser.getId())) {
	        model.addAttribute("message", "삭제 불가");
	        model.addAttribute("text", "작성자만 리뷰를 삭제할 수 있습니다.");
	        model.addAttribute("messageType", "error");
	        return "redirect:/review"; // 리뷰 목록 페이지로 이동
	    }
	    
	    // 리뷰 삭제 처리
	    reviewService.deleteReview(review);
	    
	    // 리뷰 삭제 후 목록으로 리다이렉트
	    return "redirect:/review"; // 리뷰 목록 페이지로 이동
	}

@RequestParam("review_seq") int review_seq 함수를 통해 전달받은 review_seq를 파라미터로 받아온다.

Review review = reviewService.getReviewBySeq(review_seq); review_seq를 이용해 삭제할 리뷰 객체를 찾아옵니다.

reviewService.deleteReview(review); 는 review 객체를 기반으로 실제 삭제를 처리합니다.

 

db에서 삭제된 모습