Skip to content

Commit

Permalink
Merge pull request #69 from Team-Lecue/feat/#68-upgrade_badword_filter
Browse files Browse the repository at this point in the history
[FEAT] 욕설 필터링 업그레이드
  • Loading branch information
dong2ast authored Jan 18, 2024
2 parents 4ed479d + 2a71061 commit 0e1b86e
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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)
Expand Down Expand Up @@ -59,10 +58,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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<BadWordLog, Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public class NoteFacade {
private final BadWordFilterService badWordFilterService;

@Transactional
public NoteCreateResponseDto createNote(Long userId, NoteCreateDto request) {
Member member = memberRepository.findByIdOrThrow(userId);
public NoteCreateResponseDto createNote(Long memberId, NoteCreateDto request) {
Member member = memberRepository.findByIdOrThrow(memberId);
Book book = bookRepository.findByIdOrThrow(request.bookId());

String background = request.background();
Expand All @@ -38,6 +38,6 @@ public NoteCreateResponseDto createNote(Long userId, NoteCreateDto request) {
background = s3Service.getCloudFrontURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + request.background());
}

return noteService.saveNote(Note.of(badWordFilterService.badWordChange(request.content()), background, request.textColor(), member, book), member, book);
return noteService.saveNote(Note.of(badWordFilterService.badWordChange(memberId, request.content()), background, request.textColor(), member, book), member, book);
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -17,13 +21,14 @@ public class BadWordFilterService {
private final BadWordFiltering badWordFiltering;
private final HashSet<String> badWords;
private final String[] symbols;
private final BadWordLogRepository badWordLogRepository;

public BadWordFilterService() throws IOException {
badWordFiltering = new BadWordFiltering();
public BadWordFilterService(BadWordLogRepository badWordLogRepository) throws IOException {
badWordFiltering = new BadWordFiltering("♡");
symbols = new String[]{"!", "@", "#", "$", "%", "^", "&", "*", "_"};

// 비속어 필터링을 제외할 단어 설정 가능
String[] enableList = new String[]{"똥"};
String[] enableList = new String[]{"똥", "바보"};
for (String s : enableList) {
badWordFiltering.remove(s);
}
Expand All @@ -33,10 +38,31 @@ public BadWordFilterService() throws IOException {

readBadWords("BadWord.txt");
badWordFiltering.addAll(badWords);

this.badWordLogRepository = badWordLogRepository;
}

public String badWordChange(String string) {
return badWordFiltering.change(string, symbols);
@Transactional
public String badWordChange(Long memberId, String string) {
String changedWord = badWordFiltering.change(string, symbols);

if (!changedWord.equals(string)) {
badWordLogRepository.save(BadWordLog.of(memberId, string));

String[] split = changedWord.split(" ");
List<String> result = new ArrayList<>();

for (String s : split) {
if (s.contains("♡")){
result.add(s.replaceAll(".", "♡"));
continue;
}
result.add(s);
}
return String.join(" ", result);
}

return changedWord;
}

private void readBadWords(String fileName) throws IOException {
Expand Down

0 comments on commit 0e1b86e

Please sign in to comment.