From 4fb801a1cce0c09d5bf5a9fa34c668ac70a0e9b1 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Wed, 17 Jan 2024 11:14:01 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=93=A6=EF=B8=8F=20[CHORE]=20TODO=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/lequuServer/global/BadWordFilterService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java b/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java index 655e2df..fc0d88e 100644 --- a/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java +++ b/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java @@ -19,11 +19,11 @@ public class BadWordFilterService { private final String[] symbols; public BadWordFilterService() throws IOException { - badWordFiltering = new BadWordFiltering(); + badWordFiltering = new BadWordFiltering("♡"); symbols = new String[]{"!", "@", "#", "$", "%", "^", "&", "*", "_"}; // 비속어 필터링을 제외할 단어 설정 가능 - String[] enableList = new String[]{"똥"}; + String[] enableList = new String[]{"똥", "바보"}; for (String s : enableList) { badWordFiltering.remove(s); } @@ -36,7 +36,12 @@ public BadWordFilterService() throws IOException { } public String badWordChange(String string) { - return badWordFiltering.change(string, symbols); + String changedWord = badWordFiltering.change(string, symbols); + if (changedWord.equals(string)) { + //TODO 로그 수집 + } + //TODO 단어 전체 하트로 변경 + return changedWord; } private void readBadWords(String fileName) throws IOException { From 6e9ec8a13022831373adfa74fff0cb5a6207be8f Mon Sep 17 00:00:00 2001 From: dong2ast Date: Wed, 17 Jan 2024 17:04:13 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=9B=20[FIX]=20=EB=A0=88=ED=81=90?= =?UTF-8?q?=20=EB=B6=81=20Swagger=20example=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/book/dto/request/BookCreateRequestDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java index 5bd9e07..f66aef1 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java @@ -23,7 +23,7 @@ public record BookCreateRequestDto( @Size(min = 1, max = 65, message = "레큐북 소개는 1자 이상 65자 이하여야합니다.") String description, - @Schema(example = "0") + @Schema(example = "#FFFFFF") @Pattern(regexp = "^(#[A-Za-z0-9]{3,6})$", message = "색상은 #으로 시작하는 3~6 사이의 색깔코드여야 합니다.") String backgroundColor ) { From b52d69efca1b5db5f38ceaf8c3fce4e0650c6614 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Wed, 17 Jan 2024 17:57:58 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=E2=9C=A8=20[FEAT]=20=EC=9A=95=EC=84=A4=20?= =?UTF-8?q?=EC=96=B4=EC=A0=88=EB=8B=A8=EC=9C=84=EB=A1=9C=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=EB=A7=81=EB=90=98=EA=B2=8C=20=EB=B3=80=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/book/facade/BookFacade.java | 15 ++++---- .../domain/member/service/MemberService.java | 2 +- .../domain/note/facade/NoteFacade.java | 10 +++--- .../global/BadWordFilterService.java | 35 +++++++++++++++---- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java index e5166cd..fbfd0ea 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/facade/BookFacade.java @@ -1,5 +1,9 @@ package org.sopt.lequuServer.domain.book.facade; +import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.BOOK_FAVORITE_IMAGE_FOLDER_NAME; + +import java.util.List; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto; import org.sopt.lequuServer.domain.book.dto.response.BookCreateResponseDto; @@ -19,11 +23,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.UUID; - -import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.BOOK_FAVORITE_IMAGE_FOLDER_NAME; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -60,10 +59,10 @@ public BookCreateResponseDto createBook(BookCreateRequestDto request, Long membe Book book = Book.builder() .uuid(bookUuid) - .favoriteName(badWordFilterService.badWordChange(request.favoriteName())) + .favoriteName(badWordFilterService.badWordChange(memberId, request.favoriteName())) .favoriteImage(imageUrl) - .title(badWordFilterService.badWordChange(request.title())) - .description(badWordFilterService.badWordChange(request.description())) + .title(badWordFilterService.badWordChange(memberId, request.title())) + .description(badWordFilterService.badWordChange(memberId, request.description())) .backgroundColor(request.backgroundColor()) .member(member) .build(); diff --git a/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java b/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java index a04905c..5534139 100644 --- a/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/lequuServer/domain/member/service/MemberService.java @@ -127,7 +127,7 @@ public MemberNicknameResponseDto setMemberNickname(Long memberId, MemberNickname } Member member = memberRepository.findByIdOrThrow(memberId); - member.updateNickname(badWordFilterService.badWordChange(request.nickname().strip())); + member.updateNickname(badWordFilterService.badWordChange(memberId, request.nickname().strip())); return MemberNicknameResponseDto.of(memberId); } diff --git a/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java b/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java index 8af9217..c3da267 100644 --- a/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java +++ b/src/main/java/org/sopt/lequuServer/domain/note/facade/NoteFacade.java @@ -1,5 +1,7 @@ package org.sopt.lequuServer.domain.note.facade; +import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.NOTE_BACKGROUND_IMAGE_FOLDER_NAME; + import lombok.RequiredArgsConstructor; import org.sopt.lequuServer.domain.book.model.Book; import org.sopt.lequuServer.domain.book.repository.BookRepository; @@ -14,8 +16,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.NOTE_BACKGROUND_IMAGE_FOLDER_NAME; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -28,8 +28,8 @@ public class NoteFacade { private final BadWordFilterService badWordFilterService; @Transactional - public NoteCreateResponseDto createNote(Long userId, NoteCreateDto noteCreateDto) { - Member member = memberRepository.findByIdOrThrow(userId); + public NoteCreateResponseDto createNote(Long memberId, NoteCreateDto noteCreateDto) { + Member member = memberRepository.findByIdOrThrow(memberId); Book book = bookRepository.findByIdOrThrow(noteCreateDto.bookId()); String background = noteCreateDto.background(); @@ -38,6 +38,6 @@ public NoteCreateResponseDto createNote(Long userId, NoteCreateDto noteCreateDto background = s3Service.getCloudFrontURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + noteCreateDto.background()); } - return noteService.saveNote(Note.of(badWordFilterService.badWordChange(noteCreateDto.content()), background, noteCreateDto.textColor(), member, book), member, book); + return noteService.saveNote(Note.of(badWordFilterService.badWordChange(memberId, noteCreateDto.content()), background, noteCreateDto.textColor(), member, book), member, book); } } diff --git a/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java b/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java index fc0d88e..728b74b 100644 --- a/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java +++ b/src/main/java/org/sopt/lequuServer/global/BadWordFilterService.java @@ -1,14 +1,18 @@ package org.sopt.lequuServer.global; import com.vane.badwordfiltering.BadWordFiltering; -import org.springframework.stereotype.Service; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.List; +import org.sopt.lequuServer.domain.log.model.BadWordLog; +import org.sopt.lequuServer.domain.log.repository.BadWordLogRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @@ -17,8 +21,9 @@ public class BadWordFilterService { private final BadWordFiltering badWordFiltering; private final HashSet badWords; private final String[] symbols; + private final BadWordLogRepository badWordLogRepository; - public BadWordFilterService() throws IOException { + public BadWordFilterService(BadWordLogRepository badWordLogRepository) throws IOException { badWordFiltering = new BadWordFiltering("♡"); symbols = new String[]{"!", "@", "#", "$", "%", "^", "&", "*", "_"}; @@ -33,14 +38,30 @@ public BadWordFilterService() throws IOException { readBadWords("BadWord.txt"); badWordFiltering.addAll(badWords); + + this.badWordLogRepository = badWordLogRepository; } - public String badWordChange(String string) { + @Transactional + public String badWordChange(Long memberId, String string) { String changedWord = badWordFiltering.change(string, symbols); - if (changedWord.equals(string)) { - //TODO 로그 수집 + + if (!changedWord.equals(string)) { + badWordLogRepository.save(BadWordLog.of(memberId, string)); + + String[] split = changedWord.split(" "); + List result = new ArrayList<>(); + + for (String s : split) { + if (s.contains("♡")){ + result.add(s.replaceAll(".", "♡")); + continue; + } + result.add(s); + } + return String.join(" ", result); } - //TODO 단어 전체 하트로 변경 + return changedWord; } From cf6a26e5e02c1d46acff0d28308ab61d182d22c0 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Wed, 17 Jan 2024 17:58:21 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=E2=9C=A8=20[FEAT]=20=EC=9A=95=EC=84=A4=20D?= =?UTF-8?q?B=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/log/model/BadWordLog.java | 39 +++++++++++++++++++ .../log/repository/BadWordLogRepository.java | 7 ++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/java/org/sopt/lequuServer/domain/log/model/BadWordLog.java create mode 100644 src/main/java/org/sopt/lequuServer/domain/log/repository/BadWordLogRepository.java diff --git a/src/main/java/org/sopt/lequuServer/domain/log/model/BadWordLog.java b/src/main/java/org/sopt/lequuServer/domain/log/model/BadWordLog.java new file mode 100644 index 0000000..3ae9545 --- /dev/null +++ b/src/main/java/org/sopt/lequuServer/domain/log/model/BadWordLog.java @@ -0,0 +1,39 @@ +package org.sopt.lequuServer.domain.log.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.sopt.lequuServer.global.common.model.BaseTimeEntity; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "bad_word_log") +public class BadWordLog extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "bad_word_log_id") + private Long id; + + private Long memberId; + + private String originText; + + @Builder + public BadWordLog(Long memberId, String originText) { + this.memberId = memberId; + this.originText = originText; + } + + public static BadWordLog of(Long memberId, String originText) { + return new BadWordLog(memberId, originText); + } +} diff --git a/src/main/java/org/sopt/lequuServer/domain/log/repository/BadWordLogRepository.java b/src/main/java/org/sopt/lequuServer/domain/log/repository/BadWordLogRepository.java new file mode 100644 index 0000000..a7fc265 --- /dev/null +++ b/src/main/java/org/sopt/lequuServer/domain/log/repository/BadWordLogRepository.java @@ -0,0 +1,7 @@ +package org.sopt.lequuServer.domain.log.repository; + +import org.sopt.lequuServer.domain.log.model.BadWordLog; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface BadWordLogRepository extends JpaRepository { +} From bed6654f55fe6fe69ef24d9f326efb312b7d267f Mon Sep 17 00:00:00 2001 From: dong2ast <31067658+dong2ast@users.noreply.github.com> Date: Wed, 17 Jan 2024 18:10:41 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[CHORE]=20Swagger=20=EC=83=89=EA=B9=94?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/book/dto/request/BookCreateRequestDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java index f66aef1..be01191 100644 --- a/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java +++ b/src/main/java/org/sopt/lequuServer/domain/book/dto/request/BookCreateRequestDto.java @@ -23,7 +23,7 @@ public record BookCreateRequestDto( @Size(min = 1, max = 65, message = "레큐북 소개는 1자 이상 65자 이하여야합니다.") String description, - @Schema(example = "#FFFFFF") + @Schema(example = "#F5F5F5") @Pattern(regexp = "^(#[A-Za-z0-9]{3,6})$", message = "색상은 #으로 시작하는 3~6 사이의 색깔코드여야 합니다.") String backgroundColor ) {