diff --git a/src/main/java/com/ureca/uble/domain/auth/controller/AuthController.java b/src/main/java/com/ureca/uble/domain/auth/controller/AuthController.java index 8533e454..d6c0f579 100644 --- a/src/main/java/com/ureca/uble/domain/auth/controller/AuthController.java +++ b/src/main/java/com/ureca/uble/domain/auth/controller/AuthController.java @@ -64,9 +64,10 @@ public CommonResponse logout(@CookieValue(value = "refreshToken", req @Operation(summary = "회원탈퇴", description = "isDeleted값을 true로 바꾸고 관련 정보를 삭제합니다.") public CommonResponse withdraw( @Parameter(description = "사용자정보", required = true) - @AuthenticationPrincipal Long userId + @AuthenticationPrincipal Long userId, + HttpServletResponse response ){ - return CommonResponse.success(authService.withdraw(userId)); + return CommonResponse.success(authService.withdraw(userId, response)); } } diff --git a/src/main/java/com/ureca/uble/domain/auth/service/AuthService.java b/src/main/java/com/ureca/uble/domain/auth/service/AuthService.java index d6b2d469..e0f25c0a 100644 --- a/src/main/java/com/ureca/uble/domain/auth/service/AuthService.java +++ b/src/main/java/com/ureca/uble/domain/auth/service/AuthService.java @@ -54,6 +54,10 @@ public User login(String code, HttpServletResponse response) { User user = userRepository.findByProviderId(kakaoId) .orElseGet(() -> userRepository.save(User.createTmpUser(kakaoId, nickname))); + if(user.getIsDeleted()) { + user.reactivate(); + } + String accessToken = jwtProvider.createAccessToken(user); String refreshToken = jwtProvider.createRefreshToken(user); LocalDateTime expiryTime = jwtProvider.getRefreshTokenExpiry(refreshToken); @@ -120,14 +124,14 @@ public void logout(String refreshToken, HttpServletResponse response){ } @Transactional - public WithdrawRes withdraw(Long userId) { + public WithdrawRes withdraw(Long userId, HttpServletResponse response) { User user = findUser(userId); if(user.getIsDeleted()){ throw new GlobalException(UserErrorCode.USER_ALREADY_DELETED); } - user.updateIsDeleted(); + user.updateIsDeletedAndRole(); tokenRepository.deleteByUser(user); pinRepository.deleteByUser(user); @@ -137,6 +141,9 @@ public WithdrawRes withdraw(Long userId) { feedbackRepository.deleteByUser(user); bookmarkRepository.deleteByUser(user); + jwtProvider.deleteRefreshTokenCookie(response); + jwtProvider.deleteAuthCheckCookie(response); + return new WithdrawRes(); } diff --git a/src/main/java/com/ureca/uble/entity/User.java b/src/main/java/com/ureca/uble/entity/User.java index 3f92eb35..0c3b061e 100644 --- a/src/main/java/com/ureca/uble/entity/User.java +++ b/src/main/java/com/ureca/uble/entity/User.java @@ -128,5 +128,10 @@ public void updateUserInfo(Rank rank, Gender gender, LocalDate birthDate, String } } - public void updateIsDeleted() { this.isDeleted = true; } + public void updateIsDeletedAndRole() { + this.isDeleted = true; + this.role = Role.TMP_USER; + } + + public void reactivate() { this.isDeleted = false; } } diff --git a/src/test/java/com/ureca/uble/domain/auth/service/AuthServiceTest.java b/src/test/java/com/ureca/uble/domain/auth/service/AuthServiceTest.java index a64c10a7..ea8dfd60 100644 --- a/src/test/java/com/ureca/uble/domain/auth/service/AuthServiceTest.java +++ b/src/test/java/com/ureca/uble/domain/auth/service/AuthServiceTest.java @@ -168,10 +168,10 @@ void withdrawSuccess(){ when(userRepository.findById(userId)).thenReturn(Optional.of(user)); //when - WithdrawRes res = authService.withdraw(userId); + WithdrawRes res = authService.withdraw(userId, response); //then - verify(user).updateIsDeleted(); + verify(user).updateIsDeletedAndRole(); verify(tokenRepository).deleteByUser(user); verify(pinRepository).deleteByUser(user); verify(userCategoryRepository).deleteByUser(user); @@ -191,7 +191,7 @@ void withdrawFail(){ when(userRepository.findById(userId)).thenReturn(Optional.empty()); //when, then - assertThrows(GlobalException.class, () -> authService.withdraw(userId)); + assertThrows(GlobalException.class, () -> authService.withdraw(userId, response)); verify(tokenRepository, never()).deleteByUser(any()); } }