diff --git a/src/main/java/stackpot/stackpot/pot/repository/PotRepository.java b/src/main/java/stackpot/stackpot/pot/repository/PotRepository.java index d621b051..89eb4d57 100644 --- a/src/main/java/stackpot/stackpot/pot/repository/PotRepository.java +++ b/src/main/java/stackpot/stackpot/pot/repository/PotRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import stackpot.stackpot.pot.entity.Pot; import stackpot.stackpot.user.entity.enums.Role; @@ -56,9 +57,9 @@ public interface PotRepository extends JpaRepository { @Modifying @Query("DELETE FROM Pot f WHERE f.user.id = :userId") void deleteByUserId(@Param("userId") Long userId); - @Modifying - @Query("DELETE FROM Pot p WHERE p.user.id = :userId AND p.potId IN :potIds AND p.potStatus = 'RECRUITING'") - void deleteByUserIdAndPotIds(@Param("userId") Long userId, @Param("potIds") List potIds); +// @Modifying +// @Query("DELETE FROM Pot p WHERE p.user.id = :userId AND p.potId IN :potIds AND p.potStatus = 'RECRUITING'") +// void deleteByUserIdAndPotIds(@Param("userId") Long userId, @Param("potIds") List potIds); boolean existsByUserId(Long userId); // 지원자 수 기준으로 모든 Pot 정렬 @@ -85,4 +86,13 @@ List findIdsByUserIdAndStatus(@Param("userId") Long userId, @Query("select p.potId from Pot p where p.user.id = :userId and p.potStatus not in :statuses") List findIdsByUserIdAndStatusNotIn(@Param("userId") Long userId, @Param("statuses") List statuses); + + @Modifying @Transactional + @Query(""" + delete from Pot p + where p.user.id = :userId + and p.potId in :potIds + and p.potStatus = 'RECRUITING' + """) + void deleteByUserIdAndPotIds(@Param("userId") Long userId, @Param("potIds") List potIds); } diff --git a/src/main/java/stackpot/stackpot/pot/repository/PotSaveRepository.java b/src/main/java/stackpot/stackpot/pot/repository/PotSaveRepository.java index e2c94e0b..37949921 100644 --- a/src/main/java/stackpot/stackpot/pot/repository/PotSaveRepository.java +++ b/src/main/java/stackpot/stackpot/pot/repository/PotSaveRepository.java @@ -53,5 +53,12 @@ default Map countSavesByPotIds(List potIds) { void deleteAllByUserAndPots(@Param("user") User user, @Param("pots") List pots); List findByUser(User user); + + @Modifying + @Transactional void deleteByUser(User user); + + @Modifying @Transactional + @Query("delete from PotSave ps where ps.pot.potId in :potIds") + int deleteByPotIds(@Param("potIds") List potIds); } \ No newline at end of file diff --git a/src/main/java/stackpot/stackpot/user/scheduler/TempUserCleanupScheduler.java b/src/main/java/stackpot/stackpot/user/scheduler/TempUserCleanupScheduler.java index fdc67844..65e02701 100644 --- a/src/main/java/stackpot/stackpot/user/scheduler/TempUserCleanupScheduler.java +++ b/src/main/java/stackpot/stackpot/user/scheduler/TempUserCleanupScheduler.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import stackpot.stackpot.user.repository.TempUserRepository; import java.time.LocalDateTime; @@ -15,7 +16,8 @@ public class TempUserCleanupScheduler { private final TempUserRepository tempUserRepository; - @Scheduled(cron = "0 0 * * * *") // 매 정시 + @Scheduled(cron = "0 0 * * * *") + @Transactional// 매 정시 public void deleteOldTempUsers() { LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1); int deletedCount = tempUserRepository.deleteByCreatedAtBefore(oneHourAgo); diff --git a/src/main/java/stackpot/stackpot/user/service/UserCommandServiceImpl.java b/src/main/java/stackpot/stackpot/user/service/UserCommandServiceImpl.java index 0669d833..aa2a3916 100644 --- a/src/main/java/stackpot/stackpot/user/service/UserCommandServiceImpl.java +++ b/src/main/java/stackpot/stackpot/user/service/UserCommandServiceImpl.java @@ -408,6 +408,9 @@ public void handleCreatorPotDeletion(User user) { // PotApplication 삭제 potApplicationRepository.deleteByPotIds(recruitingPotIds); potRepository.deleteByUserIdAndPotIds(userId, recruitingPotIds); + potSaveRepository.deleteByPotIds(recruitingPotIds); + + potRepository.deleteByUserIdAndPotIds(userId, recruitingPotIds); } @@ -470,7 +473,7 @@ public void deletePotAndRelatedData(Pot pot) { potApplicationRepository.deleteByPotId(pot.getPotId()); potRecruitmentDetailsRepository.deleteByPot_PotId(pot.getPotId()); - + potSaveRepository.deleteByPotIds(List.of(pot.getPotId())); // Pot 삭제 potRepository.delete(pot);