Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
languageVersion = JavaLanguageVersion.of(21)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
@Schema(description = "회원가입 응답")
public record SignupResponse(
@Schema(description = "회원 가입 완료 메세지")
String message
String message,
@Schema(description = "생성된 accessToken")
String accessToken,
@Schema(description = "생성된 refreshToken")
String refreshToken
) {
public static SignupResponse from(String message) {
return new SignupResponse(message);
public static SignupResponse from(String message, String accessToken, String refreshToken) {
return new SignupResponse(message, accessToken, refreshToken);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,36 +52,41 @@ public class AuthService {
이메일 회원가입
- 이미 가입된 이메일 거절
- 비밀번호 암호화
- 토큰 자동 발급 (자동 로그인)
*/
@Transactional
public SignupResponse signup(SignupRequest request) {
validateRequest(request);
userRegisterationProcess(request);
User createdUser = userRegisterationProcess(request);

return SignupResponse.from("회원가입이 완료되었습니다.");
// 회원가입 성공 후 자동 로그인을 위한 토큰 발급
String accessToken = createAccessToken(createdUser);
String refreshToken = createRefreshToken(createdUser);

return SignupResponse.from("회원가입이 완료되었습니다.", accessToken, refreshToken);
}

//1. 보낸 요청의 비밀번호&비밀번호확인이 일치하는지
private void validateRequest(SignupRequest request) {
userDomainService.checkEmailUnique(request.getEmail());
if (!request.getPassword().equals(request.getPasswordConfirm())){
throw new AuthException(AuthExceptionCode.PASSWORD_NOT_MATCH);
};
}
}

//2. 이미 다른 방식으로 회원가입한 유저인지 검증
private void userRegisterationProcess(SignupRequest request) {
private User userRegisterationProcess(SignupRequest request) {
String encodedPassword = userDomainService.encodePassword(request.getPassword());
User existUser = userDomainService.getUserByEmail(request.getEmail());
if ((existUser == null)) {
createNewUser(request, encodedPassword);
return createNewUser(request, encodedPassword);
} else {
updateExistingUser(existUser, encodedPassword);
return updateExistingUser(existUser, encodedPassword);
}
}

//3. 만약 아예 첫 가입 유저일 때
private void createNewUser(SignupRequest request, String encodedPassword) {
private User createNewUser(SignupRequest request, String encodedPassword) {
String nickname = userDomainService.generateUniqueNickname();
Language language = languageDomainService.getLanguage(1L); //기본적으로 1번 언어로 가입 시 세팅
User newUser = User.emailUser(
Expand All @@ -96,15 +101,17 @@ private void createNewUser(SignupRequest request, String encodedPassword) {
userDomainService.createUser(newUser);
userDomainService.createUserAuthType(new UserAuthType(newUser, AuthType.EMAIL));

return newUser;
}

//4. 만약 이전에 다른 방식으로 가입했었던(소셜) 회원일 때 -> UserAuthType테이블에 인증 방식만 추가
private void updateExistingUser(User existUser, String encodedPassword) {
private User updateExistingUser(User existUser, String encodedPassword) {
//로컬 가입(이메일)은 안되어있는데 소셜은 되어있는 경우이므로, UUID 비번을 사용자가 지정한 비번으로 변경한다.
// -> 이후 비번 변경하면 User테이블에서 변경하면됨.
existUser.modifyPassword(encodedPassword);
UserAuthType userAuthType = new UserAuthType(existUser, AuthType.EMAIL);
userDomainService.createUserAuthType(userAuthType);
return existUser;
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package org.ezcode.codetest.application.usermanagement.user.service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;

import org.ezcode.codetest.application.usermanagement.user.dto.response.GrantAdminRoleResponse;
import org.ezcode.codetest.application.usermanagement.user.dto.response.UserDailySolvedHistoryResponse;
import org.ezcode.codetest.application.usermanagement.user.dto.response.UserProfileImageResponse;
import org.ezcode.codetest.application.usermanagement.user.dto.response.UserReviewTokenResponse;
Expand All @@ -30,8 +26,6 @@
import org.ezcode.codetest.domain.user.model.entity.User;
import org.ezcode.codetest.domain.user.model.entity.UserAuthType;
import org.ezcode.codetest.domain.user.model.enums.AuthType;
import org.ezcode.codetest.domain.user.model.enums.UserRole;
import org.ezcode.codetest.domain.user.service.MailService;
import org.ezcode.codetest.domain.user.service.UserDomainService;
import org.ezcode.codetest.infrastructure.s3.S3Directory;
import org.ezcode.codetest.infrastructure.s3.S3Uploader;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
Expand Down Expand Up @@ -96,7 +95,7 @@ public static User emailUser(String email, String password, String username, Str
.nickname(nickname)
.age(age)
.tier(Tier.NEWBIE)
.role(UserRole.ADMIN) // 테스트용
.role(UserRole.USER)
.isDeleted(false)
.verified(false)
.gitPushStatus(false)
Expand Down