4343import org .springframework .stereotype .Service ;
4444import org .springframework .transaction .annotation .Transactional ;
4545
46+ import javax .persistence .EntityManager ;
47+ import javax .persistence .PersistenceContext ;
48+
4649@ Service
4750@ RequiredArgsConstructor
4851public class PublicCourseService {
4952 private static final Integer PAGE_SIZE = 10 ;
5053 private static List <Long > MARATHON_PUBLIC_COURSE_IDS ;
54+ private static final Long ADMIN_USER_ID = 280L ;
5155
5256 private final PublicCourseRepository publicCourseRepository ;
5357 private final UserRepository userRepository ;
5458 private final ScrapRepository scrapRepository ;
5559 private final CourseRepository courseRepository ;
5660
61+ @ PersistenceContext
62+ private EntityManager entityManager ;
63+
5764
5865 @ Value ("${runnect.marathon-public-course-id}" )
5966 private void setMARATHON_PUBLIC_COURSE_IDS (String MARATHON_PUBLIC_COURSE_ID ) {
@@ -350,8 +357,10 @@ public DeletePublicCoursesResponseDto deletePublicCourses(
350357 throw new NotFoundException (ErrorStatus .NOT_FOUND_PUBLICCOURSE_EXCEPTION , ErrorStatus .NOT_FOUND_PUBLICCOURSE_EXCEPTION .getMessage ());
351358 }
352359
360+ boolean isAdmin = userId .equals (ADMIN_USER_ID );
361+
353362 publicCourses .stream ()
354- .filter (pc -> !pc .getCourse ().getRunnectUser ().equals (user ))
363+ .filter (pc -> !isAdmin && ! pc .getCourse ().getRunnectUser ().equals (user ))
355364 .findAny ()
356365 .ifPresent (pc -> {
357366 throw new PermissionDeniedException (
@@ -362,6 +371,15 @@ public DeletePublicCoursesResponseDto deletePublicCourses(
362371 //삭제전 course의 isPrivate update
363372 publicCourses .forEach (publicCourse -> publicCourse .getCourse ().retrieveCourse ());
364373
374+ // Record의 publicCourse FK를 null로 설정 (Record 테이블 FK 제약조건 해제)
375+ entityManager .createQuery (
376+ "UPDATE Record r SET r.publicCourse = null WHERE r.publicCourse IN :publicCourses" )
377+ .setParameter ("publicCourses" , publicCourses )
378+ .executeUpdate ();
379+
380+ // Scrap 삭제 (Scrap 테이블 FK NOT NULL 제약조건)
381+ scrapRepository .deleteByPublicCourseIn (publicCourses );
382+
365383 publicCourseRepository .deleteAllInBatch (publicCourses );
366384
367385 return DeletePublicCoursesResponseDto .from (publicCourses .size ());
0 commit comments