Skip to content

Commit 39aa0ec

Browse files
authored
[Feature] 닉네임 랜덤 배정 로직 구현
[CI/CD] dev 브랜치 최신화 반영하여 배포
2 parents 3de9492 + 12e5cb1 commit 39aa0ec

File tree

8 files changed

+113
-11
lines changed

8 files changed

+113
-11
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.cmc.mercury.domain.user.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AccessLevel;
5+
import lombok.Getter;
6+
import lombok.RequiredArgsConstructor;
7+
8+
@Entity
9+
@Getter
10+
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
11+
public class Adjective {
12+
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
@Column(name = "adj_id")
16+
private Long id;
17+
18+
@Column(nullable = false, unique = true)
19+
private String word;
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.cmc.mercury.domain.user.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AccessLevel;
5+
import lombok.Getter;
6+
import lombok.RequiredArgsConstructor;
7+
8+
@Entity
9+
@Getter
10+
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
11+
public class Noun {
12+
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
@Column(name = "noun_id")
16+
private Long id;
17+
18+
@Column(nullable = false, unique = true)
19+
private String word;
20+
}

src/main/java/com/cmc/mercury/domain/user/entity/User.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class User extends BaseEntity {
2020
@Column(name = "user_id")
2121
private Long id;
2222

23-
// @Column(nullable = false)
23+
@Column(nullable = false)
2424
// @Column(length = 30) // DB 컬럼 길이 제한 -> 바이트 단위라 한글을 위해 여유 있게
2525
private String nickname;
2626

@@ -49,10 +49,10 @@ public class User extends BaseEntity {
4949
private UserStatus userStatus;
5050

5151
@Builder
52-
public User(String email, OAuthType oauthType,
52+
public User(String email, String nickname, OAuthType oauthType,
5353
String oauthId, UserStatus userStatus) {
5454
this.email = email;
55-
this.nickname = "Mercury";
55+
this.nickname = nickname;
5656
this.oauthType = oauthType;
5757
this.oauthId = oauthId;
5858
this.userStatus = userStatus;
@@ -61,9 +61,9 @@ public User(String email, OAuthType oauthType,
6161

6262
// 게스트용 생성자
6363
@Builder(builderMethodName = "TestUserBuilder", buildMethodName = "TestUserBuild")
64-
public User(String email) {
64+
public User(String email, String nickname) {
6565
this.email = email;
66-
this.nickname = "TestUser";
66+
this.nickname = nickname;
6767
this.oauthType = OAuthType.TEST;
6868
this.oauthId = UUID.randomUUID().toString();;
6969
this.userStatus = UserStatus.ACTIVE;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.cmc.mercury.domain.user.repository;
2+
3+
import com.cmc.mercury.domain.user.entity.Adjective;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface AdjectiveRepository extends JpaRepository<Adjective, Long> {
10+
11+
@Query("SELECT a FROM Adjective a ORDER BY FUNCTION('RAND') LIMIT 1")
12+
Adjective findRandomAdjective();
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.cmc.mercury.domain.user.repository;
2+
3+
import com.cmc.mercury.domain.user.entity.Noun;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface NounRepository extends JpaRepository<Noun, Long> {
10+
11+
@Query("SELECT n FROM Noun n ORDER BY FUNCTION('RAND') LIMIT 1")
12+
Noun findRandomNoun();
13+
}

src/main/java/com/cmc/mercury/domain/user/repository/UserRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ public interface UserRepository extends JpaRepository<User, Long> {
1919
boolean existsByEmailAndOauthType(String email, OAuthType oauthType);
2020

2121
Optional<User> findByEmailAndOauthType(String email, OAuthType oAuthType);
22+
23+
boolean existsByNickname(String nickname);
2224
}

src/main/java/com/cmc/mercury/domain/user/service/UserService.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.cmc.mercury.domain.mypage.entity.Habit;
44
import com.cmc.mercury.domain.mypage.repository.HabitRepository;
5-
import com.cmc.mercury.domain.user.entity.OAuthType;
6-
import com.cmc.mercury.domain.user.entity.User;
7-
import com.cmc.mercury.domain.user.entity.UserStatus;
5+
import com.cmc.mercury.domain.user.entity.*;
6+
import com.cmc.mercury.domain.user.repository.AdjectiveRepository;
7+
import com.cmc.mercury.domain.user.repository.NounRepository;
88
import com.cmc.mercury.domain.user.repository.UserRepository;
99
import com.cmc.mercury.domain.user.response.UserTestRequest;
1010
import com.cmc.mercury.global.exception.CustomException;
@@ -37,6 +37,8 @@ public class UserService {
3737
private final JwtProvider jwtProvider;
3838
private final HttpServletResponse response;
3939
private final HabitRepository habitRepository;
40+
private final AdjectiveRepository adjectiveRepository;
41+
private final NounRepository nounRepository;
4042

4143
@Transactional
4244
public User createTestUser(UserTestRequest request) {
@@ -62,6 +64,7 @@ public User createTestUser(UserTestRequest request) {
6264

6365
User newUser = User.TestUserBuilder()
6466
.email(request.email())
67+
.nickname(assignNickname())
6568
.TestUserBuild();
6669

6770
User savedUser = userRepository.save(newUser);
@@ -131,4 +134,18 @@ public User getUser(String accessToken) {
131134
// 유효성 검증이 완료된 토큰에서 user 추출
132135
return jwtProvider.getUserFromToken(accessToken);
133136
}
137+
138+
private String assignNickname() {
139+
140+
String nickname;
141+
do {
142+
Adjective adj = adjectiveRepository.findRandomAdjective();
143+
Noun noun = nounRepository.findRandomNoun();
144+
nickname = adj.getWord() + noun.getWord();
145+
146+
// 닉네임 중복인지 체크
147+
} while (userRepository.existsByNickname(nickname));
148+
149+
return nickname;
150+
}
134151
}

src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import com.auth0.jwt.interfaces.DecodedJWT;
44
import com.cmc.mercury.domain.mypage.entity.Habit;
55
import com.cmc.mercury.domain.mypage.repository.HabitRepository;
6-
import com.cmc.mercury.domain.user.entity.OAuthType;
7-
import com.cmc.mercury.domain.user.entity.User;
8-
import com.cmc.mercury.domain.user.entity.UserStatus;
6+
import com.cmc.mercury.domain.user.entity.*;
7+
import com.cmc.mercury.domain.user.repository.AdjectiveRepository;
8+
import com.cmc.mercury.domain.user.repository.NounRepository;
99
import com.cmc.mercury.domain.user.repository.UserRepository;
1010
import com.cmc.mercury.global.exception.CustomException;
1111
import com.cmc.mercury.global.exception.ErrorCode;
@@ -37,6 +37,8 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
3737
private final UserRepository userRepository;
3838
private final AppleIdTokenVerifier appleIdTokenVerifier;
3939
private final HabitRepository habitRepository;
40+
private final AdjectiveRepository adjectiveRepository;
41+
private final NounRepository nounRepository;
4042

4143
@Override
4244
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
@@ -155,6 +157,7 @@ private User createUser(OAuth2UserInfo oAuth2UserInfo) {
155157

156158
User user = User.builder()
157159
.email(oAuth2UserInfo.getEmail())
160+
.nickname(assignNickname())
158161
.oauthType(oAuth2UserInfo.getOAuthType())
159162
.oauthId(oAuth2UserInfo.getOAuthId())
160163
.userStatus(UserStatus.ACTIVE)
@@ -171,4 +174,18 @@ private User createUser(OAuth2UserInfo oAuth2UserInfo) {
171174

172175
return savedUser;
173176
}
177+
178+
private String assignNickname() {
179+
180+
String nickname;
181+
do {
182+
Adjective adj = adjectiveRepository.findRandomAdjective();
183+
Noun noun = nounRepository.findRandomNoun();
184+
nickname = adj.getWord() + noun.getWord();
185+
186+
// 닉네임 중복인지 체크
187+
} while (userRepository.existsByNickname(nickname));
188+
189+
return nickname;
190+
}
174191
}

0 commit comments

Comments
 (0)