Skip to content

Commit 738e22d

Browse files
committed
feat: 공개 코스 삭제 시 FK 제약 조건 해소
- Record.publicCourse null 처리 (기존 엔티티 관계 활용) - Scrap 행 삭제 (기존 repository 메서드 활용) - deleteAllInBatch → deleteAll 변경 (Hibernate ActionQueue 순서 보장)
1 parent d8fc591 commit 738e22d

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

src/main/java/org/runnect/server/publicCourse/service/PublicCourseService.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.runnect.server.common.exception.PermissionDeniedException;
1414
import org.runnect.server.common.module.convert.CoordinatePathConverter;
1515
import org.runnect.server.course.entity.Course;
16+
import org.runnect.server.record.entity.Record;
1617
import org.runnect.server.course.repository.CourseRepository;
1718
import org.runnect.server.publicCourse.dto.request.CreatePublicCourseRequestDto;
1819
import org.runnect.server.publicCourse.dto.request.DeletePublicCoursesRequestDto;
@@ -365,7 +366,16 @@ public DeletePublicCoursesResponseDto deletePublicCourses(
365366
//삭제전 course의 isPrivate update
366367
publicCourses.forEach(publicCourse -> publicCourse.getCourse().retrieveCourse());
367368

368-
publicCourseRepository.deleteAllInBatch(publicCourses);
369+
// FK 제약 조건 해소: Record.public_course_id (NULLABLE) → null 처리
370+
publicCourses.forEach(publicCourse ->
371+
publicCourse.getRecords().forEach(Record::setPublicCourseNull)
372+
);
373+
374+
// FK 제약 조건 해소: Scrap.public_course_id (NOT NULL) → 행 삭제
375+
scrapRepository.deleteByPublicCourseIn(publicCourses);
376+
377+
// deleteAll: Hibernate ActionQueue가 UPDATE → DELETE 순서 보장
378+
publicCourseRepository.deleteAll(publicCourses);
369379

370380
return DeletePublicCoursesResponseDto.from(publicCourses.size());
371381
}

0 commit comments

Comments
 (0)