diff --git a/src/main/java/com/cmc/mercury/domain/user/entity/User.java b/src/main/java/com/cmc/mercury/domain/user/entity/User.java index 1dd68cb..0a63524 100644 --- a/src/main/java/com/cmc/mercury/domain/user/entity/User.java +++ b/src/main/java/com/cmc/mercury/domain/user/entity/User.java @@ -82,5 +82,7 @@ public void updateNickname(String nickname) { this.nickname = nickname; } - public void deleteUser() { this.userStatus = UserStatus.INACTIVE; } + public void updateUserStatus(UserStatus userStatus) { + this.userStatus = userStatus; + } } diff --git a/src/main/java/com/cmc/mercury/domain/user/service/SignOffService.java b/src/main/java/com/cmc/mercury/domain/user/service/SignOffService.java index cb43c35..f1e8aee 100644 --- a/src/main/java/com/cmc/mercury/domain/user/service/SignOffService.java +++ b/src/main/java/com/cmc/mercury/domain/user/service/SignOffService.java @@ -30,7 +30,7 @@ public User withdraw(User user) { throw new CustomException(ErrorCode.ALREADY_WITHDRAWN); } - user.deleteUser(); + user.updateUserStatus(UserStatus.INACTIVE); user.updateRefreshToken(null); // Refresh Token 삭제 return user; diff --git a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java index 77eb862..06d9092 100644 --- a/src/main/java/com/cmc/mercury/domain/user/service/UserService.java +++ b/src/main/java/com/cmc/mercury/domain/user/service/UserService.java @@ -2,6 +2,7 @@ import com.cmc.mercury.domain.user.entity.OAuthType; import com.cmc.mercury.domain.user.entity.User; +import com.cmc.mercury.domain.user.entity.UserStatus; import com.cmc.mercury.domain.user.repository.UserRepository; import com.cmc.mercury.domain.user.response.UserTestRequest; import com.cmc.mercury.global.exception.CustomException; @@ -46,6 +47,11 @@ public User createTestUser(UserTestRequest request) { if (existingUser != null) { + if (existingUser.getUserStatus() == UserStatus.INACTIVE) { + // 회원탈퇴한 유저 재가입 + existingUser.updateUserStatus(UserStatus.ACTIVE); + userRepository.save(existingUser); + } // 기존 유저가 있으면 로그인 처리 (토큰 갱신) setTestUserTokens(existingUser, request.isShortLivedAccessToken()); return existingUser; diff --git a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java index b01b724..f88dad6 100644 --- a/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java +++ b/src/main/java/com/cmc/mercury/global/oauth/service/CustomOAuth2UserService.java @@ -33,7 +33,7 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService { private final UserRepository userRepository; - private final AppleIdTokenVerifier appleIdTokenVerifier; + private final AppleIdTokenVerifier appleIdTokenVerifier; @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { @@ -98,10 +98,23 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic Optional existingUser = userRepository.findByOauthTypeAndOauthId(oAuthType, oauthId); boolean isNewUser = existingUser.isEmpty(); // 존재하지 않으면 회원가입 - User user = existingUser.orElseGet(() -> { + // 기존 유저 혹은 탈퇴한 사용자인지 확인 + User user; + if (!isNewUser) { + User existing = existingUser.get(); + if (existing.getUserStatus() == UserStatus.INACTIVE) { + log.info("탈퇴한 회원 재가입 - 상태를 ACTIVE로 변경"); + existing.updateUserStatus(UserStatus.ACTIVE); + isNewUser = true; + user = userRepository.save(existing); + } else { + user = existing; + } + } else { log.info("새로운 사용자 생성 시도"); - return createUser(oAuth2UserInfo); - }); + user = createUser(oAuth2UserInfo); + } + log.info("사용자 조회/생성 완료: userId={}", user.getId()); // 회원가입 여부를 Security Context에 저장 (OAuth2User에 포함)