From c5cf62e6aee6cfca39119adbcdf9b2c5d8cd2518 Mon Sep 17 00:00:00 2001 From: dainnida Date: Wed, 26 Feb 2025 16:55:21 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[#114]=20Feat:=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=ED=92=80=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mercury/domain/user/entity/Adjective.java | 20 +++++++++++++++++++ .../cmc/mercury/domain/user/entity/Noun.java | 20 +++++++++++++++++++ .../user/repository/AdjectiveRepository.java | 13 ++++++++++++ .../user/repository/NounRepository.java | 14 +++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 src/main/java/com/cmc/mercury/domain/user/entity/Adjective.java create mode 100644 src/main/java/com/cmc/mercury/domain/user/entity/Noun.java create mode 100644 src/main/java/com/cmc/mercury/domain/user/repository/AdjectiveRepository.java create mode 100644 src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java diff --git a/src/main/java/com/cmc/mercury/domain/user/entity/Adjective.java b/src/main/java/com/cmc/mercury/domain/user/entity/Adjective.java new file mode 100644 index 0000000..bbb320b --- /dev/null +++ b/src/main/java/com/cmc/mercury/domain/user/entity/Adjective.java @@ -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; +} diff --git a/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java b/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java new file mode 100644 index 0000000..78accf9 --- /dev/null +++ b/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java @@ -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 = "adj_id") + private Long id; + + @Column(nullable = false, unique = true) + private String word; +} diff --git a/src/main/java/com/cmc/mercury/domain/user/repository/AdjectiveRepository.java b/src/main/java/com/cmc/mercury/domain/user/repository/AdjectiveRepository.java new file mode 100644 index 0000000..6465554 --- /dev/null +++ b/src/main/java/com/cmc/mercury/domain/user/repository/AdjectiveRepository.java @@ -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 { + + @Query("SELECT a FROM Adjective a ORDER BY FUNCTION('RAND') LIMIT 1") + Adjective findRandomAdjective(); +} diff --git a/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java b/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java new file mode 100644 index 0000000..d705260 --- /dev/null +++ b/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java @@ -0,0 +1,14 @@ +package com.cmc.mercury.domain.user.repository; + +import com.cmc.mercury.domain.user.entity.Adjective; +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 { + + @Query("SELECT n FROM Noun n ORDER BY FUNCTION('RAND') LIMIT 1") + Noun findRandomNoun(); +} From 3da50037be2946f34bb7cfa46dd724637ad38aae Mon Sep 17 00:00:00 2001 From: dainnida Date: Wed, 26 Feb 2025 16:58:00 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[#114]=20Refactor:=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=EB=90=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/cmc/mercury/domain/user/entity/Noun.java | 2 +- .../com/cmc/mercury/domain/user/repository/NounRepository.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java b/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java index 78accf9..333e1cb 100644 --- a/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java +++ b/src/main/java/com/cmc/mercury/domain/user/entity/Noun.java @@ -12,7 +12,7 @@ public class Noun { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "adj_id") + @Column(name = "noun_id") private Long id; @Column(nullable = false, unique = true) diff --git a/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java b/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java index d705260..ee56944 100644 --- a/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java +++ b/src/main/java/com/cmc/mercury/domain/user/repository/NounRepository.java @@ -1,13 +1,12 @@ package com.cmc.mercury.domain.user.repository; -import com.cmc.mercury.domain.user.entity.Adjective; 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 { +public interface NounRepository extends JpaRepository { @Query("SELECT n FROM Noun n ORDER BY FUNCTION('RAND') LIMIT 1") Noun findRandomNoun(); From 23555c8416aea74a91bfdfcacd010c2d6c4f6532 Mon Sep 17 00:00:00 2001 From: dainnida Date: Wed, 26 Feb 2025 17:16:02 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[#114]=20Feat:=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EB=9E=9C=EB=8D=A4=20=EB=B0=B0=EC=A0=95=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/repository/UserRepository.java | 2 ++ .../domain/user/service/UserService.java | 23 ++++++++++++++++--- .../service/CustomOAuth2UserService.java | 23 ++++++++++++++++--- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/cmc/mercury/domain/user/repository/UserRepository.java b/src/main/java/com/cmc/mercury/domain/user/repository/UserRepository.java index 34bb36e..2a3ffbf 100644 --- a/src/main/java/com/cmc/mercury/domain/user/repository/UserRepository.java +++ b/src/main/java/com/cmc/mercury/domain/user/repository/UserRepository.java @@ -19,4 +19,6 @@ public interface UserRepository extends JpaRepository { boolean existsByEmailAndOauthType(String email, OAuthType oauthType); Optional findByEmailAndOauthType(String email, OAuthType oAuthType); + + boolean existsByNickname(String nickname); } diff --git a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java index d1c265e..6f3aeb8 100644 --- a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java +++ b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java @@ -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; @@ -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) { @@ -62,6 +64,7 @@ public User createTestUser(UserTestRequest request) { User newUser = User.TestUserBuilder() .email(request.email()) + .nickname(assignNickname()) .TestUserBuild(); User savedUser = userRepository.save(newUser); @@ -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(); + + // 8자 이하 조건 확인 & 중복 닉네임 체크 + } while (userRepository.existsByNickname(nickname)); + + return nickname; + } } diff --git a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java index 13c8ba4..72b95d7 100644 --- a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java +++ b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java @@ -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; @@ -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 { @@ -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) @@ -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(); + + // 8자 이하 조건 확인 & 중복 닉네임 체크 + } while (userRepository.existsByNickname(nickname)); + + return nickname; + } } From 72b5fe2a9eae9cc48bde98e8e98c6c0eb1739ce8 Mon Sep 17 00:00:00 2001 From: dainnida Date: Wed, 26 Feb 2025 17:21:24 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[#114]=20Feat:=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EB=B9=8C=EB=8D=94=EC=97=90=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=EB=8F=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cmc/mercury/domain/user/entity/User.java | 10 +++++----- .../cmc/mercury/domain/user/service/UserService.java | 2 +- .../global/oauth/service/CustomOAuth2UserService.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cmc/mercury/domain/user/entity/User.java b/src/main/java/com/cmc/mercury/domain/user/entity/User.java index 0a63524..f3c58b0 100644 --- a/src/main/java/com/cmc/mercury/domain/user/entity/User.java +++ b/src/main/java/com/cmc/mercury/domain/user/entity/User.java @@ -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; @@ -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; @@ -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; diff --git a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java index 6f3aeb8..d3a7b0d 100644 --- a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java +++ b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java @@ -143,7 +143,7 @@ private String assignNickname() { Noun noun = nounRepository.findRandomNoun(); nickname = adj.getWord() + noun.getWord(); - // 8자 이하 조건 확인 & 중복 닉네임 체크 + // 닉네임 중복인지 체크 } while (userRepository.existsByNickname(nickname)); return nickname; diff --git a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java index 72b95d7..2bf5e5e 100644 --- a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java +++ b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java @@ -183,7 +183,7 @@ private String assignNickname() { Noun noun = nounRepository.findRandomNoun(); nickname = adj.getWord() + noun.getWord(); - // 8자 이하 조건 확인 & 중복 닉네임 체크 + // 닉네임 중복인지 체크 } while (userRepository.existsByNickname(nickname)); return nickname;