Skip to content

Commit 3bbae9e

Browse files
authored
feat : 닉네임 한글로 랜덤 생성 (#56)
1 parent 4c8b11b commit 3bbae9e

File tree

8 files changed

+67
-5
lines changed

8 files changed

+67
-5
lines changed

src/main/java/org/ezcode/codetest/domain/user/model/entity/User.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,25 +91,25 @@ public static User emailUser(String email, String password, String username, Str
9191
/*
9292
OAuth2로 로그인한 유저 저장
9393
*/
94-
public static User googleUser(String email, String username){
94+
public static User googleUser(String email, String username, String nickname){
9595
return User.builder()
9696
.email(email)
9797
.username(username)
9898
.authType(AuthType.GOOGLE)
99-
.nickname("user_" + UUID.randomUUID().toString().split("-")[0])//닉네임은 자동으로 생성해주고, 나중에 수정할 수 있도록 함
99+
.nickname(nickname)//닉네임은 자동으로 생성해주고, 나중에 수정할 수 있도록 함
100100
.tier(Tier.NEWBIE)
101101
.role(UserRole.USER)
102102
.isDeleted(false)
103103
.password(UUID.randomUUID().toString())
104104
.build();
105105
}
106106

107-
public static User githubUser(String email, String username){
107+
public static User githubUser(String email, String username,String nickname){
108108
return User.builder()
109109
.email(email)
110110
.username(username)
111111
.authType(AuthType.GITHUB)
112-
.nickname("user_" + UUID.randomUUID().toString().split("-")[0])//닉네임은 자동으로 생성해주고, 나중에 수정할 수 있도록 함
112+
.nickname(nickname)//닉네임은 자동으로 생성해주고, 나중에 수정할 수 있도록 함
113113
.tier(Tier.NEWBIE)
114114
.role(UserRole.USER)
115115
.password(UUID.randomUUID().toString())
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.ezcode.codetest.domain.user.model.enums;
2+
3+
public enum Adjective {
4+
멋있는, 용감한, 지혜로운, 화려한, 귀여운, 빠른, 우아한, 차분한, 활발한, 낙천적인,
5+
신중한, 다정한, 수줍은, 배려심깊은, 온화한, 고요한, 명랑한, 정직한, 활기찬, 친절한,
6+
대담한, 유쾌한, 상냥한, 유능한, 청명한, 명석한, 순수한, 부지런한, 용의주도한, 근면한,
7+
사려깊은, 명민한, 단호한, 냉철한, 호기심많은, 생기있는, 열정적인, 자유로운, 모험적인, 헌신적인,
8+
깔끔한, 독창적인, 진중한, 똑똑한, 실용적인, 신비한, 젠틀한, 유연한, 다재다능한, 배짱있는,
9+
순발력있는, 선량한, 인내심강한, 집중력있는, 민첩한, 풍부한, 과감한, 창의적인, 합리적인, 끈질긴,
10+
호감가는, 매력적인, 성실한, 강직한, 강한, 따뜻한, 겸손한, 깨끗한, 솔직한, 여유로운,
11+
정중한, 낭만적인, 조용한, 담백한, 균형잡힌, 용맹한, 재치있는, 평화로운, 반듯한, 침착한,
12+
성격좋은, 책임감있는, 다감한, 푸근한, 온순한, 시원한, 명쾌한, 적응력강한, 근엄한, 정돈된,
13+
유쾌발랄한, 기운찬, 생동감있는, 적극적인, 야무진, 통찰력있는, 포용력있는, 추진력있는, 자제력있는, 열의있는
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.ezcode.codetest.domain.user.model.enums;
2+
3+
public enum Noun {
4+
다람쥐, 여우, 사자, 독수리, 고양이, 토끼, 늑대, 부엉이, 코끼리, 호랑이,
5+
펭귄, 고래, 하마, 치타, 스컹크, 개미, 판다, 미어캣, 침팬지, 바다표범,
6+
거북이, 흑표범, 제비, 두루미, 수달, 기린, , 두더지, 캥거루, 백조,
7+
청설모, 돌고래, 까마귀, 다람이, 삽살개, 들소, 갈매기, 두꺼비, 족제비, 코뿔소,
8+
산양, 올빼미, 알파카, 스라소니, 수리부엉이, 원숭이, 문어, 뱀장어, 메추라기, 기러기,
9+
앵무새, 너구리, 청둥오리, 고슴도치, 사슴, 아르마딜로, , 버팔로, , ,
10+
까치, 도마뱀, 너털곰, 스컹크곰, 오소리, 타조, 얼룩말, 해달, 족제비쥐, 앵무,
11+
붉은여우, 산호, 코끼리개미, 사마귀, 박쥐, 해파리, 해마, 노루, 담비, 고라니,
12+
공작, 새우, , 독수리부엉이, , 고양이상어, 악어, 큰눈도롱뇽, 망토원숭이, 비버,
13+
코알라, 바다사자, 기린사슴, 비둘기, 토끼상어, 족제비상어, 검독수리, 황조롱이, 흰수염고래, 퓨마
14+
}

src/main/java/org/ezcode/codetest/domain/user/repository/UserRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@ public interface UserRepository {
1616
Optional<User> findUserById(Long id);
1717

1818
User findByEmailAndProvider(String email, String provider);
19+
20+
boolean existsByNickname(String nickname);
21+
1922
}

src/main/java/org/ezcode/codetest/domain/user/service/CustomOAuth2UserService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
2222

2323
private final UserRepository userRepository;
24+
private final UserDomainService userDomainService;
2425

2526
@Override
2627
@Transactional
@@ -51,10 +52,13 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
5152
User findUser = userRepository.getUserByEmail(oAuth2Response.getEmail());
5253

5354
if (findUser == null) {
54-
User newUser = User.googleUser(oAuth2Response.getEmail(), username);
55+
String nickname = userDomainService.generateUniqueNickname();
56+
User newUser = User.googleUser(oAuth2Response.getEmail(), username, nickname);
5557
log.info("newUser: {} 새로운 유저", newUser);
5658
try {
5759
userRepository.createUser(newUser);
60+
} catch (IllegalStateException e) {
61+
throw new OAuth2AuthenticationException("닉네임 생성 실패입니다");
5862
} catch (Exception e) {
5963
log.error("OAuth 사용자 생성 실패 : {}", e.getMessage());
6064
throw new OAuth2AuthenticationException("사용자 생성 실패입니다");

src/main/java/org/ezcode/codetest/domain/user/service/UserDomainService.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.ezcode.codetest.domain.user.service;
22

3+
import org.ezcode.codetest.domain.user.model.enums.Adjective;
4+
import org.ezcode.codetest.domain.user.model.enums.Noun;
35
import org.ezcode.codetest.domain.user.exception.AuthException;
46
import org.ezcode.codetest.domain.user.exception.AuthExceptionCode;
57
import org.ezcode.codetest.domain.user.model.entity.User;
@@ -18,6 +20,7 @@
1820
public class UserDomainService {
1921
private final UserRepository userRepository;
2022
private final PasswordEncoder passwordEncoder;
23+
private static final java.util.Random RANDOM = new java.util.Random();
2124

2225
public void checkEmailUnique(String email) {
2326
if (userRepository.findByEmail(email).isPresent()) {
@@ -67,4 +70,21 @@ public void isDeletedUser(User user) {
6770
throw new AuthException(AuthExceptionCode.ALREADY_WITHDRAW_USER);
6871
}
6972
}
73+
74+
public String generateUniqueNickname() {
75+
for (int i = 0; i < 10000000; i++) {
76+
String nickname = generateRandomNickname();
77+
if(!userRepository.existsByNickname(nickname)) {
78+
return nickname;
79+
}
80+
}
81+
throw new IllegalStateException("중복된 닉네임 생성 불가");
82+
}
83+
84+
private static String generateRandomNickname() {
85+
Adjective adjective = Adjective.values()[RANDOM.nextInt(Adjective.values().length)];
86+
Noun noun = Noun.values()[RANDOM.nextInt(Noun.values().length)];
87+
int number = RANDOM.nextInt(1000);
88+
return adjective.name() + noun.name() + number;
89+
}
7090
}

src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/user/UserJpaRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ public interface UserJpaRepository extends JpaRepository<User, Long> {
1010
User findUserByEmail(String email);
1111

1212
User findUserByEmailAndAuthType(String email, AuthType authType);
13+
14+
boolean existsByNickname(String nickname);
1315
}

src/main/java/org/ezcode/codetest/infrastructure/persistence/repository/user/UserRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,9 @@ public User findByEmailAndProvider(String email, String provider) {
3838
return userJpaRepository.findUserByEmailAndAuthType(email, AuthType.from(provider));
3939
}
4040

41+
@Override
42+
public boolean existsByNickname(String nickname) {
43+
return userJpaRepository.existsByNickname(nickname);
44+
}
45+
4146
}

0 commit comments

Comments
 (0)