From 3d0366389622a5a5d7995322f129dfdb3f55635c Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Tue, 11 Mar 2025 10:33:37 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 3 ++- .../localhost/mapper/localbordMapper.java | 6 ++--- .../localhost/service/localbordService.java | 25 ++++++++++++++----- src/main/resources/mapper/localbordMapper.xml | 12 +++++---- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index e07cf66..b122932 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -296,9 +296,10 @@ public class BoardController { @Member @ParameterCheck @DeleteMapping("/comment/{commentId}") - public ApiResponse deleteComment(@PathVariable("commentId") Long commentId) { + public ApiResponse deleteComment(@PathVariable("commentId") Long commentId, @RequestParam(value = "LOCCMTPNT") Long parentId) { MapDto map = new MapDto(); map.put("LOCCMTSEQ", commentId); + map.put("LOCCMTPNT", parentId); boardService.deleteComment(map); return ApiResponse.ok("댓글이 삭제되었습니다."); diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index b74911c..be1c4b0 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -66,13 +66,13 @@ public interface localbordMapper { void updateComment(MapDto map); // 댓글에 대댓글이 있는지 확인 - int selectHasReplies(MapDto map); + int selectReplyCount(Long parentId); // 댓글 내용만 삭제 처리 (대댓글 유지) - void updateSoftDeleteComment(MapDto map); + void updateSoftDeleteComment(Long commentId); // 댓글 삭제 (대댓글 없음) - void deleteComment(MapDto map); + void deleteComment(Long commentId); // 댓글 비밀번호 조회 String selectCommentPassword(int commentId); diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index cb5b4c8..35911a0 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -173,20 +173,33 @@ public class localbordService { } public void deleteComment(MapDto map) { + Long commentId = (Long) map.get("LOCCMTSEQ"); // 댓글이 대댓글이 있는지 확인 - boolean hasReplies = boardMapper.selectHasReplies(map) > 0; - + boolean hasReplies = boardMapper.selectReplyCount(commentId) > 0; if (hasReplies) { // 대댓글이 있는 경우, '삭제된 댓글입니다.'로 변경 (소프트 삭제) - boardMapper.updateSoftDeleteComment(map); + boardMapper.updateSoftDeleteComment(commentId); } else { // 대댓글이 없는 경우, 완전 삭제 - boardMapper.deleteComment(map); + boardMapper.deleteComment(commentId); } - + checkAndDeleteParentComment(map); } - public String selectCommentPassword(int commentId) { + private void checkAndDeleteParentComment(MapDto map) { + Long parentId = (Long) map.get("LOCCMTPNT"); + if (parentId == null) return; // 부모가 없으면 종료 + + // 부모 댓글의 남아있는 대댓글 개수 확인 + int remainingReplies = boardMapper.selectReplyCount(parentId); + + if (remainingReplies == 0) { + // 남은 대댓글이 없으면 부모 댓글도 삭제 + boardMapper.deleteComment(parentId); + } + } + + public String selectCommentPassword(int commentId) { return boardMapper.selectCommentPassword(commentId); } diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index ca141d0..fb55f94 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -207,7 +207,6 @@ ) - DELETE FROM localcomt @@ -216,10 +215,13 @@ SELECT 1 FROM localcomt WHERE LOCCMTPNT = #{LOCCMTSEQ} ) - - - + SELECT COUNT(*) + FROM localcomt + WHERE LOCCMTPNT = #{LOCCMTSEQ} + AND LOCCMTPNT IS NOT NULL