From dd69a12bf3c305491ef104bb74387a1826588f1d Mon Sep 17 00:00:00 2001 From: Klaus Richarz Date: Fri, 17 Jan 2025 23:52:54 +0100 Subject: [PATCH] #469 Clean up soft-deleted timereports during employee order deletion. Added a repository method to hard delete soft-deleted timereports by employee order ID. Ensured these records are removed before allowing the deletion of the associated employee order, improving data consistency. --- .../tb/dailyreport/persistence/TimereportRepository.java | 6 ++++++ .../java/org/tb/dailyreport/service/TimereportService.java | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/org/tb/dailyreport/persistence/TimereportRepository.java b/src/main/java/org/tb/dailyreport/persistence/TimereportRepository.java index 83eb6aa3..5480cf0a 100644 --- a/src/main/java/org/tb/dailyreport/persistence/TimereportRepository.java +++ b/src/main/java/org/tb/dailyreport/persistence/TimereportRepository.java @@ -9,6 +9,8 @@ import java.util.Optional; import org.hibernate.jpa.HibernateHints; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.NativeQuery; import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.QueryHints; import org.springframework.data.repository.CrudRepository; @@ -138,4 +140,8 @@ where tr.employeeorder.id in (:ids) group by tr.employeeorder.id """) List getReportedMinutesForEmployeeordersAsMap(List ids); + @Modifying + @NativeQuery("DELETE FROM timereport t WHERE t.employeeorder_id = :employeeorderId and t.deleted = true") + int hardDeleteSoftDeletedByEmployeeorderId(Long employeeorderId); + } diff --git a/src/main/java/org/tb/dailyreport/service/TimereportService.java b/src/main/java/org/tb/dailyreport/service/TimereportService.java index 4e263325..01750523 100644 --- a/src/main/java/org/tb/dailyreport/service/TimereportService.java +++ b/src/main/java/org/tb/dailyreport/service/TimereportService.java @@ -625,6 +625,8 @@ void onEmployeeorderDelete(EmployeeorderDeleteEvent event) { .toList(); event.veto(errors); } + var deletedCount = timereportRepository.hardDeleteSoftDeletedByEmployeeorderId(employeeorderId); // ensure no soft deleted timereport exists + log.info("{} soft deleted timereports were deleted to allow deletion of employee order {}.", deletedCount, employeeorderId); } @EventListener