From 7e8ef460564476e3288b0449b632ddeac723684b Mon Sep 17 00:00:00 2001 From: juno-junho Date: Tue, 21 May 2024 16:39:48 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20rest=20docs=20=ED=91=9C=EA=B8=B0=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/docs/asciidoc/profanity-api.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docs/asciidoc/profanity-api.adoc b/src/docs/asciidoc/profanity-api.adoc index 5385a8d0..9d96d24a 100644 --- a/src/docs/asciidoc/profanity-api.adoc +++ b/src/docs/asciidoc/profanity-api.adoc @@ -33,13 +33,13 @@ include::{snippets}/profanity/download-csv-file/response-fields.adoc[] :sectnums!: ==== Request -include::{snippets}/profanity/add-single-banword/http-request.adoc[] +include::{snippets}/profanity/add-banword/http-request.adoc[] ===== Request Body -include::{snippets}/profanity/add-single-banword/request-fields.adoc[] +include::{snippets}/profanity/add-banword/request-fields.adoc[] ==== Response -include::{snippets}/profanity/add-single-banword/http-response.adoc[] +include::{snippets}/profanity/add-banword/http-response.adoc[] :sectnums: From 821ddd4c31607a3aab2e25b8d95f04dd19a81f33 Mon Sep 17 00:00:00 2001 From: juno-junho Date: Tue, 21 May 2024 16:40:33 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20Profanity=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20global=EC=97=90=EC=84=9C=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B8=88=EC=B9=99=EC=96=B4=20=EC=B6=94=EA=B0=80/?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=EC=8B=9C=20trie=EC=97=90=EC=84=9C=EB=8F=84?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/controller/PostController.java | 2 ++ .../controller/request/CommentRequest.java | 2 +- .../board/controller/request/PostRequest.java | 2 +- .../controller/request/PostUpdateRequest.java | 2 +- .../controller/request/ClubCreateRequest.java | 2 +- .../request/ClubNoticeCreateRequest.java | 2 +- .../request/ClubNoticeUpdateRequest.java | 2 +- .../controller/request/ClubUpdateRequest.java | 2 +- .../request/EventCreateRequest.java | 2 +- .../request/EventUpdateRequest.java | 2 +- .../global/advice/GlobalExceptionHandler.java | 2 +- .../controller/response/UrlResponse.java | 5 ----- .../repository/ProfanityCustomRepository.java | 11 ---------- .../profanity/ProfanityCheck.java | 2 +- .../profanity/ProfanityCheckValidator.java | 8 +++---- .../ProfanityCheckValidatorUsingList.java | 6 +++--- .../profanity/ProfanityExceptionMessage.java | 2 +- .../profanity/ProfanityLoader.java | 14 ++++++++++--- .../controller/ProfanityController.java | 10 ++++----- .../controller/request/BanWordRequest.java | 2 +- .../controller/response/UrlResponse.java | 5 +++++ .../profanity/domain/Profanity.java | 2 +- .../repository/ProfanityCustomRepository.java | 11 ++++++++++ .../ProfanityCustomRepositoryImpl.java | 4 ++-- .../repository/ProfanityRepository.java | 4 ++-- .../profanity/service/ProfanityService.java | 21 ++++++++++++------- .../request/UserProfileUpdateRequest.java | 2 +- .../request/UserRequiredInfoRequest.java | 2 +- .../controller/CommentControllerTest.java | 6 +++--- .../board/controller/PostControllerTest.java | 6 +++--- .../club/controller/ClubControllerTest.java | 6 +++--- .../controller/ClubNoticeControllerTest.java | 6 +++--- .../controller/ProfanityControllerTest.java | 6 +++--- .../ConcurrentInvertedRadixTreeTest.java | 8 ++++++- .../user/controller/LoginControllerTest.java | 6 +++--- .../user/controller/UserControllerTest.java | 6 +++--- 36 files changed, 103 insertions(+), 80 deletions(-) delete mode 100644 src/main/java/com/spaceclub/global/annotation/profanity/controller/response/UrlResponse.java delete mode 100644 src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepository.java rename src/main/java/com/spaceclub/{global/annotation => }/profanity/ProfanityCheck.java (92%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/ProfanityCheckValidator.java (82%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/ProfanityCheckValidatorUsingList.java (86%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/ProfanityExceptionMessage.java (92%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/ProfanityLoader.java (81%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/controller/ProfanityController.java (87%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/controller/request/BanWordRequest.java (61%) create mode 100644 src/main/java/com/spaceclub/profanity/controller/response/UrlResponse.java rename src/main/java/com/spaceclub/{global/annotation => }/profanity/domain/Profanity.java (92%) create mode 100644 src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepository.java rename src/main/java/com/spaceclub/{global/annotation => }/profanity/domain/repository/ProfanityCustomRepositoryImpl.java (90%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/domain/repository/ProfanityRepository.java (78%) rename src/main/java/com/spaceclub/{global/annotation => }/profanity/service/ProfanityService.java (76%) rename src/test/java/com/spaceclub/{global/annotation => }/profanity/controller/ProfanityControllerTest.java (97%) rename src/test/java/com/spaceclub/{global => }/profanity/study/ConcurrentInvertedRadixTreeTest.java (90%) diff --git a/src/main/java/com/spaceclub/board/controller/PostController.java b/src/main/java/com/spaceclub/board/controller/PostController.java index e3f0d5b5..ee269c98 100644 --- a/src/main/java/com/spaceclub/board/controller/PostController.java +++ b/src/main/java/com/spaceclub/board/controller/PostController.java @@ -9,6 +9,7 @@ import com.spaceclub.global.aws.s3.S3Folder; import com.spaceclub.global.aws.s3.S3ImageUploader; import com.spaceclub.global.response.PageResponse; +import com.spaceclub.global.timer.StopWatch; import com.spaceclub.oauth.jwt.vo.JwtUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -66,6 +67,7 @@ public PostResponse getSingleClubBoardPost( return PostResponse.from(postInfo, imageUploader.getBucketUrl()); } + @StopWatch @PostMapping(value = "/{clubId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity createClubBoardPost( @RequestPart(required = false) MultipartFile image, diff --git a/src/main/java/com/spaceclub/board/controller/request/CommentRequest.java b/src/main/java/com/spaceclub/board/controller/request/CommentRequest.java index e1fd54ee..477a9a75 100644 --- a/src/main/java/com/spaceclub/board/controller/request/CommentRequest.java +++ b/src/main/java/com/spaceclub/board/controller/request/CommentRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.board.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record CommentRequest( @ProfanityCheck String content, diff --git a/src/main/java/com/spaceclub/board/controller/request/PostRequest.java b/src/main/java/com/spaceclub/board/controller/request/PostRequest.java index 6d9615a6..c37c6f50 100644 --- a/src/main/java/com/spaceclub/board/controller/request/PostRequest.java +++ b/src/main/java/com/spaceclub/board/controller/request/PostRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.board.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record PostRequest( @ProfanityCheck String title, diff --git a/src/main/java/com/spaceclub/board/controller/request/PostUpdateRequest.java b/src/main/java/com/spaceclub/board/controller/request/PostUpdateRequest.java index 7a093068..7b21116d 100644 --- a/src/main/java/com/spaceclub/board/controller/request/PostUpdateRequest.java +++ b/src/main/java/com/spaceclub/board/controller/request/PostUpdateRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.board.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record PostUpdateRequest( @ProfanityCheck String title, diff --git a/src/main/java/com/spaceclub/club/controller/request/ClubCreateRequest.java b/src/main/java/com/spaceclub/club/controller/request/ClubCreateRequest.java index b7b2342e..6fdcfbb4 100644 --- a/src/main/java/com/spaceclub/club/controller/request/ClubCreateRequest.java +++ b/src/main/java/com/spaceclub/club/controller/request/ClubCreateRequest.java @@ -1,7 +1,7 @@ package com.spaceclub.club.controller.request; import com.spaceclub.club.domain.Club; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record ClubCreateRequest( @ProfanityCheck String name, diff --git a/src/main/java/com/spaceclub/club/controller/request/ClubNoticeCreateRequest.java b/src/main/java/com/spaceclub/club/controller/request/ClubNoticeCreateRequest.java index 41e95c98..c21d244a 100644 --- a/src/main/java/com/spaceclub/club/controller/request/ClubNoticeCreateRequest.java +++ b/src/main/java/com/spaceclub/club/controller/request/ClubNoticeCreateRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.club.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record ClubNoticeCreateRequest( @ProfanityCheck String notice diff --git a/src/main/java/com/spaceclub/club/controller/request/ClubNoticeUpdateRequest.java b/src/main/java/com/spaceclub/club/controller/request/ClubNoticeUpdateRequest.java index d383595e..22a437d0 100644 --- a/src/main/java/com/spaceclub/club/controller/request/ClubNoticeUpdateRequest.java +++ b/src/main/java/com/spaceclub/club/controller/request/ClubNoticeUpdateRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.club.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record ClubNoticeUpdateRequest(@ProfanityCheck String notice) { diff --git a/src/main/java/com/spaceclub/club/controller/request/ClubUpdateRequest.java b/src/main/java/com/spaceclub/club/controller/request/ClubUpdateRequest.java index 8e435dd5..eec4df06 100644 --- a/src/main/java/com/spaceclub/club/controller/request/ClubUpdateRequest.java +++ b/src/main/java/com/spaceclub/club/controller/request/ClubUpdateRequest.java @@ -1,7 +1,7 @@ package com.spaceclub.club.controller.request; import com.spaceclub.club.domain.Club; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record ClubUpdateRequest( @ProfanityCheck String name, diff --git a/src/main/java/com/spaceclub/event/controller/request/EventCreateRequest.java b/src/main/java/com/spaceclub/event/controller/request/EventCreateRequest.java index 6962f238..4bd18a7a 100644 --- a/src/main/java/com/spaceclub/event/controller/request/EventCreateRequest.java +++ b/src/main/java/com/spaceclub/event/controller/request/EventCreateRequest.java @@ -7,7 +7,7 @@ import com.spaceclub.event.domain.EventInfo; import com.spaceclub.event.domain.FormInfo; import com.spaceclub.event.domain.TicketInfo; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; import lombok.Builder; import java.time.LocalDate; diff --git a/src/main/java/com/spaceclub/event/controller/request/EventUpdateRequest.java b/src/main/java/com/spaceclub/event/controller/request/EventUpdateRequest.java index 13b9b46c..ff4bb196 100644 --- a/src/main/java/com/spaceclub/event/controller/request/EventUpdateRequest.java +++ b/src/main/java/com/spaceclub/event/controller/request/EventUpdateRequest.java @@ -7,7 +7,7 @@ import com.spaceclub.event.domain.EventInfo; import com.spaceclub.event.domain.FormInfo; import com.spaceclub.event.domain.TicketInfo; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; import lombok.Builder; import java.time.LocalDate; diff --git a/src/main/java/com/spaceclub/global/advice/GlobalExceptionHandler.java b/src/main/java/com/spaceclub/global/advice/GlobalExceptionHandler.java index c74aa89e..ab282014 100644 --- a/src/main/java/com/spaceclub/global/advice/GlobalExceptionHandler.java +++ b/src/main/java/com/spaceclub/global/advice/GlobalExceptionHandler.java @@ -17,7 +17,7 @@ import java.util.List; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.BAD_WORD_DETECTED; +import static com.spaceclub.profanity.ProfanityExceptionMessage.BAD_WORD_DETECTED; import static com.spaceclub.global.exception.GlobalExceptionCode.INVALID_REQUEST; import static com.spaceclub.global.exception.GlobalExceptionCode.MAX_IMAGE_SIZE_EXCEEDED; import static org.springframework.http.HttpStatus.BAD_REQUEST; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/controller/response/UrlResponse.java b/src/main/java/com/spaceclub/global/annotation/profanity/controller/response/UrlResponse.java deleted file mode 100644 index 519ecd28..00000000 --- a/src/main/java/com/spaceclub/global/annotation/profanity/controller/response/UrlResponse.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.spaceclub.global.annotation.profanity.controller.response; - -public record UrlResponse(String url) { - -} diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepository.java b/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepository.java deleted file mode 100644 index 052a32f7..00000000 --- a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.spaceclub.global.annotation.profanity.domain.repository; - -import com.spaceclub.global.annotation.profanity.domain.Profanity; - -import java.util.List; - -public interface ProfanityCustomRepository { - - void bulkInsert(List profanities); - -} diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheck.java b/src/main/java/com/spaceclub/profanity/ProfanityCheck.java similarity index 92% rename from src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheck.java rename to src/main/java/com/spaceclub/profanity/ProfanityCheck.java index a3a12b16..0a884dc5 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheck.java +++ b/src/main/java/com/spaceclub/profanity/ProfanityCheck.java @@ -1,4 +1,4 @@ -package com.spaceclub.global.annotation.profanity; +package com.spaceclub.profanity; import jakarta.validation.Constraint; import jakarta.validation.Payload; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidator.java b/src/main/java/com/spaceclub/profanity/ProfanityCheckValidator.java similarity index 82% rename from src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidator.java rename to src/main/java/com/spaceclub/profanity/ProfanityCheckValidator.java index a3ec1ef2..8443bc94 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidator.java +++ b/src/main/java/com/spaceclub/profanity/ProfanityCheckValidator.java @@ -1,7 +1,7 @@ -package com.spaceclub.global.annotation.profanity; +package com.spaceclub.profanity; -import com.spaceclub.global.annotation.profanity.domain.Profanity; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.timer.StopWatch; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; @@ -12,7 +12,7 @@ import java.util.List; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.BAD_WORD_DETECTED; +import static com.spaceclub.profanity.ProfanityExceptionMessage.BAD_WORD_DETECTED; @Slf4j @Component diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidatorUsingList.java b/src/main/java/com/spaceclub/profanity/ProfanityCheckValidatorUsingList.java similarity index 86% rename from src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidatorUsingList.java rename to src/main/java/com/spaceclub/profanity/ProfanityCheckValidatorUsingList.java index 7588eaeb..42c61e80 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityCheckValidatorUsingList.java +++ b/src/main/java/com/spaceclub/profanity/ProfanityCheckValidatorUsingList.java @@ -1,7 +1,7 @@ -package com.spaceclub.global.annotation.profanity; +package com.spaceclub.profanity; -import com.spaceclub.global.annotation.profanity.domain.Profanity; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.timer.StopWatch; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityExceptionMessage.java b/src/main/java/com/spaceclub/profanity/ProfanityExceptionMessage.java similarity index 92% rename from src/main/java/com/spaceclub/global/annotation/profanity/ProfanityExceptionMessage.java rename to src/main/java/com/spaceclub/profanity/ProfanityExceptionMessage.java index 5b3e9d37..ab1f8f1f 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityExceptionMessage.java +++ b/src/main/java/com/spaceclub/profanity/ProfanityExceptionMessage.java @@ -1,4 +1,4 @@ -package com.spaceclub.global.annotation.profanity; +package com.spaceclub.profanity; import lombok.Getter; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityLoader.java b/src/main/java/com/spaceclub/profanity/ProfanityLoader.java similarity index 81% rename from src/main/java/com/spaceclub/global/annotation/profanity/ProfanityLoader.java rename to src/main/java/com/spaceclub/profanity/ProfanityLoader.java index d5225c59..d5cc7163 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/ProfanityLoader.java +++ b/src/main/java/com/spaceclub/profanity/ProfanityLoader.java @@ -1,11 +1,11 @@ -package com.spaceclub.global.annotation.profanity; +package com.spaceclub.profanity; import com.googlecode.concurrenttrees.radix.node.concrete.SmartArrayBasedNodeFactory; import com.googlecode.concurrenttrees.radix.node.concrete.voidvalue.VoidValue; import com.googlecode.concurrenttrees.radixinverted.ConcurrentInvertedRadixTree; import com.googlecode.concurrenttrees.radixinverted.InvertedRadixTree; -import com.spaceclub.global.annotation.profanity.domain.Profanity; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,4 +38,12 @@ public List profanityContained(String text) { .toList(); } + public void addProfanityToTrie(String word) { + TRIE.put(word, VoidValue.SINGLETON); + } + + public void removeProfanityFromTrie(String word) { + TRIE.remove(word); + } + } diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/controller/ProfanityController.java b/src/main/java/com/spaceclub/profanity/controller/ProfanityController.java similarity index 87% rename from src/main/java/com/spaceclub/global/annotation/profanity/controller/ProfanityController.java rename to src/main/java/com/spaceclub/profanity/controller/ProfanityController.java index 3f5dbde4..fc5f54dc 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/controller/ProfanityController.java +++ b/src/main/java/com/spaceclub/profanity/controller/ProfanityController.java @@ -1,8 +1,8 @@ -package com.spaceclub.global.annotation.profanity.controller; +package com.spaceclub.profanity.controller; -import com.spaceclub.global.annotation.profanity.controller.request.BanWordRequest; -import com.spaceclub.global.annotation.profanity.controller.response.UrlResponse; -import com.spaceclub.global.annotation.profanity.service.ProfanityService; +import com.spaceclub.profanity.controller.request.BanWordRequest; +import com.spaceclub.profanity.controller.response.UrlResponse; +import com.spaceclub.profanity.service.ProfanityService; import com.spaceclub.global.config.ProfanityConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.INVALID_EXTENSION; +import static com.spaceclub.profanity.ProfanityExceptionMessage.INVALID_EXTENSION; @Slf4j @RestController diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/controller/request/BanWordRequest.java b/src/main/java/com/spaceclub/profanity/controller/request/BanWordRequest.java similarity index 61% rename from src/main/java/com/spaceclub/global/annotation/profanity/controller/request/BanWordRequest.java rename to src/main/java/com/spaceclub/profanity/controller/request/BanWordRequest.java index bfcabb96..4bcb3875 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/controller/request/BanWordRequest.java +++ b/src/main/java/com/spaceclub/profanity/controller/request/BanWordRequest.java @@ -1,4 +1,4 @@ -package com.spaceclub.global.annotation.profanity.controller.request; +package com.spaceclub.profanity.controller.request; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/spaceclub/profanity/controller/response/UrlResponse.java b/src/main/java/com/spaceclub/profanity/controller/response/UrlResponse.java new file mode 100644 index 00000000..b1bb58c9 --- /dev/null +++ b/src/main/java/com/spaceclub/profanity/controller/response/UrlResponse.java @@ -0,0 +1,5 @@ +package com.spaceclub.profanity.controller.response; + +public record UrlResponse(String url) { + +} diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/domain/Profanity.java b/src/main/java/com/spaceclub/profanity/domain/Profanity.java similarity index 92% rename from src/main/java/com/spaceclub/global/annotation/profanity/domain/Profanity.java rename to src/main/java/com/spaceclub/profanity/domain/Profanity.java index 732e032e..c702cb57 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/domain/Profanity.java +++ b/src/main/java/com/spaceclub/profanity/domain/Profanity.java @@ -1,4 +1,4 @@ -package com.spaceclub.global.annotation.profanity.domain; +package com.spaceclub.profanity.domain; import com.spaceclub.global.BaseTimeEntity; import jakarta.persistence.Column; diff --git a/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepository.java b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepository.java new file mode 100644 index 00000000..710128e9 --- /dev/null +++ b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepository.java @@ -0,0 +1,11 @@ +package com.spaceclub.profanity.domain.repository; + +import com.spaceclub.profanity.domain.Profanity; + +import java.util.List; + +public interface ProfanityCustomRepository { + + void bulkInsert(List profanities); + +} diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepositoryImpl.java b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepositoryImpl.java similarity index 90% rename from src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepositoryImpl.java rename to src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepositoryImpl.java index bef4ad16..506ce984 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityCustomRepositoryImpl.java +++ b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityCustomRepositoryImpl.java @@ -1,6 +1,6 @@ -package com.spaceclub.global.annotation.profanity.domain.repository; +package com.spaceclub.profanity.domain.repository; -import com.spaceclub.global.annotation.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.Profanity; import lombok.RequiredArgsConstructor; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityRepository.java b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityRepository.java similarity index 78% rename from src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityRepository.java rename to src/main/java/com/spaceclub/profanity/domain/repository/ProfanityRepository.java index c655b5c9..ec40f602 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/domain/repository/ProfanityRepository.java +++ b/src/main/java/com/spaceclub/profanity/domain/repository/ProfanityRepository.java @@ -1,6 +1,6 @@ -package com.spaceclub.global.annotation.profanity.domain.repository; +package com.spaceclub.profanity.domain.repository; -import com.spaceclub.global.annotation.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.Profanity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/spaceclub/global/annotation/profanity/service/ProfanityService.java b/src/main/java/com/spaceclub/profanity/service/ProfanityService.java similarity index 76% rename from src/main/java/com/spaceclub/global/annotation/profanity/service/ProfanityService.java rename to src/main/java/com/spaceclub/profanity/service/ProfanityService.java index eeb10f46..92442281 100644 --- a/src/main/java/com/spaceclub/global/annotation/profanity/service/ProfanityService.java +++ b/src/main/java/com/spaceclub/profanity/service/ProfanityService.java @@ -1,7 +1,8 @@ -package com.spaceclub.global.annotation.profanity.service; +package com.spaceclub.profanity.service; -import com.spaceclub.global.annotation.profanity.domain.Profanity; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.Profanity; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.aws.s3.S3FileUploader; import com.spaceclub.global.timer.StopWatch; import lombok.RequiredArgsConstructor; @@ -19,9 +20,9 @@ import java.time.LocalDateTime; import java.util.List; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.BAD_WORD_ALREADY_EXISTS; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.FAILED_TO_CREATE_CSV; -import static com.spaceclub.global.annotation.profanity.ProfanityExceptionMessage.FAILED_TO_SAVE; +import static com.spaceclub.profanity.ProfanityExceptionMessage.BAD_WORD_ALREADY_EXISTS; +import static com.spaceclub.profanity.ProfanityExceptionMessage.FAILED_TO_CREATE_CSV; +import static com.spaceclub.profanity.ProfanityExceptionMessage.FAILED_TO_SAVE; @Slf4j @Service @@ -30,19 +31,24 @@ public class ProfanityService { private final ProfanityRepository profanityRepository; private final S3FileUploader s3FileUploader; + private final ProfanityLoader profanityLoader; private String downloadUrl; private LocalDateTime downloadDate = LocalDateTime.now(); @StopWatch public void saveProfanitiesFromFile(MultipartFile file) { + List existingBanWord = profanityRepository.findAll(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) { List profanities = reader.lines() .distinct() + .filter(word -> existingBanWord.stream().noneMatch(banWord -> banWord.getBanWord().equals(word))) .map(Profanity::new) .toList(); profanityRepository.bulkInsert(profanities); + profanities.forEach(profanity -> profanityLoader.addProfanityToTrie(profanity.getBanWord())); } catch (IOException e) { throw new IllegalStateException(FAILED_TO_SAVE.getMessage()); } @@ -55,15 +61,16 @@ public void saveProfanity(String word) { } profanityRepository.save(new Profanity(word)); + profanityLoader.addProfanityToTrie(word); } @Transactional public void deleteProfanity(String word) { profanityRepository.deleteByBanWord(word); + profanityLoader.removeProfanityFromTrie(word); } public String createCsvFile() { - // 여기에 csv 파일 생성 여부 추가 if (downloadUrl != null && profanityRepository.findLatestModifiedDate().isBefore(downloadDate)) { return downloadUrl; } diff --git a/src/main/java/com/spaceclub/user/controller/request/UserProfileUpdateRequest.java b/src/main/java/com/spaceclub/user/controller/request/UserProfileUpdateRequest.java index 1a30b725..fc22ab81 100644 --- a/src/main/java/com/spaceclub/user/controller/request/UserProfileUpdateRequest.java +++ b/src/main/java/com/spaceclub/user/controller/request/UserProfileUpdateRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.user.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; public record UserProfileUpdateRequest( @ProfanityCheck String name, diff --git a/src/main/java/com/spaceclub/user/controller/request/UserRequiredInfoRequest.java b/src/main/java/com/spaceclub/user/controller/request/UserRequiredInfoRequest.java index f23c7865..7f74260b 100644 --- a/src/main/java/com/spaceclub/user/controller/request/UserRequiredInfoRequest.java +++ b/src/main/java/com/spaceclub/user/controller/request/UserRequiredInfoRequest.java @@ -1,6 +1,6 @@ package com.spaceclub.user.controller.request; -import com.spaceclub.global.annotation.profanity.ProfanityCheck; +import com.spaceclub.profanity.ProfanityCheck; import com.spaceclub.user.service.vo.RequiredProfile; public record UserRequiredInfoRequest(Long userId, @ProfanityCheck String name, String phoneNumber, String email) { diff --git a/src/test/java/com/spaceclub/board/controller/CommentControllerTest.java b/src/test/java/com/spaceclub/board/controller/CommentControllerTest.java index 1c389ba2..83663c94 100644 --- a/src/test/java/com/spaceclub/board/controller/CommentControllerTest.java +++ b/src/test/java/com/spaceclub/board/controller/CommentControllerTest.java @@ -7,9 +7,9 @@ import com.spaceclub.board.service.CommentService; import com.spaceclub.board.service.vo.CommentInfo; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; import com.spaceclub.oauth.interceptor.AuthorizationInterceptor; diff --git a/src/test/java/com/spaceclub/board/controller/PostControllerTest.java b/src/test/java/com/spaceclub/board/controller/PostControllerTest.java index 550b6d30..d8eb638c 100644 --- a/src/test/java/com/spaceclub/board/controller/PostControllerTest.java +++ b/src/test/java/com/spaceclub/board/controller/PostControllerTest.java @@ -8,9 +8,9 @@ import com.spaceclub.board.service.PostService; import com.spaceclub.board.service.vo.PostInfo; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.aws.s3.S3ImageUploader; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; diff --git a/src/test/java/com/spaceclub/club/controller/ClubControllerTest.java b/src/test/java/com/spaceclub/club/controller/ClubControllerTest.java index 7db24b1d..c1ecddec 100644 --- a/src/test/java/com/spaceclub/club/controller/ClubControllerTest.java +++ b/src/test/java/com/spaceclub/club/controller/ClubControllerTest.java @@ -7,9 +7,9 @@ import com.spaceclub.club.domain.Club; import com.spaceclub.club.service.ClubService; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.aws.S3Properties; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; diff --git a/src/test/java/com/spaceclub/club/controller/ClubNoticeControllerTest.java b/src/test/java/com/spaceclub/club/controller/ClubNoticeControllerTest.java index bfe0db01..58b4c310 100644 --- a/src/test/java/com/spaceclub/club/controller/ClubNoticeControllerTest.java +++ b/src/test/java/com/spaceclub/club/controller/ClubNoticeControllerTest.java @@ -7,9 +7,9 @@ import com.spaceclub.club.service.ClubNoticeService; import com.spaceclub.club.service.vo.ClubNoticeUpdate; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; import com.spaceclub.oauth.interceptor.AuthorizationInterceptor; diff --git a/src/test/java/com/spaceclub/global/annotation/profanity/controller/ProfanityControllerTest.java b/src/test/java/com/spaceclub/profanity/controller/ProfanityControllerTest.java similarity index 97% rename from src/test/java/com/spaceclub/global/annotation/profanity/controller/ProfanityControllerTest.java rename to src/test/java/com/spaceclub/profanity/controller/ProfanityControllerTest.java index 4b46ad02..379df259 100644 --- a/src/test/java/com/spaceclub/global/annotation/profanity/controller/ProfanityControllerTest.java +++ b/src/test/java/com/spaceclub/profanity/controller/ProfanityControllerTest.java @@ -1,14 +1,14 @@ -package com.spaceclub.global.annotation.profanity.controller; +package com.spaceclub.profanity.controller; import com.fasterxml.jackson.databind.ObjectMapper; import com.spaceclub.SpaceClubCustomDisplayNameGenerator; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.controller.request.BanWordRequest; -import com.spaceclub.global.annotation.profanity.service.ProfanityService; import com.spaceclub.global.config.ProfanityConfig; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; import com.spaceclub.oauth.interceptor.AuthorizationInterceptor; +import com.spaceclub.profanity.controller.request.BanWordRequest; +import com.spaceclub.profanity.service.ProfanityService; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/spaceclub/global/profanity/study/ConcurrentInvertedRadixTreeTest.java b/src/test/java/com/spaceclub/profanity/study/ConcurrentInvertedRadixTreeTest.java similarity index 90% rename from src/test/java/com/spaceclub/global/profanity/study/ConcurrentInvertedRadixTreeTest.java rename to src/test/java/com/spaceclub/profanity/study/ConcurrentInvertedRadixTreeTest.java index 9aec124a..3a7a5c2e 100644 --- a/src/test/java/com/spaceclub/global/profanity/study/ConcurrentInvertedRadixTreeTest.java +++ b/src/test/java/com/spaceclub/profanity/study/ConcurrentInvertedRadixTreeTest.java @@ -1,4 +1,4 @@ -package com.spaceclub.global.profanity.study; +package com.spaceclub.profanity.study; import com.googlecode.concurrenttrees.common.Iterables; import com.googlecode.concurrenttrees.common.PrettyPrinter; @@ -37,6 +37,12 @@ public class ConcurrentInvertedRadixTreeTest { System.out.println("Values for keys contained in 'MY TEAM LIKES TOAST': " + Iterables.toString(TRIE.getValuesForKeysContainedIn("MY TEAM LIKES TOAST"))); System.out.println("Key-value pairs for keys contained in 'MY TEAM LIKES TOAST': " + Iterables.toString(TRIE.getKeyValuePairsForKeysContainedIn("MY TEAM LIKES TOAST"))); + TRIE.put("TOOT", VoidValue.SINGLETON); + TRIE.remove("TEAM"); + + System.out.println("Tree structure:"); + PrettyPrinter.prettyPrint((PrettyPrintable) TRIE, System.out); // PrettyPrintable는 테스트를 위한 객체 + // 예시 String text = "MY TEAM LIKES TOASTERS"; Spliterator profanityFound = TRIE.getKeysContainedIn(text).spliterator(); diff --git a/src/test/java/com/spaceclub/user/controller/LoginControllerTest.java b/src/test/java/com/spaceclub/user/controller/LoginControllerTest.java index fcfeddb3..7b85e276 100644 --- a/src/test/java/com/spaceclub/user/controller/LoginControllerTest.java +++ b/src/test/java/com/spaceclub/user/controller/LoginControllerTest.java @@ -4,9 +4,9 @@ import com.spaceclub.SpaceClubCustomDisplayNameGenerator; import com.spaceclub.club.service.ClubProvider; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; import com.spaceclub.oauth.interceptor.AuthorizationInterceptor; diff --git a/src/test/java/com/spaceclub/user/controller/UserControllerTest.java b/src/test/java/com/spaceclub/user/controller/UserControllerTest.java index c27e9076..dc0988c8 100644 --- a/src/test/java/com/spaceclub/user/controller/UserControllerTest.java +++ b/src/test/java/com/spaceclub/user/controller/UserControllerTest.java @@ -3,9 +3,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.spaceclub.SpaceClubCustomDisplayNameGenerator; import com.spaceclub.global.annotation.login.UserArgumentResolver; -import com.spaceclub.global.annotation.profanity.ProfanityCheckValidator; -import com.spaceclub.global.annotation.profanity.ProfanityLoader; -import com.spaceclub.global.annotation.profanity.domain.repository.ProfanityRepository; +import com.spaceclub.profanity.ProfanityCheckValidator; +import com.spaceclub.profanity.ProfanityLoader; +import com.spaceclub.profanity.domain.repository.ProfanityRepository; import com.spaceclub.global.config.WebConfig; import com.spaceclub.oauth.interceptor.AuthenticationInterceptor; import com.spaceclub.oauth.interceptor.AuthorizationInterceptor;