[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 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 및 리프레시 토큰 쿠키를 반환합니다.")
@ -244,13 +247,22 @@ public class AuthController {
@ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음")
})
@DeleteMapping("/users/{id}")
@Transactional
public ResponseEntity<MessageResponse> 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());
}
}

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

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

Loading…
Cancel
Save