[ADD] 사용자 삭제 시 연관 프로젝트 매핑 레코드 제거 로직 추가 및 프로젝트 삭제 시 연관 사용자 매핑 레코드 제거 처리

main
bjkim 9 months ago
parent b99b509c28
commit ba5dde3281

@ -5,8 +5,10 @@ import java.util.stream.Collectors;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import kr.re.etri.autoflow.repository.UserProjectMapRepository;
import kr.re.etri.autoflow.service.AuthService; import kr.re.etri.autoflow.service.AuthService;
import kr.re.etri.autoflow.service.UserService; import kr.re.etri.autoflow.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -61,6 +63,7 @@ public class AuthController {
RefreshTokenService refreshTokenService; RefreshTokenService refreshTokenService;
private final AuthService authService; private final AuthService authService;
private final UserProjectMapRepository userProjectMapRepository;
private final UserService userService; private final UserService userService;
@Operation(summary = "로그인", description = "사용자 인증 후 JWT 및 리프레시 토큰 쿠키를 반환합니다.") @Operation(summary = "로그인", description = "사용자 인증 후 JWT 및 리프레시 토큰 쿠키를 반환합니다.")
@ -75,11 +78,11 @@ public class AuthController {
} }
@Operation(summary = "회원가입", description = "새로운 사용자를 등록합니다.") @Operation(summary = "회원가입", description = "새로운 사용자를 등록합니다.")
@ApiResponses({ @ApiResponses({
@ApiResponse(responseCode = "200", description = "회원가입 성공"), @ApiResponse(responseCode = "200", description = "회원가입 성공"),
@ApiResponse(responseCode = "400", description = "중복된 사용자명 또는 이메일") @ApiResponse(responseCode = "400", description = "중복된 사용자명 또는 이메일")
}) })
@PostMapping("/signup") @PostMapping("/signup")
public ResponseEntity<?> registerUser(@Valid @RequestBody SignupRequest signUpRequest) { public ResponseEntity<?> registerUser(@Valid @RequestBody SignupRequest signUpRequest) {
if (userRepository.existsByUsername(signUpRequest.getUsername())) { if (userRepository.existsByUsername(signUpRequest.getUsername())) {
return ResponseEntity.badRequest().body(new MessageResponse(false,"오류: 이미 사용 중인 사용자 이름입니다.")); return ResponseEntity.badRequest().body(new MessageResponse(false,"오류: 이미 사용 중인 사용자 이름입니다."));
@ -244,13 +247,22 @@ public class AuthController {
@ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음") @ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음")
}) })
@DeleteMapping("/users/{id}") @DeleteMapping("/users/{id}")
@Transactional
public ResponseEntity<MessageResponse> deleteUser( public ResponseEntity<MessageResponse> deleteUser(
@Parameter(description = "사용자 ID", example = "1") @PathVariable Long id) { @Parameter(description = "사용자 ID", example = "1") @PathVariable Long id) {
return userRepository.findById(id).map(user -> { return userRepository.findById(id).map(user -> {
refreshTokenService.deleteByUserId(user.getId()); // 토큰 삭제 // 1. 리프레시 토큰 삭제
refreshTokenService.deleteByUserId(user.getId());
// 2. 사용자-프로젝트 맵 삭제
userProjectMapRepository.deleteAllByUserId(user.getId());
// 3. 사용자 삭제
userRepository.delete(user); userRepository.delete(user);
return ResponseEntity.ok(new MessageResponse(true, "사용자가 삭제되었습니다.")); return ResponseEntity.ok(new MessageResponse(true, "사용자가 삭제되었습니다."));
}).orElse(ResponseEntity.notFound().build()); }).orElse(ResponseEntity.notFound().build());
} }
} }

@ -13,7 +13,9 @@ public interface UserProjectMapRepository extends JpaRepository<UserProjectMapEn
Optional<UserProjectMapEntity> findByProjectAndUser(ProjectEntity project, User user); Optional<UserProjectMapEntity> findByProjectAndUser(ProjectEntity project, User user);
List<UserProjectMapEntity> findAllByProject(ProjectEntity project);
List<UserProjectMapEntity> findAllByUserId(Long userId); List<UserProjectMapEntity> findAllByUserId(Long userId);
void deleteAllByUserId(Long id);
void deleteAllByProjectId(Long id);
} }

@ -99,7 +99,13 @@ public class ProjectService {
if (!projectRepository.existsById(id)) { if (!projectRepository.existsById(id)) {
return false; return false;
} }
// 연관 레코드 삭제
userProjectMapRepository.deleteAllByProjectId(id);
// 프로젝트 삭제
projectRepository.deleteById(id); projectRepository.deleteById(id);
return true; return true;
} }
} }

Loading…
Cancel
Save