Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/main/java/com/cmc/mercury/domain/user/entity/Adjective.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.cmc.mercury.domain.user.entity;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Entity
@Getter
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
public class Adjective {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "adj_id")
private Long id;

@Column(nullable = false, unique = true)
private String word;
}
20 changes: 20 additions & 0 deletions src/main/java/com/cmc/mercury/domain/user/entity/Noun.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.cmc.mercury.domain.user.entity;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Entity
@Getter
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
public class Noun {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "noun_id")
private Long id;

@Column(nullable = false, unique = true)
private String word;
}
10 changes: 5 additions & 5 deletions src/main/java/com/cmc/mercury/domain/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class User extends BaseEntity {
@Column(name = "user_id")
private Long id;

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

Expand Down Expand Up @@ -49,10 +49,10 @@ public class User extends BaseEntity {
private UserStatus userStatus;

@Builder
public User(String email, OAuthType oauthType,
public User(String email, String nickname, OAuthType oauthType,
String oauthId, UserStatus userStatus) {
this.email = email;
this.nickname = "Mercury";
this.nickname = nickname;
this.oauthType = oauthType;
this.oauthId = oauthId;
this.userStatus = userStatus;
Expand All @@ -61,9 +61,9 @@ public User(String email, OAuthType oauthType,

// 게스트용 생성자
@Builder(builderMethodName = "TestUserBuilder", buildMethodName = "TestUserBuild")
public User(String email) {
public User(String email, String nickname) {
this.email = email;
this.nickname = "TestUser";
this.nickname = nickname;
this.oauthType = OAuthType.TEST;
this.oauthId = UUID.randomUUID().toString();;
this.userStatus = UserStatus.ACTIVE;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.cmc.mercury.domain.user.repository;

import com.cmc.mercury.domain.user.entity.Adjective;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface AdjectiveRepository extends JpaRepository<Adjective, Long> {

@Query("SELECT a FROM Adjective a ORDER BY FUNCTION('RAND') LIMIT 1")
Adjective findRandomAdjective();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.cmc.mercury.domain.user.repository;

import com.cmc.mercury.domain.user.entity.Noun;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface NounRepository extends JpaRepository<Noun, Long> {

@Query("SELECT n FROM Noun n ORDER BY FUNCTION('RAND') LIMIT 1")
Noun findRandomNoun();
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmailAndOauthType(String email, OAuthType oauthType);

Optional<User> findByEmailAndOauthType(String email, OAuthType oAuthType);

boolean existsByNickname(String nickname);
}
23 changes: 20 additions & 3 deletions src/main/java/com/cmc/mercury/domain/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import com.cmc.mercury.domain.mypage.entity.Habit;
import com.cmc.mercury.domain.mypage.repository.HabitRepository;
import com.cmc.mercury.domain.user.entity.OAuthType;
import com.cmc.mercury.domain.user.entity.User;
import com.cmc.mercury.domain.user.entity.UserStatus;
import com.cmc.mercury.domain.user.entity.*;
import com.cmc.mercury.domain.user.repository.AdjectiveRepository;
import com.cmc.mercury.domain.user.repository.NounRepository;
import com.cmc.mercury.domain.user.repository.UserRepository;
import com.cmc.mercury.domain.user.response.UserTestRequest;
import com.cmc.mercury.global.exception.CustomException;
Expand Down Expand Up @@ -37,6 +37,8 @@ public class UserService {
private final JwtProvider jwtProvider;
private final HttpServletResponse response;
private final HabitRepository habitRepository;
private final AdjectiveRepository adjectiveRepository;
private final NounRepository nounRepository;

@Transactional
public User createTestUser(UserTestRequest request) {
Expand All @@ -62,6 +64,7 @@ public User createTestUser(UserTestRequest request) {

User newUser = User.TestUserBuilder()
.email(request.email())
.nickname(assignNickname())
.TestUserBuild();

User savedUser = userRepository.save(newUser);
Expand Down Expand Up @@ -131,4 +134,18 @@ public User getUser(String accessToken) {
// 유효성 검증이 완료된 토큰에서 user 추출
return jwtProvider.getUserFromToken(accessToken);
}

private String assignNickname() {

String nickname;
do {
Adjective adj = adjectiveRepository.findRandomAdjective();
Noun noun = nounRepository.findRandomNoun();
nickname = adj.getWord() + noun.getWord();

// 닉네임 중복인지 체크
} while (userRepository.existsByNickname(nickname));

return nickname;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.auth0.jwt.interfaces.DecodedJWT;
import com.cmc.mercury.domain.mypage.entity.Habit;
import com.cmc.mercury.domain.mypage.repository.HabitRepository;
import com.cmc.mercury.domain.user.entity.OAuthType;
import com.cmc.mercury.domain.user.entity.User;
import com.cmc.mercury.domain.user.entity.UserStatus;
import com.cmc.mercury.domain.user.entity.*;
import com.cmc.mercury.domain.user.repository.AdjectiveRepository;
import com.cmc.mercury.domain.user.repository.NounRepository;
import com.cmc.mercury.domain.user.repository.UserRepository;
import com.cmc.mercury.global.exception.CustomException;
import com.cmc.mercury.global.exception.ErrorCode;
Expand Down Expand Up @@ -37,6 +37,8 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
private final UserRepository userRepository;
private final AppleIdTokenVerifier appleIdTokenVerifier;
private final HabitRepository habitRepository;
private final AdjectiveRepository adjectiveRepository;
private final NounRepository nounRepository;

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

User user = User.builder()
.email(oAuth2UserInfo.getEmail())
.nickname(assignNickname())
.oauthType(oAuth2UserInfo.getOAuthType())
.oauthId(oAuth2UserInfo.getOAuthId())
.userStatus(UserStatus.ACTIVE)
Expand All @@ -171,4 +174,18 @@ private User createUser(OAuth2UserInfo oAuth2UserInfo) {

return savedUser;
}

private String assignNickname() {

String nickname;
do {
Adjective adj = adjectiveRepository.findRandomAdjective();
Noun noun = nounRepository.findRandomNoun();
nickname = adj.getWord() + noun.getWord();

// 닉네임 중복인지 체크
} while (userRepository.existsByNickname(nickname));

return nickname;
}
}