From 072ca5368d06d341cd561a224bb6a6b0bde66a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8C=E1=85=A1=E1=86=BC?= =?UTF-8?q?=E1=84=89=E1=85=AE=E1=86=AB?= Date: Thu, 22 Aug 2024 19:38:12 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[=E2=99=BB=EF=B8=8F=20refactor/#94]:=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EC=9E=AC=EB=B0=9C=EA=B8=89=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TokenGetResponseDto를 AccessTokenGetResponseDto로 대체하여 토큰 재발급 로직을 간소화. - AuthService 및 AuthServiceImpl에서 불필요한 리프레시 토큰 관련 코드 제거. - 새롭게 정의된AccessTokenGetResponseDto 클래스 추가. - 기존의 TokenGetResponseDto 클래스 삭제. --- .../controller/AuthController.java | 8 ++----- .../controller/swagger/AuthSwagger.java | 4 ++-- .../response/AccessTokenGetResponseDto.java | 19 +++++++++++++++++ .../auth/response/TokenGetResponseDto.java | 21 ------------------- .../terningserver/service/AuthService.java | 7 ++----- .../service/AuthServiceImpl.java | 20 +++++++++++++----- 6 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 src/main/java/org/terning/terningserver/dto/auth/response/AccessTokenGetResponseDto.java delete mode 100644 src/main/java/org/terning/terningserver/dto/auth/response/TokenGetResponseDto.java diff --git a/src/main/java/org/terning/terningserver/controller/AuthController.java b/src/main/java/org/terning/terningserver/controller/AuthController.java index 5584fe4..7066317 100644 --- a/src/main/java/org/terning/terningserver/controller/AuthController.java +++ b/src/main/java/org/terning/terningserver/controller/AuthController.java @@ -7,21 +7,18 @@ import org.springframework.web.bind.annotation.*; import org.terning.terningserver.controller.swagger.AuthSwagger; import org.terning.terningserver.domain.Filter; -import org.terning.terningserver.domain.User; import org.terning.terningserver.dto.auth.request.SignInRequestDto; import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto; import org.terning.terningserver.dto.auth.request.SignUpRequestDto; +import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; import org.terning.terningserver.dto.auth.response.SignUpFilterResponseDto; import org.terning.terningserver.dto.auth.response.SignUpResponseDto; -import org.terning.terningserver.dto.auth.response.TokenGetResponseDto; import org.terning.terningserver.exception.dto.SuccessResponse; import org.terning.terningserver.service.AuthService; import org.terning.terningserver.service.SignUpFilterService; import org.terning.terningserver.service.SignUpService; -import java.security.Principal; - import static org.terning.terningserver.exception.enums.SuccessMessage.*; @@ -44,9 +41,8 @@ public ResponseEntity> signIn( return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_IN, signInResponse)); } - // TODO: 에러 메시지 위치 @PostMapping("/token-reissue") - public ResponseEntity> reissueToken( + public ResponseEntity> reissueToken( @RequestHeader("Authorization") String refreshToken ) { val response = authService.reissueToken(refreshToken); diff --git a/src/main/java/org/terning/terningserver/controller/swagger/AuthSwagger.java b/src/main/java/org/terning/terningserver/controller/swagger/AuthSwagger.java index c1709d3..8f6c7fa 100644 --- a/src/main/java/org/terning/terningserver/controller/swagger/AuthSwagger.java +++ b/src/main/java/org/terning/terningserver/controller/swagger/AuthSwagger.java @@ -9,10 +9,10 @@ import org.terning.terningserver.dto.auth.request.SignInRequestDto; import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto; import org.terning.terningserver.dto.auth.request.SignUpRequestDto; +import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; import org.terning.terningserver.dto.auth.response.SignUpFilterResponseDto; import org.terning.terningserver.dto.auth.response.SignUpResponseDto; -import org.terning.terningserver.dto.auth.response.TokenGetResponseDto; import org.terning.terningserver.exception.dto.SuccessResponse; import java.security.Principal; @@ -27,7 +27,7 @@ ResponseEntity> signIn( ); @Operation(summary = "토큰 재발급", description = "토큰 재발급 API") - ResponseEntity> reissueToken( + ResponseEntity> reissueToken( @RequestHeader("Authorization") String refreshToken ); diff --git a/src/main/java/org/terning/terningserver/dto/auth/response/AccessTokenGetResponseDto.java b/src/main/java/org/terning/terningserver/dto/auth/response/AccessTokenGetResponseDto.java new file mode 100644 index 0000000..c3f5ed3 --- /dev/null +++ b/src/main/java/org/terning/terningserver/dto/auth/response/AccessTokenGetResponseDto.java @@ -0,0 +1,19 @@ +package org.terning.terningserver.dto.auth.response; + +import lombok.Builder; +import lombok.NonNull; +import org.terning.terningserver.domain.Token; + +import static lombok.AccessLevel.*; + +@Builder(access = PRIVATE) +public record AccessTokenGetResponseDto( + @NonNull String accessToken +) { + + public static AccessTokenGetResponseDto of(Token accessToken) { + return AccessTokenGetResponseDto.builder() + .accessToken(accessToken.getAccessToken()) + .build(); + } +} diff --git a/src/main/java/org/terning/terningserver/dto/auth/response/TokenGetResponseDto.java b/src/main/java/org/terning/terningserver/dto/auth/response/TokenGetResponseDto.java deleted file mode 100644 index 7d07a02..0000000 --- a/src/main/java/org/terning/terningserver/dto/auth/response/TokenGetResponseDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.terning.terningserver.dto.auth.response; - -import lombok.Builder; -import lombok.NonNull; -import org.terning.terningserver.domain.Token; - -import static lombok.AccessLevel.*; - -@Builder(access = PRIVATE) -public record TokenGetResponseDto( - @NonNull String accessToken, - @NonNull String refreshToken -) { - - public static TokenGetResponseDto of(Token token) { - return TokenGetResponseDto.builder() - .accessToken(token.getAccessToken()) - .refreshToken(token.getRefreshToken()) - .build(); - } -} diff --git a/src/main/java/org/terning/terningserver/service/AuthService.java b/src/main/java/org/terning/terningserver/service/AuthService.java index ff4c517..ef9dad5 100644 --- a/src/main/java/org/terning/terningserver/service/AuthService.java +++ b/src/main/java/org/terning/terningserver/service/AuthService.java @@ -1,19 +1,16 @@ package org.terning.terningserver.service; -import org.terning.terningserver.domain.User; import org.terning.terningserver.dto.auth.request.SignInRequestDto; +import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; -import org.terning.terningserver.dto.auth.response.TokenGetResponseDto; public interface AuthService { SignInResponseDto signIn(String authAccessToken, SignInRequestDto request); - User saveUser(SignInRequestDto request); - void signOut(long userId); void withdraw(long userId); - TokenGetResponseDto reissueToken(String refreshToken); + AccessTokenGetResponseDto reissueToken(String refreshToken); } diff --git a/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java b/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java index 3d5469e..e0a5d32 100644 --- a/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java +++ b/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java @@ -10,8 +10,8 @@ import org.terning.terningserver.domain.Token; import org.terning.terningserver.domain.User; import org.terning.terningserver.dto.auth.request.SignInRequestDto; +import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; -import org.terning.terningserver.dto.auth.response.TokenGetResponseDto; import org.terning.terningserver.domain.enums.AuthType; import org.terning.terningserver.exception.CustomException; import org.terning.terningserver.jwt.JwtTokenProvider; @@ -79,11 +79,10 @@ public void withdraw(long userId) { } @Override - public TokenGetResponseDto reissueToken(String refreshToken) { + public AccessTokenGetResponseDto reissueToken(String refreshToken) { val user = findUser(refreshToken); - Token token = getToken(user); - user.updateRefreshToken(token.getRefreshToken()); - return TokenGetResponseDto.of(token); + Token accessToken = getAccessToken(user); + return AccessTokenGetResponseDto.of(accessToken); } private String getAuthId(AuthType authType, String authAccessToken) { @@ -99,6 +98,11 @@ public Token getToken(User user) { return token; } + public Token getAccessToken(User user) { + val accessToken = generateAccessToken(new UserAuthentication(user.getId(), null, null)); + return accessToken; + } + private Token generateToken(Authentication authentication) { return Token.builder() .accessToken(jwtTokenProvider.generateToken(authentication, valueConfig.getAccessTokenExpired())) @@ -106,6 +110,12 @@ private Token generateToken(Authentication authentication) { .build(); } + private Token generateAccessToken(Authentication authentication) { + return Token.builder() + .accessToken(jwtTokenProvider.generateToken(authentication, valueConfig.getAccessTokenExpired())) + .build(); + } + private User findUser(long id) { return userRepository.findById(id).orElseThrow(() -> new CustomException(INVALID_USER)); } From 3e18889c33f5fa6dcc3b80c87b4e45b6bd61874e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8C=E1=85=A1=E1=86=BC?= =?UTF-8?q?=E1=84=89=E1=85=AE=E1=86=AB?= Date: Mon, 26 Aug 2024 23:50:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[=E2=99=BB=EF=B8=8F=20refactor/#101]:=20Sig?= =?UTF-8?q?nUpService=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=20=EB=B0=8F=20AuthService=EC=97=90=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EB=A1=9C=EC=A7=81=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `SignUpService` 클래스를 제거하고, 해당 로직을 `AuthService`로 통합하였습니다. - `AuthController`에서 `SignUpService`를 호출하던 부분을 `AuthService` 호출로 수정하였습니다. - 코드 중복을 줄이고, 회원가입 로직을 `AuthService`로 일원화하여 서비스 구조를 단순화하였습니다. --- .../controller/AuthController.java | 4 +- .../terningserver/service/AuthService.java | 4 ++ .../service/AuthServiceImpl.java | 19 +++++++--- .../terningserver/service/SignUpService.java | 38 ------------------- 4 files changed, 19 insertions(+), 46 deletions(-) delete mode 100644 src/main/java/org/terning/terningserver/service/SignUpService.java diff --git a/src/main/java/org/terning/terningserver/controller/AuthController.java b/src/main/java/org/terning/terningserver/controller/AuthController.java index 7066317..34f5df5 100644 --- a/src/main/java/org/terning/terningserver/controller/AuthController.java +++ b/src/main/java/org/terning/terningserver/controller/AuthController.java @@ -17,7 +17,6 @@ import org.terning.terningserver.exception.dto.SuccessResponse; import org.terning.terningserver.service.AuthService; import org.terning.terningserver.service.SignUpFilterService; -import org.terning.terningserver.service.SignUpService; import static org.terning.terningserver.exception.enums.SuccessMessage.*; @@ -28,7 +27,6 @@ public class AuthController implements AuthSwagger { private final AuthService authService; - private final SignUpService signUpService; private final SignUpFilterService signUpFilterService; @PostMapping("/sign-in") @@ -56,7 +54,7 @@ public ResponseEntity> signUp( @RequestBody SignUpRequestDto request ) { - SignUpResponseDto signUpResponseDto = signUpService.signUp(authId, request.name(), request.profileImage(), request.authType()); + SignUpResponseDto signUpResponseDto = authService.signUp(authId, request.name(), request.profileImage(), request.authType()); return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_UP, signUpResponseDto)); } diff --git a/src/main/java/org/terning/terningserver/service/AuthService.java b/src/main/java/org/terning/terningserver/service/AuthService.java index ef9dad5..82ef49a 100644 --- a/src/main/java/org/terning/terningserver/service/AuthService.java +++ b/src/main/java/org/terning/terningserver/service/AuthService.java @@ -1,13 +1,17 @@ package org.terning.terningserver.service; +import org.terning.terningserver.domain.enums.AuthType; import org.terning.terningserver.dto.auth.request.SignInRequestDto; import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; +import org.terning.terningserver.dto.auth.response.SignUpResponseDto; public interface AuthService { SignInResponseDto signIn(String authAccessToken, SignInRequestDto request); + SignUpResponseDto signUp(String authId, String name, Integer profileImage, AuthType authType); + void signOut(long userId); void withdraw(long userId); diff --git a/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java b/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java index e0a5d32..a8b7d11 100644 --- a/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java +++ b/src/main/java/org/terning/terningserver/service/AuthServiceImpl.java @@ -13,6 +13,7 @@ import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto; import org.terning.terningserver.dto.auth.response.SignInResponseDto; import org.terning.terningserver.domain.enums.AuthType; +import org.terning.terningserver.dto.auth.response.SignUpResponseDto; import org.terning.terningserver.exception.CustomException; import org.terning.terningserver.jwt.JwtTokenProvider; import org.terning.terningserver.jwt.UserAuthentication; @@ -57,11 +58,19 @@ public SignInResponseDto signIn(String authAccessToken, SignInRequestDto request } @Transactional - public User saveUser(SignInRequestDto request) { - User user = User.builder() - .authType(request.authType()) - .build(); - return userRepository.save(user); + public SignUpResponseDto signUp(String authId, String name, Integer profileImage, AuthType authType) { + + User user = userRepository.save(User.builder() + .authId(authId) + .name(name) + .authType(authType) + .profileImage(profileImage) + .build()); + + Token token = getToken(user); + userRepository.save(user); + + return SignUpResponseDto.of(token.getAccessToken(), token.getRefreshToken(), user.getId(), authType); } @Override diff --git a/src/main/java/org/terning/terningserver/service/SignUpService.java b/src/main/java/org/terning/terningserver/service/SignUpService.java deleted file mode 100644 index 4a832a8..0000000 --- a/src/main/java/org/terning/terningserver/service/SignUpService.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.terning.terningserver.service; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.terning.terningserver.domain.Token; -import org.terning.terningserver.domain.User; -import org.terning.terningserver.domain.enums.AuthType; -import org.terning.terningserver.dto.auth.response.SignUpResponseDto; -import org.terning.terningserver.exception.CustomException; -import org.terning.terningserver.repository.user.UserRepository; - -import static org.terning.terningserver.exception.enums.ErrorMessage.FAILED_SIGN_UP; - - -@Service -@RequiredArgsConstructor -public class SignUpService { - - private final UserRepository userRepository; - private final AuthServiceImpl authService; - - @Transactional - public SignUpResponseDto signUp(String authId, String name, Integer profileImage, AuthType authType) { - - User user = userRepository.save(User.builder() - .authId(authId) - .name(name) - .authType(authType) - .profileImage(profileImage) - .build()); - - Token token = authService.getToken(user); - userRepository.save(user); - - return SignUpResponseDto.of(token.getAccessToken(), token.getRefreshToken(), user.getId(), authType); - } -}