Skip to content

Commit 95cda35

Browse files
committed
feat: 회원 탈퇴 기능 구현 (비활성화)
- `UserService`에 `deactivateAccount` 메서드 추가 - 사용자의 상태를 `DELETED`로 변경하고 개인정보 익명화 처리 - 모든 세션(리프레시 토큰)을 폐기하여 로그아웃 처리 - 탈퇴 시 예외 처리 로직 추가
1 parent c2b2502 commit 95cda35

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/main/java/com/back/domain/user/service/UserService.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.back.domain.user.service;
22

33
import com.back.domain.user.entity.User;
4+
import com.back.domain.user.enums.UserStatus;
45
import com.back.domain.user.repository.UserRepository;
6+
import com.back.global.exception.ServiceException;
7+
import com.back.global.jwt.refreshToken.service.RefreshTokenService;
58
import lombok.RequiredArgsConstructor;
69
import org.springframework.stereotype.Service;
710
import org.springframework.transaction.annotation.Transactional;
@@ -11,14 +14,27 @@
1114
public class UserService {
1215

1316
private final UserRepository userRepository;
17+
private final RefreshTokenService refreshTokenService;
1418

1519
@Transactional(readOnly = true)
1620
public User findById(Long id) {
1721
return userRepository.findById(id)
1822
.orElseThrow(() -> new IllegalArgumentException("User not found. id=" + id));
1923
}
2024

25+
@Transactional
26+
public void deactivateAccount(Long id) {
27+
User user = userRepository.findById(id)
28+
.orElseThrow(() -> new ServiceException(404, "사용자를 찾을 수 없습니다."));
2129

30+
if (user.getStatus() == UserStatus.DELETED) {
31+
throw new ServiceException(409, "이미 탈퇴한 사용자입니다.");
32+
}
2233

34+
user.markDeleted("탈퇴한 사용자");
35+
userRepository.save(user);
2336

24-
}
37+
// 모든 세션(리프레시 토큰) 폐기
38+
refreshTokenService.revokeAllForUser(id);
39+
}
40+
}

0 commit comments

Comments
 (0)