From aaa172c50ddeff9dcf66e90f6c18d6757e898a00 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 11:05:41 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=A7/=EC=8B=AB=EC=96=B4?= =?UTF-8?q?=EC=9A=94,=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=82=AD=EC=A0=9C,?= =?UTF-8?q?=EB=8C=93=EA=B8=80=EC=82=AD=EC=A0=9C=EC=99=80=20=EB=8C=80?= =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=82=AD=EC=A0=9C=20=EC=BF=BC=EB=A6=AC=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 | 27 ++++++- .../localhost/service/localbordService.java | 34 +++++++- src/main/resources/mapper/localbordMapper.xml | 79 ++++++++++++++++--- 4 files changed, 127 insertions(+), 16 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 b67a73a..0384760 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -265,8 +265,9 @@ public class BoardController { @PostMapping("/{LOCBRDSEQ}/{LOCCMTSEQ}/reaction") public ApiResponse reactToBoard(@ReqMap MapDto map) { boardService.reactToBoard(map); - return ApiResponse.ok("반응이 추가되었습니다."); + 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 cc40a1f..e9291ab 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -24,12 +24,21 @@ public interface localbordMapper { // 게시물 삭제 void deleteBoard(MapDto map); + + // 게시물 삭제시 댓글/대댓글 삭제 + void deleteCommentsByBoardId(MapDto map); // 게시물 수정 void updateBoard(MapDto map); + + // 기존 반응 조회 + MapDto findReaction(MapDto map); - // 게시물 좋아요/싫어요 추가 - void reactToBoard(MapDto map); + // 새 반응 삽입 + void insertReaction(MapDto map); + + // 기존 반응 업데이트 + void updateReaction(MapDto map); // 댓글 조회 List getComments(int boardSeq); @@ -40,8 +49,20 @@ public interface localbordMapper { // 댓글/대댓글 수정 void updateComment(MapDto map); - // 댓글/대댓글 삭제 + // 대댓글인지 확인 + boolean isReply(MapDto map); + + // 댓글에 대댓글이 있는지 확인 + boolean hasReplies(MapDto map); + + // 댓글 내용만 삭제 처리 (대댓글 유지) + void softDeleteComment(MapDto map); + + // 댓글 삭제 (대댓글 없음) void deleteComment(MapDto map); + + // 대댓글 삭제 + void deleteReply(MapDto map); // 게시물 비밀번호 조회 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 11de3a1..97b738e 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -49,6 +49,7 @@ public class localbordService { public void deleteBoard(MapDto map) { + boardMapper.deleteCommentsByBoardId(map); boardMapper.deleteBoard(map); } @@ -57,7 +58,16 @@ public class localbordService { } public void reactToBoard(MapDto map) { - boardMapper.reactToBoard(map); + // 기존 반응 확인 + MapDto existingReaction = boardMapper.findReaction(map); + + if (existingReaction != null) { + // 기존 반응이 있는 경우 업데이트 + boardMapper.updateReaction(map); + } else { + // 기존 반응이 없는 경우 새로 삽입 + boardMapper.insertReaction(map); + } } public List getComments(int boardSeq) { @@ -65,6 +75,9 @@ public class localbordService { } public void addCommentOrReply(MapDto map) { + if (map.get("LOCCMTPNT") == null) { + map.put("LOCCMTPNT", null); // 부모 ID가 없는 경우 null 처리 + } boardMapper.addCommentOrReply(map); } @@ -74,7 +87,24 @@ public class localbordService { } public void deleteComment(MapDto map) { - boardMapper.deleteComment(map); + // 댓글인지 대댓글인지 확인 + boolean isReply = boardMapper.isReply(map); + + if (isReply) { + // 대댓글 삭제 + boardMapper.deleteReply(map); + } else { + // 댓글인 경우 + boolean hasReplies = boardMapper.hasReplies(map); + + if (hasReplies) { + // 대댓글이 있는 경우 내용 업데이트 + boardMapper.softDeleteComment(map); + } else { + // 대댓글이 없는 경우 댓글 삭제 + boardMapper.deleteComment(map); + } + } } public String getCommentPassword(int commentId) { diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index 8abc715..9483650 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -74,6 +74,12 @@ DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + + DELETE FROM localcomt + WHERE LOCBRDSEQ = #{LOCBRDSEQ} + @@ -81,13 +87,35 @@ SET LOCBRDTTL = #{LOCBRDTTL}, LOCBRDCON = #{LOCBRDCON}, LOCBRDUDT = NOW() WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + - - - INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD ) + + + + + UPDATE localgorb + SET LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD} + WHERE (LOCBRDSEQ = #{LOCBRDSEQ} OR (#{LOCBRDSEQ} IS NULL AND LOCBRDSEQ IS NULL)) + AND (LOCCMTSEQ = #{LOCCMTSEQ} OR (#{LOCCMTSEQ} IS NULL AND LOCCMTSEQ IS NULL)) + AND MEMBERSEQ = #{MEMBERSEQ} + + + + + + + INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD) VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD}) - ON DUPLICATE KEY UPDATE LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD} + + SELECT COUNT(1) > 0 FROM localcomt + WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPNT IS NOT NULL + + + + +