diff --git a/src/main/java/org/ezcode/codetest/application/usermanagement/auth/dto/response/SignupResponse.java b/src/main/java/org/ezcode/codetest/application/usermanagement/auth/dto/response/SignupResponse.java index ba4ef32d..d9509204 100644 --- a/src/main/java/org/ezcode/codetest/application/usermanagement/auth/dto/response/SignupResponse.java +++ b/src/main/java/org/ezcode/codetest/application/usermanagement/auth/dto/response/SignupResponse.java @@ -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); } } diff --git a/src/main/java/org/ezcode/codetest/application/usermanagement/auth/service/AuthService.java b/src/main/java/org/ezcode/codetest/application/usermanagement/auth/service/AuthService.java index f7614d5b..dd17310f 100644 --- a/src/main/java/org/ezcode/codetest/application/usermanagement/auth/service/AuthService.java +++ b/src/main/java/org/ezcode/codetest/application/usermanagement/auth/service/AuthService.java @@ -52,13 +52,18 @@ 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. 보낸 요청의 비밀번호&비밀번호확인이 일치하는지 @@ -66,22 +71,22 @@ 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( @@ -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 diff --git a/src/main/java/org/ezcode/codetest/application/usermanagement/user/service/UserService.java b/src/main/java/org/ezcode/codetest/application/usermanagement/user/service/UserService.java index bf4ea115..2cda108d 100644 --- a/src/main/java/org/ezcode/codetest/application/usermanagement/user/service/UserService.java +++ b/src/main/java/org/ezcode/codetest/application/usermanagement/user/service/UserService.java @@ -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; @@ -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; diff --git a/src/main/java/org/ezcode/codetest/domain/user/model/entity/User.java b/src/main/java/org/ezcode/codetest/domain/user/model/entity/User.java index f09709e1..e03101b8 100644 --- a/src/main/java/org/ezcode/codetest/domain/user/model/entity/User.java +++ b/src/main/java/org/ezcode/codetest/domain/user/model/entity/User.java @@ -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; @@ -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)