diff --git a/api/pom.xml b/api/pom.xml index 7772c9ab..74e6d433 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ ca.bc.gov.educ educ-grad-batch-graduation-api - 1.8.54 + 1.8.55 educ-grad-batch-graduation-api Ministry of Education GRAD BATCH GRADUATION API diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/config/BatchJobLauncher.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/config/BatchJobLauncher.java index c2789099..8c7ec12f 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/config/BatchJobLauncher.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/config/BatchJobLauncher.java @@ -146,4 +146,17 @@ public void refreshUserScheduledQueue() { LOGGER.info(BATCH_ENDED); } + + @Scheduled(cron = "${batch.purge-old-records.cron}") + @SchedulerLock(name = "PurgeOldRecordsLock", + lockAtLeastFor = "PT1H", lockAtMostFor = "PT1H") //midnight job so lock for an hour + public void purgeOldRecords() { + LockAssert.assertLocked(); + try { + this.gradDashboardService.purgeOldBatchHistoryRecords(); + this.gradDashboardService.purgeOldSpringMetaDataRecords(); + } catch (Exception e) { + LOGGER.error(ERROR_MSG, e.getLocalizedMessage()); + } + } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchJobExecutionContextEntity.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchJobExecutionContextEntity.java index 36da6f86..dcaff691 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchJobExecutionContextEntity.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchJobExecutionContextEntity.java @@ -11,7 +11,7 @@ public class BatchJobExecutionContextEntity { @Id @Column(name = "JOB_EXECUTION_ID", nullable = false) - private Long id; + private Long jobExecutionId; @Column(name = "SHORT_CONTEXT", nullable = false, length = 2500) private String shortContext; diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionContextEntity.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionContextEntity.java index 0d0e684f..6668826c 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionContextEntity.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionContextEntity.java @@ -10,7 +10,7 @@ public class BatchStepExecutionContextEntity { @Id @Column(name = "STEP_EXECUTION_ID", nullable = false) - private Long id; + private Long stepExecutionId; @Column(name = "SHORT_CONTEXT", length = 2500) private String shortContext; diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionEntity.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionEntity.java index 6b01c9e8..3f670bac 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionEntity.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/entity/BatchStepExecutionEntity.java @@ -12,7 +12,7 @@ public class BatchStepExecutionEntity { @Id @Column(name = "STEP_EXECUTION_ID", nullable = false) - private Long id; + private Long stepExecutionId; @Column(name = "JOB_EXECUTION_ID", nullable = false) private Long jobExecutionId; diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmJobHistoryRepository.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmJobHistoryRepository.java index 6a8588b7..dbab9180 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmJobHistoryRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmJobHistoryRepository.java @@ -1,13 +1,17 @@ package ca.bc.gov.educ.api.batchgraduation.repository; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import java.util.UUID; 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 ca.bc.gov.educ.api.batchgraduation.entity.BatchGradAlgorithmJobHistoryEntity; +import org.springframework.transaction.annotation.Transactional; @Repository public interface BatchGradAlgorithmJobHistoryRepository extends JpaRepository { @@ -16,4 +20,8 @@ public interface BatchGradAlgorithmJobHistoryRepository extends JpaRepository findByJobExecutionId(Long batchId); + @Transactional + @Modifying + @Query("delete from BatchGradAlgorithmJobHistoryEntity where createDate <= :createDate") + void deleteByCreateDateBefore(LocalDateTime createDate); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmStudentRepository.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmStudentRepository.java index 17603024..f2e9ee3e 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmStudentRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchGradAlgorithmStudentRepository.java @@ -8,7 +8,9 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.*; @Repository @@ -58,5 +60,10 @@ void copyAllGradAlgorithmStudents( "and status = 'COMPLETED'\n" + "group by graduation_program_code\n" + "order by graduation_program_code desc", nativeQuery = true) - List getGraduationProgramCounts( @Param("batchId") Long batchId); + List getGraduationProgramCounts(@Param("batchId") Long batchId); + + @Transactional + @Modifying + @Query("delete from BatchGradAlgorithmStudentEntity where createDate <= :createDate") + void deleteByCreateDateBefore(LocalDateTime createDate); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchJobExecutionRepository.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchJobExecutionRepository.java index 81a3f1f5..5f8d278c 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchJobExecutionRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchJobExecutionRepository.java @@ -4,11 +4,38 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; 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; @Repository public interface BatchJobExecutionRepository extends JpaRepository { Page findAllByOrderByCreateTimeDesc(Pageable page); + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchJobExecutionParamEntity bjep WHERE bjep.jobExecutionId IN (\n" + + "SELECT bje.jobExecutionId FROM BatchJobExecutionEntity bje WHERE bje.createTime <= :createDate)") + void deleteBatchParamsByCreateTimeBefore(LocalDateTime createDate); + + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchJobExecutionContextEntity bjec WHERE bjec.jobExecutionId IN (\n" + + "SELECT bje.jobExecutionId FROM BatchJobExecutionEntity bje WHERE bje.createTime <= :createDate)") + void deleteBatchContextsByCreateTimeBefore(LocalDateTime createDate); + + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchJobInstanceEntity bji WHERE bji.id NOT IN (\n" + + "SELECT bje.id FROM BatchJobExecutionEntity bje)") + void deleteBatchInstancesNotInBatchJobs(); + + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchJobExecutionEntity bje WHERE bje.createTime <= :createDate") + void deleteBatchJobsByCreateTimeBefore(LocalDateTime createDate); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchStepExecutionRepository.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchStepExecutionRepository.java index 0d4adcfa..0e6c6d05 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchStepExecutionRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/BatchStepExecutionRepository.java @@ -2,8 +2,12 @@ import ca.bc.gov.educ.api.batchgraduation.entity.BatchStepExecutionEntity; 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; @Repository @@ -11,4 +15,17 @@ public interface BatchStepExecutionRepository extends JpaRepository findByJobExecutionIdOrderByEndTimeDesc(Long jobExecutionId); + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchStepExecutionContextEntity bsec WHERE bsec.stepExecutionId IN (\n" + + "SELECT bse.stepExecutionId FROM BatchStepExecutionEntity bse WHERE bse.jobExecutionId IN (\n" + + " SELECT bje.jobExecutionId FROM BatchJobExecutionEntity bje WHERE bje.createTime <= :createDate))") + void deleteBatchStepContextsByCreateTimeBefore(LocalDateTime createDate); + + @Transactional + @Modifying + @Query(value = "DELETE FROM BatchStepExecutionEntity bse WHERE bse.jobExecutionId IN (\n" + + " SELECT bje.jobExecutionId FROM BatchJobExecutionEntity bje WHERE bje.createTime <= :createDate)") + void deleteBatchStepsByCreateTimeBefore(LocalDateTime createDate); + } diff --git a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/StudentCredentialDistributionRepository.java b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/StudentCredentialDistributionRepository.java index 3b5a152d..6ab5fc13 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/StudentCredentialDistributionRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/batchgraduation/repository/StudentCredentialDistributionRepository.java @@ -1,16 +1,15 @@ package ca.bc.gov.educ.api.batchgraduation.repository; -import ca.bc.gov.educ.api.batchgraduation.entity.BatchGradAlgorithmStudentEntity; import ca.bc.gov.educ.api.batchgraduation.entity.StudentCredentialDistributionEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; -import java.util.Date; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -37,4 +36,9 @@ public interface StudentCredentialDistributionRepository extends JpaRepository