From 82eea0b9089fc52aefc2d66681bd44298a5f8866 Mon Sep 17 00:00:00 2001 From: ByungCheol Date: Sun, 5 Jul 2026 13:46:50 +0900 Subject: [PATCH] =?UTF-8?q?feat(board):=20=EC=8A=A4=ED=8C=B8=20=ED=82=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EC=9E=90=EB=8F=99=20=EB=B8=94=EB=9D=BC?= =?UTF-8?q?=EC=9D=B8=EB=93=9C=20=EB=B0=8F=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EC=8B=A0=EA=B3=A0=20=EB=AA=A9=EB=A1=9D=20=EB=85=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BoardService: create/addComment에서 isSpam 감지 시 자동 블라인드 처리, 포인트 미지급 - ReportMapper: listReported 쿼리 확장 — 신고 누적 OR 스팸 감지 블라인드 항목 모두 포함 - ReportedItem: blockReason 필드 추가 Co-Authored-By: Claude Sonnet 4.6 --- .../com/sb/web/board/dto/ReportedItem.java | 1 + .../sb/web/board/service/BoardService.java | 12 +++++++-- src/main/resources/mapper/ReportMapper.xml | 26 +++++++++++-------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sb/web/board/dto/ReportedItem.java b/src/main/java/com/sb/web/board/dto/ReportedItem.java index 209be58..f2a5adb 100644 --- a/src/main/java/com/sb/web/board/dto/ReportedItem.java +++ b/src/main/java/com/sb/web/board/dto/ReportedItem.java @@ -19,6 +19,7 @@ public class ReportedItem { private Long authorId; // 작성자 id private String authorName; // 작성자 표시명 private Boolean blocked; // 이미 블라인드 되었는지 + private String blockReason; // 블라인드 사유 (글만 존재; 스팸 감지 / 신고 누적 등) private Integer reportCount; // 누적 신고 수 private LocalDateTime lastReportedAt; // 마지막 신고 시각 } diff --git a/src/main/java/com/sb/web/board/service/BoardService.java b/src/main/java/com/sb/web/board/service/BoardService.java index 4814c3b..5e36a0f 100644 --- a/src/main/java/com/sb/web/board/service/BoardService.java +++ b/src/main/java/com/sb/web/board/service/BoardService.java @@ -191,7 +191,11 @@ public class BoardService { .build(); postMapper.insert(post); applyTags(post.getId(), req.getTagIds()); - pointService.awardBoardWrite(author.getId(), req.getContent()); + if (pointService.isSpam(req.getContent())) { + postMapper.updateBlocked(post.getId(), true, "스팸 키워드 감지"); + } else { + pointService.awardBoardWrite(author.getId(), req.getContent()); + } return assemble(mustFindPost(post.getId()), author); } @@ -245,7 +249,11 @@ public class BoardService { .content(req.getContent()) .build(); commentMapper.insert(comment); - pointService.awardBoardWrite(author.getId(), req.getContent()); + if (pointService.isSpam(req.getContent())) { + commentMapper.updateBlocked(comment.getId(), true); + } else { + pointService.awardBoardWrite(author.getId(), req.getContent()); + } return CommentResponse.from(commentMapper.findById(comment.getId())); } diff --git a/src/main/resources/mapper/ReportMapper.xml b/src/main/resources/mapper/ReportMapper.xml index ad352aa..4083e6e 100644 --- a/src/main/resources/mapper/ReportMapper.xml +++ b/src/main/resources/mapper/ReportMapper.xml @@ -12,25 +12,29 @@ SELECT COUNT(*) FROM report WHERE target_type = #{targetType} AND target_id = #{targetId} - +