diff --git a/refrigerator/.idea/modules/refrigerator.main.iml b/refrigerator/.idea/modules/refrigerator.main.iml
index 397c268..afc1871 100644
--- a/refrigerator/.idea/modules/refrigerator.main.iml
+++ b/refrigerator/.idea/modules/refrigerator.main.iml
@@ -4,20 +4,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/user/Follow.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/user/Follow.java
index 80eaa90..caaddfa 100644
--- a/refrigerator/src/main/java/moja/refrigerator/aggregate/user/Follow.java
+++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/user/Follow.java
@@ -12,11 +12,11 @@ public class Follow {
@Column(name = "follow_pk")
private long followPk;
- @ManyToOne
+ @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "follower")
private User follower;
- @ManyToOne
+ @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "following")
private User following;
}
diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/user/User.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/user/User.java
index 03eb039..524bcdc 100644
--- a/refrigerator/src/main/java/moja/refrigerator/aggregate/user/User.java
+++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/user/User.java
@@ -5,6 +5,7 @@
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDate;
+import java.util.List;
@Entity
@Table(name = "tbl_user")
@@ -33,4 +34,10 @@ public class User {
@Column(name = "user_role")
private String userRole = "ROLE_USER";
+
+ @OneToMany(mappedBy = "follower", cascade = CascadeType.REMOVE)
+ private List following;
+
+ @OneToMany(mappedBy = "following", cascade = CascadeType.REMOVE)
+ private List followers;
}
diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java b/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java
index c841068..5c716e1 100644
--- a/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java
+++ b/refrigerator/src/main/java/moja/refrigerator/controller/user/UserController.java
@@ -1,5 +1,7 @@
package moja.refrigerator.controller.user;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
import moja.refrigerator.dto.user.request.PasswordUpdateRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
@@ -60,4 +62,11 @@ public ResponseEntity> toggleFollow(@PathVariable Long userPk) {
followService.toggleFollow(userPk);
return ResponseEntity.ok().body("팔로우 상태가 변경되었습니다.");
}
+
+ // 회원 탈퇴
+ @PostMapping("/delete")
+ public ResponseEntity> delete(HttpServletRequest request, HttpServletResponse response) {
+ userService.deleteUser(request, response);
+ return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
+ }
}
diff --git a/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java b/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java
index cfb1abd..c999a75 100644
--- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java
+++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserService.java
@@ -1,5 +1,7 @@
package moja.refrigerator.service.user;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
import moja.refrigerator.dto.user.request.PasswordUpdateRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
@@ -10,4 +12,5 @@ public interface UserService {
void updateUser(UserUpdateRequest request);
void resetPassword(PasswordResetRequest request);
void updatePassword(PasswordUpdateRequest request);
+ void deleteUser(HttpServletRequest request, HttpServletResponse response);
}
diff --git a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java
index 7329781..7308101 100644
--- a/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java
+++ b/refrigerator/src/main/java/moja/refrigerator/service/user/UserServiceImpl.java
@@ -1,5 +1,7 @@
package moja.refrigerator.service.user;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import moja.refrigerator.aggregate.user.User;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
@@ -7,6 +9,7 @@
import moja.refrigerator.dto.user.request.UserCreateRequest;
import moja.refrigerator.dto.user.request.UserUpdateRequest;
import moja.refrigerator.exception.user.DuplicateUserException;
+import moja.refrigerator.jwt.LogoutFilter;
import moja.refrigerator.repository.user.UserRepository;
import moja.refrigerator.service.email.EmailService;
import org.modelmapper.ModelMapper;
@@ -28,6 +31,7 @@ public class UserServiceImpl implements UserService {
private final BCryptPasswordEncoder passwordEncoder;
private final ModelMapper modelMapper;
private final EmailService emailService;
+ private final LogoutFilter logoutFilter;
@Override
@Transactional
@@ -114,6 +118,22 @@ public void updatePassword(PasswordUpdateRequest request) {
user.setUserPw(passwordEncoder.encode(request.getNewPw()));
}
+ @Override
+ @Transactional
+ public void deleteUser(HttpServletRequest request, HttpServletResponse response) {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ String userId = authentication.getName();
+
+ User user = userRepository.findByUserId(userId)
+ .orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다."));
+
+ // 유저 삭제
+ userRepository.delete(user);
+
+ // 로그아웃 처리 (토큰 블랙리스트에 추가)
+ logoutFilter.logout(request, response, authentication);
+ }
+
private void checkDuplicateUser(UserCreateRequest request) {
List errors = new ArrayList<>();
if (userRepository.existsByUserId(request.getUserId())) {