From ba5dde32814c4a51973b7ce3b34f5a9463fd48d9 Mon Sep 17 00:00:00 2001 From: bjkim Date: Mon, 29 Sep 2025 18:02:28 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=9C=20=EC=97=B0=EA=B4=80=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=EB=A7=A4=ED=95=91=20=EB=A0=88=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=EC=97=B0=EA=B4=80=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EB=A7=A4=ED=95=91=20=EB=A0=88=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autoflow/controllers/AuthController.java | 20 +++++++++++++++---- .../repository/UserProjectMapRepository.java | 6 ++++-- .../etri/autoflow/service/ProjectService.java | 6 ++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java b/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java index 15ceb85..3d7fec0 100644 --- a/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java +++ b/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java @@ -5,8 +5,10 @@ import java.util.stream.Collectors; import io.swagger.v3.oas.annotations.Parameter; import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.Transactional; import jakarta.validation.Valid; +import kr.re.etri.autoflow.repository.UserProjectMapRepository; import kr.re.etri.autoflow.service.AuthService; import kr.re.etri.autoflow.service.UserService; import lombok.RequiredArgsConstructor; @@ -61,6 +63,7 @@ public class AuthController { RefreshTokenService refreshTokenService; private final AuthService authService; + private final UserProjectMapRepository userProjectMapRepository; private final UserService userService; @Operation(summary = "로그인", description = "사용자 인증 후 JWT 및 리프레시 토큰 쿠키를 반환합니다.") @@ -75,11 +78,11 @@ public class AuthController { } @Operation(summary = "회원가입", description = "새로운 사용자를 등록합니다.") - @ApiResponses({ + @ApiResponses({ @ApiResponse(responseCode = "200", description = "회원가입 성공"), @ApiResponse(responseCode = "400", description = "중복된 사용자명 또는 이메일") - }) - @PostMapping("/signup") + }) + @PostMapping("/signup") public ResponseEntity registerUser(@Valid @RequestBody SignupRequest signUpRequest) { if (userRepository.existsByUsername(signUpRequest.getUsername())) { return ResponseEntity.badRequest().body(new MessageResponse(false,"오류: 이미 사용 중인 사용자 이름입니다.")); @@ -244,13 +247,22 @@ public class AuthController { @ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음") }) @DeleteMapping("/users/{id}") + @Transactional public ResponseEntity deleteUser( @Parameter(description = "사용자 ID", example = "1") @PathVariable Long id) { return userRepository.findById(id).map(user -> { - refreshTokenService.deleteByUserId(user.getId()); // 토큰 삭제 + // 1. 리프레시 토큰 삭제 + refreshTokenService.deleteByUserId(user.getId()); + + // 2. 사용자-프로젝트 맵 삭제 + userProjectMapRepository.deleteAllByUserId(user.getId()); + + // 3. 사용자 삭제 userRepository.delete(user); + return ResponseEntity.ok(new MessageResponse(true, "사용자가 삭제되었습니다.")); }).orElse(ResponseEntity.notFound().build()); } + } diff --git a/src/main/java/kr/re/etri/autoflow/repository/UserProjectMapRepository.java b/src/main/java/kr/re/etri/autoflow/repository/UserProjectMapRepository.java index 4bd4fec..66432e0 100644 --- a/src/main/java/kr/re/etri/autoflow/repository/UserProjectMapRepository.java +++ b/src/main/java/kr/re/etri/autoflow/repository/UserProjectMapRepository.java @@ -13,7 +13,9 @@ public interface UserProjectMapRepository extends JpaRepository findByProjectAndUser(ProjectEntity project, User user); - List findAllByProject(ProjectEntity project); - List findAllByUserId(Long userId); + + void deleteAllByUserId(Long id); + + void deleteAllByProjectId(Long id); } diff --git a/src/main/java/kr/re/etri/autoflow/service/ProjectService.java b/src/main/java/kr/re/etri/autoflow/service/ProjectService.java index c4c0d13..a340cf7 100644 --- a/src/main/java/kr/re/etri/autoflow/service/ProjectService.java +++ b/src/main/java/kr/re/etri/autoflow/service/ProjectService.java @@ -99,7 +99,13 @@ public class ProjectService { if (!projectRepository.existsById(id)) { return false; } + + // 연관 레코드 삭제 + userProjectMapRepository.deleteAllByProjectId(id); + + // 프로젝트 삭제 projectRepository.deleteById(id); return true; } + }