Skip to content

Commit f0062b0

Browse files
mod&refact: 일반회원가입시 UUID 서버에서 생성하는 것으로 수정 및 회원가입코드 리팩토링
1 parent e7e85d0 commit f0062b0

File tree

5 files changed

+68
-78
lines changed

5 files changed

+68
-78
lines changed

ontime-back/src/main/java/devkor/ontime_back/controller/UserAuthController.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class UserAuthController {
3333
description = "회원가입 요청 JSON 데이터",
3434
required = true,
3535
content = @Content(
36-
schema = @Schema(type = "object", example = "{\"email\": \"user@example.com\", \"password\": \"password123\", \"name\": \"junbeom\", \"userSettingId\": \"a304cde3-8ee9-4054-971a-300aacc2177c\"}")
36+
schema = @Schema(type = "object", example = "{\"email\": \"user@example.com\", \"password\": \"password123\", \"name\": \"junbeom\"}")
3737
)
3838
)
3939
)
@@ -48,17 +48,8 @@ public class UserAuthController {
4848
})
4949
@PostMapping("/sign-up")
5050
public ResponseEntity<ApiResponseForm<UserInfoResponse>> signUp(HttpServletRequest request, HttpServletResponse response, @RequestBody UserSignUpDto userSignUpDto) throws Exception {
51-
User user = userAuthService.signUp(request, response, userSignUpDto);
51+
UserInfoResponse userSignUpResponse = userAuthService.signUp(request, response, userSignUpDto);
5252
String message = "회원가입이 성공적으로 완료되었습니다. 온보딩을 진행해주세요( /user/onboarding )";
53-
UserInfoResponse userSignUpResponse = UserInfoResponse.builder()
54-
.userId(user.getId())
55-
.name(user.getName())
56-
.email(user.getEmail())
57-
.role(user.getRole())
58-
.spareTime(user.getSpareTime())
59-
.note(user.getNote())
60-
.punctualityScore(user.getPunctualityScore())
61-
.build();
6253
return ResponseEntity.ok(ApiResponseForm.success(userSignUpResponse, message));
6354
}
6455

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
11
package devkor.ontime_back.dto;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Builder;
45
import lombok.Getter;
56
import lombok.NoArgsConstructor;
67

78
import java.util.UUID;
89

910
@NoArgsConstructor
11+
@AllArgsConstructor
1012
@Getter
13+
@Builder
1114
public class UserSignUpDto {
1215
// 자체 로그인 회원 가입 API에 RequestBody로 사용할 UserSignUpDto를 생성
1316
private String email;
1417
private String password;
1518
private String name;
16-
private UUID userSettingId;
17-
18-
@Builder
19-
public UserSignUpDto(String email, String password, String name, UUID userSettingId) {
20-
this.email = email;
21-
this.password = password;
22-
this.name = name;
23-
this.userSettingId = userSettingId;
24-
}
2519
}

ontime-back/src/main/java/devkor/ontime_back/service/UserAuthService.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import devkor.ontime_back.dto.ChangePasswordDto;
44
import devkor.ontime_back.dto.UserAdditionalInfoDto;
5+
import devkor.ontime_back.dto.UserInfoResponse;
56
import devkor.ontime_back.dto.UserSignUpDto;
67
import devkor.ontime_back.entity.Role;
78
import devkor.ontime_back.entity.User;
@@ -15,11 +16,13 @@
1516
import jakarta.servlet.http.HttpServletResponse;
1617
import lombok.RequiredArgsConstructor;
1718
import lombok.extern.slf4j.Slf4j;
19+
import org.jetbrains.annotations.NotNull;
1820
import org.springframework.security.crypto.password.PasswordEncoder;
1921
import org.springframework.stereotype.Service;
2022
import org.springframework.transaction.annotation.Transactional;
2123

2224
import java.util.NoSuchElementException;
25+
import java.util.UUID;
2326

2427
@Service
2528
@Transactional(readOnly = true)
@@ -41,51 +44,60 @@ public Long getUserIdFromToken(HttpServletRequest request) {
4144

4245
// 자체 로그인 회원가입
4346
@Transactional
44-
public User signUp(HttpServletRequest request, HttpServletResponse response, UserSignUpDto userSignUpDto) throws Exception {
45-
47+
public UserInfoResponse signUp(HttpServletRequest request, HttpServletResponse response, UserSignUpDto userSignUpDto) throws Exception {
4648
if (userRepository.findByEmail(userSignUpDto.getEmail()).isPresent()) {
4749
throw new GeneralException(ErrorCode.EMAIL_ALREADY_EXIST);
4850
}
49-
5051
if (userRepository.findByName(userSignUpDto.getName()).isPresent()) {
5152
throw new GeneralException(ErrorCode.NAME_ALREADY_EXIST);
5253
}
5354

54-
if (userSettingRepository.findByUserSettingId(userSignUpDto.getUserSettingId()).isPresent()) {
55-
throw new GeneralException(ErrorCode.USER_SETTING_ALREADY_EXIST);
56-
}
55+
User user = createUserAndUserSetting(userSignUpDto);
56+
createAndSendTokens(response, user);
57+
58+
return UserInfoResponse.builder()
59+
.userId(user.getId())
60+
.name(user.getName())
61+
.email(user.getEmail())
62+
.role(user.getRole())
63+
.spareTime(user.getSpareTime())
64+
.note(user.getNote())
65+
.punctualityScore(user.getPunctualityScore())
66+
.build();
67+
}
5768

69+
@NotNull
70+
private User createUserAndUserSetting(UserSignUpDto userSignUpDto) {
5871
// 자체 로그인시, USER로 설정
5972
User user = User.builder()
6073
.email(userSignUpDto.getEmail())
61-
.password(userSignUpDto.getPassword())
74+
.password(passwordEncoder.encode(userSignUpDto.getPassword()))
6275
.name(userSignUpDto.getName())
6376
.role(Role.GUEST)
6477
.punctualityScore((float)-1)
6578
.scheduleCountAfterReset(0)
6679
.latenessCountAfterReset(0)
6780
.build();
68-
// 비밀번호 암호화 후 저장
69-
user.passwordEncode(passwordEncoder);
7081

7182
// 사용자 앱 설정 세팅(pk와 fk만 세팅, 나머지는 디폴트설정값(엔티티에 정의)으로 생성됨)
7283
UserSetting userSetting = UserSetting.builder()
73-
.userSettingId(userSignUpDto.getUserSettingId())
84+
.userSettingId(UUID.randomUUID())
7485
.user(user)
7586
.build();
7687

7788
user.setUserSetting(userSetting);
7889
userRepository.save(user); //CASCADE옵션 덕분에 userRepository만 save해주면 됨(userSettingRepository는 save안해줘도 부모인 user를 따라 저장됨)
90+
return user;
91+
}
7992

93+
private void createAndSendTokens(HttpServletResponse response, User user) {
8094
String accessToken = jwtTokenProvider.createAccessToken(user.getEmail(), user.getId());
8195
String refreshToken = jwtTokenProvider.createRefreshToken();
8296

8397
jwtTokenProvider.sendAccessAndRefreshToken(response, accessToken, refreshToken);
8498

8599
user.updateRefreshToken(refreshToken);
86100
userRepository.saveAndFlush(user);
87-
88-
return user;
89101
}
90102

91103
@Transactional

ontime-back/src/test/java/devkor/ontime_back/controller/UserAuthControllerTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import devkor.ontime_back.TestSecurityConfig;
66
import devkor.ontime_back.dto.ChangePasswordDto;
77
import devkor.ontime_back.dto.UserAdditionalInfoDto;
8+
import devkor.ontime_back.dto.UserInfoResponse;
89
import devkor.ontime_back.dto.UserSignUpDto;
910
import devkor.ontime_back.entity.Role;
1011
import devkor.ontime_back.entity.User;
@@ -43,18 +44,16 @@ void signUp() throws Exception {
4344
.email("user@example.com")
4445
.name("junbeom")
4546
.password("password123")
46-
.userSettingId(UUID.fromString("a304cde3-8ee9-4054-971a-300aacc2177c"))
4747
.build();
4848

49-
User mockUser = User.builder()
50-
.id(1L)
51-
.email("user@example.com")
49+
UserInfoResponse userSignupResponse = UserInfoResponse.builder()
50+
.userId(1L)
5251
.name("junbeom")
53-
.password("password123")
52+
.email("user@example.com")
5453
.role(Role.USER)
5554
.build();
5655

57-
when(userAuthService.signUp(any(HttpServletRequest.class), any(HttpServletResponse.class),any(UserSignUpDto.class))).thenReturn(mockUser);
56+
when(userAuthService.signUp(any(HttpServletRequest.class), any(HttpServletResponse.class),any(UserSignUpDto.class))).thenReturn(userSignupResponse);
5857

5958
// when // then
6059
mockMvc.perform(

ontime-back/src/test/java/devkor/ontime_back/service/UserAuthServiceTest.java

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package devkor.ontime_back.service;
22

3+
import com.google.firebase.auth.UserInfo;
34
import devkor.ontime_back.dto.ChangePasswordDto;
45
import devkor.ontime_back.dto.UserAdditionalInfoDto;
6+
import devkor.ontime_back.dto.UserInfoResponse;
57
import devkor.ontime_back.dto.UserSignUpDto;
8+
import devkor.ontime_back.entity.Role;
69
import devkor.ontime_back.entity.User;
710
import devkor.ontime_back.entity.UserSetting;
811
import devkor.ontime_back.repository.UserRepository;
@@ -18,11 +21,16 @@
1821

1922
import java.util.Collection;
2023
import java.util.NoSuchElementException;
24+
import java.util.Optional;
2125
import java.util.UUID;
2226

2327
import static org.assertj.core.api.Assertions.assertThat;
2428
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2529
import static org.junit.jupiter.api.Assertions.*;
30+
import static org.mockito.ArgumentMatchers.any;
31+
import static org.mockito.ArgumentMatchers.anyString;
32+
import static org.mockito.Mockito.times;
33+
import static org.mockito.Mockito.verify;
2634

2735
@SpringBootTest
2836
class UserAuthServiceTest {
@@ -49,39 +57,43 @@ void tearDown() {
4957
userRepository.deleteAllInBatch();
5058
}
5159

52-
@DisplayName("회원정보를 받아 User테이블과 UserSetting테이블에 데이터를 생성하고 연관관계를 생성한다.(회원가입을 한다.)")
60+
@DisplayName("회원가입에 성공해 유저정보가 성공적으로 저장된다.")
5361
@Test
5462
void signUp() throws Exception {
5563
// given
56-
UserSignUpDto userSignUpDto = getUserSignUpDto("user@example.com", "password1234", "junbeom", "a304cde3-8ee9-4054-971a-300aacc2177c");
64+
UserSignUpDto userSignUpDto = getUserSignUpDto("user@example.com", "password1234", "junbeom");
5765

5866
// when
59-
User addedUser = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse, userSignUpDto);
60-
UserSetting userSetting = addedUser.getUserSetting();
67+
UserInfoResponse userSignupResponse = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse, userSignUpDto);
6168

6269
// then
63-
assertThat(addedUser.getId()).isNotNull();
64-
assertThat(addedUser)
65-
.extracting("email", "name", "punctualityScore", "scheduleCountAfterReset", "latenessCountAfterReset")
66-
.contains("user@example.com", "junbeom", -1f, 0, 0);
67-
assertThat(passwordEncoder.matches("password1234", addedUser.getPassword())).isTrue();
68-
assertThat(userSetting).isNotNull();
69-
assertThat(userSetting.getUserSettingId())
70-
.isEqualTo(UUID.fromString("a304cde3-8ee9-4054-971a-300aacc2177c"));
71-
70+
assertThat(userSignupResponse.getUserId()).isNotNull();
71+
assertThat(userSignupResponse)
72+
.extracting("email", "name", "spareTime", "note", "punctualityScore", "role")
73+
.contains("user@example.com", "junbeom", null, null, -1f, Role.GUEST);
74+
75+
Optional<User> addedUser = userRepository.findById(userSignupResponse.getUserId());
76+
assertThat(addedUser.isPresent()).isTrue();
77+
User user = addedUser.get();
78+
assertThat(user)
79+
.extracting("email", "imageUrl", "name", "spareTime", "note", "punctualityScore", "scheduleCountAfterReset", "latenessCountAfterReset","role")
80+
.contains("user@example.com", null, "junbeom", null, null, -1f, 0, 0, Role.GUEST);
81+
assertThat(passwordEncoder.matches("password1234", user.getPassword())).isTrue();
82+
assertThat(user.getRefreshToken()).isNotNull();
83+
assertThat(user.getUserSetting()).isNotNull();
7284
}
7385

7486
@DisplayName("이미 존재하는 이메일로 회원가입을 시도하는 경우 예외가 발생한다.")
7587
@Test
7688
void signUpWithExistingEmail() throws Exception {
7789
// given
78-
UserSignUpDto userSignUpDto1 = getUserSignUpDto("user@example.com", "password1234", "junbeom", "a304cde3-8ee9-4054-971a-300aacc2177c");
90+
UserSignUpDto userSignUpDto1 = getUserSignUpDto("user@example.com", "password1234", "junbeom");
7991

80-
UserSignUpDto userSignUpDto2 = getUserSignUpDto("user@example.com", "password1234", "junbeom2", "a304cde3-8ee9-4054-971a-300aacc2177d");
92+
UserSignUpDto userSignUpDto2 = getUserSignUpDto("user@example.com", "password1234", "junbeom2");
8193

8294
// when, then
83-
User addedUser1 = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto1);
84-
assertThat(addedUser1.getId()).isNotNull();
95+
UserInfoResponse userSignupResponse = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto1);
96+
assertThat(userSignupResponse.getUserId()).isNotNull();
8597

8698
assertThatThrownBy(() -> userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto2))
8799
.isInstanceOf(GeneralException.class)
@@ -92,36 +104,19 @@ void signUpWithExistingEmail() throws Exception {
92104
@Test
93105
void signUpWithExistingName() throws Exception {
94106
// given
95-
UserSignUpDto userSignUpDto1 = getUserSignUpDto("user@example.com", "password1234", "junbeom", "a304cde3-8ee9-4054-971a-300aacc2177c");
107+
UserSignUpDto userSignUpDto1 = getUserSignUpDto("user@example.com", "password1234", "junbeom");
96108

97-
UserSignUpDto userSignUpDto2 = getUserSignUpDto("user2@example.com", "password1234", "junbeom", "a304cde3-8ee9-4054-971a-300aacc2177d");
109+
UserSignUpDto userSignUpDto2 = getUserSignUpDto("user2@example.com", "password1234", "junbeom");
98110

99111
// when, then
100-
User addedUser1 = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto1);
101-
assertThat(addedUser1.getId()).isNotNull();
112+
UserInfoResponse userSignupResponse = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto1);
113+
assertThat(userSignupResponse.getUserId()).isNotNull();
102114

103115
assertThatThrownBy(() -> userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto2))
104116
.isInstanceOf(GeneralException.class)
105117
.hasMessage("이미 존재하는 이름입니다.");
106118
}
107119

108-
@DisplayName("이미 존재하는 유저세팅ID로 회원가입을 시도하는 경우 예외가 발생한다.")
109-
@Test
110-
void signUpWithExistingUserSettingId() throws Exception {
111-
// given
112-
UserSignUpDto userSignUpDto1 = getUserSignUpDto("user@example.com", "password1234", "junbeom", "a304cde3-8ee9-4054-971a-300aacc2177c");
113-
114-
UserSignUpDto userSignUpDto2 = getUserSignUpDto("user2@example.com", "password1234", "junbeom2", "a304cde3-8ee9-4054-971a-300aacc2177c");
115-
116-
// when, then
117-
User addedUser1 = userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto1);
118-
assertThat(addedUser1.getId()).isNotNull();
119-
120-
assertThatThrownBy(() -> userAuthService.signUp((HttpServletRequest) httpServletRequest, httpServletResponse,userSignUpDto2))
121-
.isInstanceOf(GeneralException.class)
122-
.hasMessage("이미 존재하는 userSettingId 입니다.");
123-
}
124-
125120
@DisplayName("(회원가입 직후) 유저의 추가정보 기입에 성공한다")
126121
@Test
127122
void addInfo() throws Exception {
@@ -286,12 +281,11 @@ void deleteUser(){
286281

287282

288283

289-
private UserSignUpDto getUserSignUpDto(String email, String password, String name, String userSettingId) {
284+
private UserSignUpDto getUserSignUpDto(String email, String password, String name) {
290285
UserSignUpDto userSignUpDto = UserSignUpDto.builder()
291286
.email(email)
292287
.password(password)
293288
.name(name)
294-
.userSettingId(UUID.fromString(userSettingId))
295289
.build();
296290
return userSignUpDto;
297291
}

0 commit comments

Comments
 (0)