diff --git a/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java b/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java new file mode 100644 index 00000000..182ef04e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.user.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "user") +public class UserProperties { + + private List forbiddenNicknames = new ArrayList<>(); + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8b96eede..cd9c4dd4 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.DepartmentResponse; @@ -34,6 +35,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final DepartmentRepository departmentRepository; + private final UserProperties userProperties; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -46,6 +48,10 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { + throw new BaseException(DUPLICATE_NICKNAME); + } + user.updateNickname(request.nickname()); } @@ -71,6 +77,9 @@ public Boolean validateDuplicatedEmail(String email) { } public Boolean validateDuplicatedNickname(String nickname) { + if (isForbiddenNickname(nickname)) { + return false; + } return !userRepository.existsByNickname(nickname); } @@ -109,4 +118,9 @@ public DepartmentResponse getDepartment(CustomUserDetails userDetails) { } return new DepartmentResponse(department.getName()); } + + private boolean isForbiddenNickname(String nickname) { + return userProperties.getForbiddenNicknames().stream() + .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); + } } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fc14e1c2..d2133024 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,11 @@ spring: profiles: -# include : prod -# include : dev - include : local -# include: test + # include : prod + # include : dev + include : local + # include: test + +user: + forbidden-nicknames: + - EAT-SSU + - EATSSU