diff --git a/api/pom.xml b/api/pom.xml
index 1d3cbb39..417c1c2c 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -6,7 +6,7 @@
ca.bc.gov.educ
educ-grad-trax-api
- 1.8.47
+ 1.8.48
educ-grad-trax-api
Ministry of Education GRAD TRAX API
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/repository/EventRepository.java b/api/src/main/java/ca/bc/gov/educ/api/trax/repository/EventRepository.java
index dd0455c8..9c3a7c33 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/repository/EventRepository.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/repository/EventRepository.java
@@ -2,8 +2,12 @@
import ca.bc.gov.educ.api.trax.model.entity.Event;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@@ -15,4 +19,9 @@ public interface EventRepository extends JpaRepository {
List findAllByEventStatusOrderByCreateDate(String eventStatus);
+ @Transactional
+ @Modifying
+ @Query("delete from Event where createDate <= :createDate")
+ void deleteByCreateDateBefore(LocalDateTime createDate);
+
}
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/repository/TraxUpdatedPubEventRepository.java b/api/src/main/java/ca/bc/gov/educ/api/trax/repository/TraxUpdatedPubEventRepository.java
index efca92be..f5dc8c45 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/repository/TraxUpdatedPubEventRepository.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/repository/TraxUpdatedPubEventRepository.java
@@ -1,10 +1,12 @@
package ca.bc.gov.educ.api.trax.repository;
import ca.bc.gov.educ.api.trax.model.entity.TraxUpdatedPubEvent;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@@ -38,4 +40,9 @@ public interface TraxUpdatedPubEventRepository extends JpaRepository findByEventStatusOrderByCreateDate(String eventStatus);
+ @Transactional
+ @Modifying
+ @Query("delete from TraxUpdatedPubEvent where createDate <= :createDate")
+ void deleteByCreateDateBefore(LocalDateTime createDate);
+
}
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/scheduler/PurgeOldRecordsScheduler.java b/api/src/main/java/ca/bc/gov/educ/api/trax/scheduler/PurgeOldRecordsScheduler.java
new file mode 100644
index 00000000..f494a5a0
--- /dev/null
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/scheduler/PurgeOldRecordsScheduler.java
@@ -0,0 +1,46 @@
+package ca.bc.gov.educ.api.trax.scheduler;
+
+import ca.bc.gov.educ.api.trax.repository.EventRepository;
+import ca.bc.gov.educ.api.trax.repository.TraxUpdatedPubEventRepository;
+import ca.bc.gov.educ.api.trax.util.EducGradTraxApiConstants;
+import jakarta.transaction.Transactional;
+import lombok.extern.slf4j.Slf4j;
+import net.javacrumbs.shedlock.core.LockAssert;
+import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+
+@Component
+@Slf4j
+public class PurgeOldRecordsScheduler {
+
+ private final EventRepository eventRepository;
+ private final TraxUpdatedPubEventRepository traxUpdatedPubEventRepository;
+ private final EducGradTraxApiConstants constants;
+
+ public PurgeOldRecordsScheduler(final EventRepository eventRepository,
+ final TraxUpdatedPubEventRepository traxUpdatedPubEventRepository,
+ final EducGradTraxApiConstants constants) {
+ this.eventRepository = eventRepository;
+ this.traxUpdatedPubEventRepository = traxUpdatedPubEventRepository;
+ this.constants = constants;
+ }
+
+ @Scheduled(cron = "${cron.scheduled.process.purge-old-records.run}")
+ @SchedulerLock(name = "PurgeOldRecordsLock",
+ lockAtLeastFor = "PT1H", lockAtMostFor = "PT1H") //midnight job so lock for an hour
+ @Transactional
+ public void purgeOldRecords() {
+ LockAssert.assertLocked();
+ final LocalDateTime createDateToCompare = this.calculateCreateDateBasedOnStaleEventInDays();
+ this.eventRepository.deleteByCreateDateBefore(createDateToCompare);
+ this.traxUpdatedPubEventRepository.deleteByCreateDateBefore(createDateToCompare);
+ }
+
+ private LocalDateTime calculateCreateDateBasedOnStaleEventInDays() {
+ final LocalDateTime currentTime = LocalDateTime.now();
+ return currentTime.minusDays(this.constants.getRecordsStaleInDays());
+ }
+}
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
index f30604cb..eea710ea 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
@@ -169,4 +169,7 @@ public class EducGradTraxApiConstants {
@Value("${cron.scheduled.process.trigger-jobs.read-trax-update.threshold}")
private int traxTriggersProcessingThreshold;
+ @Value("${cron.scheduled.process.purge-old-records.staleInDays}")
+ private int recordsStaleInDays;
+
}
diff --git a/api/src/main/resources/application.yaml b/api/src/main/resources/application.yaml
index 608aa98c..6d04ba17 100644
--- a/api/src/main/resources/application.yaml
+++ b/api/src/main/resources/application.yaml
@@ -131,6 +131,9 @@ cron:
lockAtLeastFor: ${CRON_SCHEDULED_TRIGGER_TRAX_UPDATES_LOCK_AT_LEAST_FOR}
lockAtMostFor: ${CRON_SCHEDULED_TRIGGER_TRAX_UPDATES_LOCK_AT_MOST_FOR}
threshold: ${CRON_SCHEDULED_TRIGGER_TRAX_UPDATES_THRESHOLD}
+ purge-old-records:
+ run: ${CRON_SCHEDULED_PURGE_OLD_RECORDS}
+ staleInDays: ${RECORDS_STALE_IN_DAYS}
#Incremental Trax Update
trax:
diff --git a/api/src/test/resources/application.yaml b/api/src/test/resources/application.yaml
index 339383b7..28f46de3 100644
--- a/api/src/test/resources/application.yaml
+++ b/api/src/test/resources/application.yaml
@@ -90,6 +90,9 @@ cron:
lockAtLeastFor: 800ms
lockAtMostFor: 900ms
threshold: 100
+ purge-old-records:
+ run: 0 30 0 * * *
+ staleInDays: 90
#Incremental Trax Update
trax: