diff --git a/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/ArmRpoServiceIntTest.java b/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/ArmRpoServiceIntTest.java index 7106765a1bd..deca93ac2e3 100644 --- a/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/ArmRpoServiceIntTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/ArmRpoServiceIntTest.java @@ -143,7 +143,7 @@ void reconcileArmRpoCsvData_Success() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity1.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(26)); + externalObjectDirectoryEntity1.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(26)); dartsDatabase.save(externalObjectDirectoryEntity1); var externalObjectDirectoryEntity2 = dartsDatabase.getExternalObjectDirectoryStub().createExternalObjectDirectory( @@ -152,7 +152,7 @@ void reconcileArmRpoCsvData_Success() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity2.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(6)); + externalObjectDirectoryEntity2.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(6)); dartsDatabase.save(externalObjectDirectoryEntity2); ObjectStateRecordEntity objectStateRecordEntity = dartsDatabase.getObjectStateRecordRepository() @@ -164,7 +164,7 @@ void reconcileArmRpoCsvData_Success() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity3.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(30)); + externalObjectDirectoryEntity3.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(30)); externalObjectDirectoryEntity3.setOsrUuid(objectStateRecordEntity.getUuid()); dartsDatabase.getExternalObjectDirectoryRepository().saveAndFlush(externalObjectDirectoryEntity3); objectStateRecordEntity.setArmEodId(externalObjectDirectoryEntity3.getId()); @@ -176,7 +176,7 @@ void reconcileArmRpoCsvData_Success() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity4.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(28)); + externalObjectDirectoryEntity4.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(28)); dartsDatabase.save(externalObjectDirectoryEntity4); var externalObjectDirectoryEntity5 = dartsDatabase.getExternalObjectDirectoryStub().createExternalObjectDirectory( @@ -194,7 +194,7 @@ void reconcileArmRpoCsvData_Success() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity6.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(30)); + externalObjectDirectoryEntity6.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(30)); dartsDatabase.save(externalObjectDirectoryEntity6); armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.now()); @@ -243,7 +243,7 @@ void reconcileArmRpoCsvData_Success() { assertEquals(1, foundMediaList6.size()); ExternalObjectDirectoryEntity foundMedia6 = foundMediaList6.getFirst(); assertEquals(ARM_REPLAY.getId(), foundMedia6.getStatus().getId()); - assertNotNull(foundMedia6.getInputUploadProcessedTs()); + assertNotNull(foundMedia6.getCreateRecordProcessedTs()); } @@ -259,7 +259,7 @@ void reconcileArmRpoCsvData_FailsDets() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectory.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(30)); + externalObjectDirectory.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(30)); externalObjectDirectory.setOsrUuid(objectStateRecordEntity.getUuid()); dartsDatabase.getExternalObjectDirectoryRepository().saveAndFlush(externalObjectDirectory); objectStateRecordEntity.setArmEodId(123L); @@ -297,7 +297,7 @@ void reconcileArmRpoCsvData_DoesNothing_WhenIngestionDateOutsideOfRange() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity1.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(1)); + externalObjectDirectoryEntity1.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(1)); dartsDatabase.save(externalObjectDirectoryEntity1); var externalObjectDirectoryEntity2 = dartsDatabase.getExternalObjectDirectoryStub().createExternalObjectDirectory( @@ -306,7 +306,7 @@ void reconcileArmRpoCsvData_DoesNothing_WhenIngestionDateOutsideOfRange() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity2.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(100)); + externalObjectDirectoryEntity2.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(100)); dartsDatabase.save(externalObjectDirectoryEntity2); armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.now()); @@ -341,7 +341,7 @@ void reconcileArmRpoCsvData_UpdatesStatus_WhenCsvDataMatches() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(26)); + externalObjectDirectoryEntity.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(26)); dartsDatabase.save(externalObjectDirectoryEntity); armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.now()); @@ -369,7 +369,7 @@ void reconcileArmRpoCsvData_UpdatesEodStatusToReplay_WhenCsvDataContainsEodsThat ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(26)); + externalObjectDirectoryEntity.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(26)); dartsDatabase.save(externalObjectDirectoryEntity); armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.now()); @@ -386,7 +386,7 @@ void reconcileArmRpoCsvData_UpdatesEodStatusToReplay_WhenCsvDataContainsEodsThat assertEquals(1, foundMediaList.size()); ExternalObjectDirectoryEntity foundMedia = foundMediaList.getFirst(); assertEquals(ARM_REPLAY.getId(), foundMedia.getStatus().getId()); - assertNotNull(foundMedia.getInputUploadProcessedTs()); + assertNotNull(foundMedia.getCreateRecordProcessedTs()); } @Test @@ -398,7 +398,7 @@ void reconcileArmRpoCsvData_DoesNothing_WhenNoEodsInRange() { ARM, UUID.randomUUID().toString() ); - externalObjectDirectoryEntity.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(1)); + externalObjectDirectoryEntity.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(1)); dartsDatabase.save(externalObjectDirectoryEntity); armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.now()); diff --git a/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceIntTest.java b/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceIntTest.java index 1acd0c0b2e3..d9ac57fdf11 100644 --- a/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceIntTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceIntTest.java @@ -100,7 +100,7 @@ void performCatchup_withSuccessfulArmApiCalls_doesNotThrowException() { .status(dartsDatabase.getObjectRecordStatusEntity(ARM_RPO_PENDING)) .externalLocationType(dartsDatabase.getExternalLocationTypeEntity(ARM)) .externalLocation(UUID.randomUUID().toString()).build(); - armEod1.setInputUploadProcessedTs(lastModifiedDateTime); + armEod1.setCreateRecordProcessedTs(lastModifiedDateTime); armEod1.setVerificationAttempts(1); dartsPersistence.save(armEod1); @@ -154,7 +154,7 @@ void performCatchup_doesNothing_WhenOldestPendingEodIsTooNew() { .status(dartsDatabase.getObjectRecordStatusEntity(ARM_RPO_PENDING)) .externalLocationType(dartsDatabase.getExternalLocationTypeEntity(ARM)) .externalLocation(UUID.randomUUID().toString()).build(); - armEod1.setInputUploadProcessedTs(lastModifiedDateTime); + armEod1.setCreateRecordProcessedTs(lastModifiedDateTime); armEod1.setVerificationAttempts(1); dartsPersistence.save(armEod1); diff --git a/src/integrationTest/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepositoryTest.java b/src/integrationTest/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepositoryTest.java index ea29ff624f0..3437fe73b0c 100644 --- a/src/integrationTest/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepositoryTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepositoryTest.java @@ -431,7 +431,7 @@ void findByStatusAndDataIngestionTsWithPaging_ShouldReturnAsExpected() throws Ex } @Test - void findByStatusAndInputUploadProcessedTsWithPaging_ReturnsResults() throws Exception { + void findByStatusAndCreateRecordProcessedTsWithPaging_ReturnsResults() throws Exception { // Given OffsetDateTime pastCurrentDateTime1 = OffsetDateTime.now().minusHours(2); OffsetDateTime pastCurrentDateTime2 = OffsetDateTime.now().minusHours(20); @@ -439,7 +439,7 @@ void findByStatusAndInputUploadProcessedTsWithPaging_ReturnsResults() throws Exc List matchingEods = externalObjectDirectoryStub.generateWithStatusAndMediaLocation( ExternalLocationTypeEnum.ARM, ARM_RPO_PENDING, 11, Optional.of(pastCurrentDateTime1)); matchingEods.forEach(eod -> { - eod.setInputUploadProcessedTs(pastCurrentDateTime1); + eod.setCreateRecordProcessedTs(pastCurrentDateTime1); }); dartsPersistence.saveAll(matchingEods); assertEquals(11, matchingEods.size()); @@ -447,7 +447,7 @@ void findByStatusAndInputUploadProcessedTsWithPaging_ReturnsResults() throws Exc List nonMatchingEods = externalObjectDirectoryStub.generateWithStatusAndMediaLocation( ExternalLocationTypeEnum.ARM, ARM_RPO_PENDING, 4, Optional.of(pastCurrentDateTime2)); nonMatchingEods.forEach(eod -> { - eod.setInputUploadProcessedTs(pastCurrentDateTime2); + eod.setCreateRecordProcessedTs(pastCurrentDateTime2); }); dartsPersistence.saveAll(nonMatchingEods); assertEquals(4, nonMatchingEods.size()); @@ -459,7 +459,7 @@ void findByStatusAndInputUploadProcessedTsWithPaging_ReturnsResults() throws Exc ObjectRecordStatusEntity status = EodHelper.armRpoPendingStatus(); // When - Page result = externalObjectDirectoryRepository.findByStatusAndInputUploadProcessedTsWithPaging( + Page result = externalObjectDirectoryRepository.findByStatusAndCreateRecordProcessedTsWithPaging( status, startDateTime, endDateTime, pageable ); @@ -469,7 +469,7 @@ void findByStatusAndInputUploadProcessedTsWithPaging_ReturnsResults() throws Exc assertThat(result.getTotalElements()).isEqualTo(11); result.getContent().forEach(entity -> { assertThat(entity.getStatus().getId()).isEqualTo(status.getId()); - assertThat(entity.getInputUploadProcessedTs()).isBetween(startDateTime, endDateTime); + assertThat(entity.getCreateRecordProcessedTs()).isBetween(startDateTime, endDateTime); }); } @@ -1258,7 +1258,7 @@ private void generateDataWithMediaForInbound(int hoursBeforeCurrentTime) } @Test - void findOldestByInputUploadProcessedTsAndStatusAndLocation() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { + void findOldestByCreateRecordProcessedTsAndStatusAndLocation() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { // Given OffsetDateTime pastCurrentDateTime1 = OffsetDateTime.now().minusHours(200); OffsetDateTime pastCurrentDateTime2 = OffsetDateTime.now().minusHours(2); @@ -1266,7 +1266,7 @@ void findOldestByInputUploadProcessedTsAndStatusAndLocation() throws InvocationT List matchingEods = externalObjectDirectoryStub.generateWithStatusAndMediaLocation( ExternalLocationTypeEnum.ARM, ARM_RPO_PENDING, 10, Optional.of(pastCurrentDateTime1)); matchingEods.forEach(eod -> { - eod.setInputUploadProcessedTs(pastCurrentDateTime1); + eod.setCreateRecordProcessedTs(pastCurrentDateTime1); }); dartsPersistence.saveAll(matchingEods); assertEquals(10, matchingEods.size()); @@ -1274,13 +1274,13 @@ void findOldestByInputUploadProcessedTsAndStatusAndLocation() throws InvocationT List nonMatchingEods = externalObjectDirectoryStub.generateWithStatusAndMediaLocation( ExternalLocationTypeEnum.ARM, ARM_RPO_PENDING, 4, Optional.of(pastCurrentDateTime2)); nonMatchingEods.forEach(eod -> { - eod.setInputUploadProcessedTs(pastCurrentDateTime2); + eod.setCreateRecordProcessedTs(pastCurrentDateTime2); }); dartsPersistence.saveAll(nonMatchingEods); assertEquals(4, nonMatchingEods.size()); // When - ExternalObjectDirectoryEntity result = externalObjectDirectoryRepository.findOldestByInputUploadProcessedTsAndStatusAndLocation( + ExternalObjectDirectoryEntity result = externalObjectDirectoryRepository.findOldestByCreateRecordProcessedTsAndStatusAndLocation( EodHelper.armRpoPendingStatus(), EodHelper.armLocation()); // Then diff --git a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/AbstractArmBatchProcessResponseFiles.java b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/AbstractArmBatchProcessResponseFiles.java index 81ae2475106..ddeccb7a724 100644 --- a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/AbstractArmBatchProcessResponseFiles.java +++ b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/AbstractArmBatchProcessResponseFiles.java @@ -239,6 +239,16 @@ public OffsetDateTime getUploadFileRecordProcessTime(ArmResponseUploadFileRecord } } + public OffsetDateTime getCreateRecordProcessTime(ArmResponseCreateRecord armResponseCreateRecord) { + try { + return OffsetDateTime.parse(armResponseCreateRecord.getProcessTime(), dateTimeFormatter); + } catch (Exception e) { + log.warn("Unable to parse timestamp {} from ARM create record (CR) record {}", armResponseCreateRecord.getProcessTime(), + armResponseCreateRecord.getA360RecordId(), e); + throw new IllegalArgumentException(e); + } + } + private ArmResponseInputUploadFileRecord getResponseInputUploadFileRecordOrDelete(BatchInputUploadFileFilenameProcessor batchUploadFileFilenameProcessor, String inputUploadFileRecordStr, List externalObjectDirectoryEntities, @@ -303,14 +313,16 @@ private void processResponseFileByHashcode(BatchInputUploadFileFilenameProcessor List externalObjectDirectoryEntities = externalObjectDirectoryRepository .findAllByStatusAndManifestFile(EodHelper.armProcessingResponseFilesStatus(), manifestName); - OffsetDateTime minInputUploadProcessedTime = timeHelper.currentOffsetDateTime().minus( + OffsetDateTime minProcessedTime = timeHelper.currentOffsetDateTime().minus( armDataManagementConfiguration.getArmMissingResponseDuration()); externalObjectDirectoryEntities.forEach( externalObjectDirectoryEntity -> { - if (externalObjectDirectoryEntity.getInputUploadProcessedTs() != null - && externalObjectDirectoryEntity.getInputUploadProcessedTs().isBefore(minInputUploadProcessedTime)) { - markEodAsResponseProcessingFailed(externalObjectDirectoryEntity, userAccount); + // Use the latest date we have a process time for + OffsetDateTime processedTime = getLatestProcessedTs(externalObjectDirectoryEntity); + if (nonNull(processedTime) + && processedTime.isBefore(minProcessedTime)) { + markEodAsMissingResponseFailure(externalObjectDirectoryEntity, userAccount); } else { updateExternalObjectDirectoryStatus(externalObjectDirectoryEntity, EodHelper.armDropZoneStatus(), userAccount); } @@ -322,6 +334,16 @@ private void processResponseFileByHashcode(BatchInputUploadFileFilenameProcessor } } + private OffsetDateTime getLatestProcessedTs(ExternalObjectDirectoryEntity externalObjectDirectoryEntity) { + if (nonNull(externalObjectDirectoryEntity.getCreateRecordProcessedTs())) { + return externalObjectDirectoryEntity.getCreateRecordProcessedTs(); + } else if (nonNull(externalObjectDirectoryEntity.getInputUploadProcessedTs())) { + return externalObjectDirectoryEntity.getInputUploadProcessedTs(); + } else { + return externalObjectDirectoryEntity.getDataIngestionTs(); + } + } + protected void processBatchResponseFiles(BatchInputUploadFileFilenameProcessor batchUploadFileFilenameProcessor, ArmBatchResponses armBatchResponses, UserAccountEntity userAccount) { @@ -372,9 +394,12 @@ private void missingResponsesFiles(UserAccountEntity userAccount, ArmResponseBat OffsetDateTime minIngestionTime = timeHelper.currentOffsetDateTime().minus( armDataManagementConfiguration.getArmMissingResponseDuration()); - if (externalObjectDirectory.getInputUploadProcessedTs() != null - && externalObjectDirectory.getInputUploadProcessedTs().isBefore(minIngestionTime)) { - markEodAsResponseProcessingFailed(externalObjectDirectory, userAccount); + // Use the latest date we have a process time for + OffsetDateTime processedTime = getLatestProcessedTs(externalObjectDirectory); + + if (nonNull(processedTime) + && processedTime.isBefore(minIngestionTime)) { + markEodAsMissingResponseFailure(externalObjectDirectory, userAccount); } else { updateExternalObjectDirectoryStatus(externalObjectDirectory, EodHelper.armDropZoneStatus(), userAccount); } @@ -383,7 +408,7 @@ private void missingResponsesFiles(UserAccountEntity userAccount, ArmResponseBat } } - protected void markEodAsResponseProcessingFailed(ExternalObjectDirectoryEntity externalObjectDirectory, UserAccountEntity userAccount) { + protected void markEodAsMissingResponseFailure(ExternalObjectDirectoryEntity externalObjectDirectory, UserAccountEntity userAccount) { updateExternalObjectDirectoryStatus(externalObjectDirectory, EodHelper.armMissingResponseStatus(), userAccount); } @@ -533,6 +558,7 @@ private void readCreateRecordFile(BinaryData createRecordBinary, CreateRecordFil if (StringUtils.isNotEmpty(uploadNewFileRecord.getRelationId())) { Long externalObjectDirectoryId = Long.valueOf(uploadNewFileRecord.getRelationId()); armBatchResponses.addResponseBatchData(externalObjectDirectoryId, armResponseCreateRecord, createRecordFilenameProcessor); + setProcessTimeForCreateRecordFileRecord(armResponseCreateRecord, externalObjectDirectoryId, createRecordFilenameAndPath); } else { log.warn("Unable to get EOD id (relation id) from uploadNewFileRecord {} create record {}", armResponseCreateRecord.getInput(), createRecordFilenameAndPath); @@ -569,6 +595,25 @@ private void setEodDataIngestionTimestamp(Long externalObjectDirectoryId, Offset } } + private void setProcessTimeForCreateRecordFileRecord(ArmResponseCreateRecord armResponseCreateRecord, Long externalObjectDirectoryId, + String createRecordFilenameAndPath) { + try { + OffsetDateTime createRecordProcessTime = getCreateRecordProcessTime(armResponseCreateRecord); + setEodCreateRecordProcessTimestamp(externalObjectDirectoryId, createRecordProcessTime); + } catch (Exception e) { + log.error("Unable to set EOD create record process timestamp for EOD {} - upload file {}", + externalObjectDirectoryId, createRecordFilenameAndPath, e); + } + } + + private void setEodCreateRecordProcessTimestamp(Long externalObjectDirectoryId, OffsetDateTime createRecordProcessTime) { + ExternalObjectDirectoryEntity externalObjectDirectory = getExternalObjectDirectoryEntity(externalObjectDirectoryId); + if (nonNull(externalObjectDirectory)) { + externalObjectDirectory.setCreateRecordProcessedTs(createRecordProcessTime); + externalObjectDirectoryRepository.save(externalObjectDirectory); + } + } + private ArmResponseCreateRecord getResponseCreateRecordOrDelete(String createRecordFilenameAndPath, BinaryData createRecordBinary) throws IOException { try { diff --git a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImpl.java b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImpl.java index a0165a9d08a..a20ee55e204 100644 --- a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImpl.java @@ -36,8 +36,8 @@ public class ArmRpoBacklogCatchupServiceImpl implements ArmRpoBacklogCatchupServ @Override public void performCatchup(Integer batchSize, Integer maxHoursEndingPoint, Integer totalCatchupHours, Duration threadSleepDuration) { var armRpoExecutionDetailEntity = armRpoService.getLatestArmRpoExecutionDetailEntity(); - var earliestEodInRpo = externalObjectDirectoryRepository.findOldestByInputUploadProcessedTsAndStatusAndLocation(EodHelper.armRpoPendingStatus(), - EodHelper.armLocation()); + var earliestEodInRpo = externalObjectDirectoryRepository.findOldestByCreateRecordProcessedTsAndStatusAndLocation(EodHelper.armRpoPendingStatus(), + EodHelper.armLocation()); // Only perform backlog catchup if the last execution is in REMOVE_PRODUCTION state or FAILED status if (!validateTaskCanBeRun(maxHoursEndingPoint, totalCatchupHours, armRpoExecutionDetailEntity, earliestEodInRpo)) { @@ -56,12 +56,15 @@ public void performCatchup(Integer batchSize, Integer maxHoursEndingPoint, Integ return; } - OffsetDateTime inputUploadProcessedTs = earliestEodInRpo.getInputUploadProcessedTs(); - // subtract 10 minutes to account for any potential delay in EOD being picked up for RPO search after the input upload processed timestamp - OffsetDateTime adjustedOldestEodDateTime = inputUploadProcessedTs.minus(PRE_AMBLE_MINUTES, ChronoUnit.MINUTES); + // Use createRecordProcessedTs if it's been set else use inputUploadProcessedTs + OffsetDateTime processedTs = isNull(earliestEodInRpo.getCreateRecordProcessedTs()) + ? earliestEodInRpo.getInputUploadProcessedTs() : earliestEodInRpo.getCreateRecordProcessedTs(); + // subtract 10 minutes to account for any potential delay in EOD being picked up for RPO search after + // the create record processed timestamp + OffsetDateTime adjustedOldestEodDateTime = processedTs.minus(PRE_AMBLE_MINUTES, ChronoUnit.MINUTES); int hoursEnd = (int) calculateHoursFromStartToNow(adjustedOldestEodDateTime.toString()); - Integer originalStaartHour = armAutomatedTaskEntity.getRpoCsvStartHour(); + Integer originalStartHour = armAutomatedTaskEntity.getRpoCsvStartHour(); Integer originalEndHour = armAutomatedTaskEntity.getRpoCsvEndHour(); try { armAutomatedTaskEntity.setRpoCsvStartHour(hoursEnd - totalCatchupHours); @@ -70,7 +73,7 @@ public void performCatchup(Integer batchSize, Integer maxHoursEndingPoint, Integ triggerArmRpoSearchService.triggerArmRpoSearch(threadSleepDuration); } catch (Exception e) { // reset the start and end hour to the original value if there are any failures - armAutomatedTaskEntity.setRpoCsvStartHour(originalStaartHour); + armAutomatedTaskEntity.setRpoCsvStartHour(originalStartHour); armAutomatedTaskEntity.setRpoCsvEndHour(originalEndHour); armAutomatedTaskRepository.save(armAutomatedTaskEntity); } @@ -98,7 +101,7 @@ private boolean validateTaskCanBeRun(Integer maxHoursEndingPoint, Integer totalC OffsetDateTime currentTime = currentTimeHelper.currentOffsetDateTime(); int amountToSubtract = maxHoursEndingPoint + totalCatchupHours; OffsetDateTime lastRunTaskDateTime = currentTime.minus(amountToSubtract, ChronoUnit.HOURS); - if (earliestEodInRpo.getInputUploadProcessedTs().isAfter(lastRunTaskDateTime)) { + if (isNull(earliestEodInRpo.getCreateRecordProcessedTs()) || earliestEodInRpo.getCreateRecordProcessedTs().isAfter(lastRunTaskDateTime)) { log.info("Earliest EODs found in ARM RPO pending status is not suitable for backlog catchup."); return false; } diff --git a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImpl.java b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImpl.java index 2edff0d21db..ad52178bd1e 100644 --- a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImpl.java @@ -134,7 +134,7 @@ public void reconcileArmRpoCsvData(ArmRpoExecutionDetailEntity armRpoExecutionDe OffsetDateTime createdDateTime = DateTimeHelper.floorToMinutes(armRpoExecutionDetailEntity.getCreatedDateTime()); do { pages - = externalObjectDirectoryRepository.findByStatusAndInputUploadProcessedTsWithPaging( + = externalObjectDirectoryRepository.findByStatusAndCreateRecordProcessedTsWithPaging( armRpoPending, createdDateTime.minusHours(armAutomatedTaskEntity.getRpoCsvEndHour()), createdDateTime.minusHours(armAutomatedTaskEntity.getRpoCsvStartHour()), diff --git a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/DetsToArmBatchProcessResponseFilesImpl.java b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/DetsToArmBatchProcessResponseFilesImpl.java index 5311efaa4c8..53b98062e5c 100644 --- a/src/main/java/uk/gov/hmcts/darts/arm/service/impl/DetsToArmBatchProcessResponseFilesImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/arm/service/impl/DetsToArmBatchProcessResponseFilesImpl.java @@ -177,8 +177,8 @@ private void updateOsrIngestStatusToFailure(ObjectStateRecordEntity osr, } @Override - protected void markEodAsResponseProcessingFailed(ExternalObjectDirectoryEntity externalObjectDirectory, UserAccountEntity userAccount) { - super.markEodAsResponseProcessingFailed(externalObjectDirectory, userAccount); + protected void markEodAsMissingResponseFailure(ExternalObjectDirectoryEntity externalObjectDirectory, UserAccountEntity userAccount) { + super.markEodAsMissingResponseFailure(externalObjectDirectory, userAccount); ObjectStateRecordEntity objectStateRecordEntity = externalObjectDirectory.getObjectStateRecordEntity(); diff --git a/src/main/java/uk/gov/hmcts/darts/common/entity/ExternalObjectDirectoryEntity.java b/src/main/java/uk/gov/hmcts/darts/common/entity/ExternalObjectDirectoryEntity.java index d5fd50dd3ce..6725eeb5e32 100644 --- a/src/main/java/uk/gov/hmcts/darts/common/entity/ExternalObjectDirectoryEntity.java +++ b/src/main/java/uk/gov/hmcts/darts/common/entity/ExternalObjectDirectoryEntity.java @@ -109,6 +109,9 @@ public class ExternalObjectDirectoryEntity extends CreatedModifiedBaseEntity imp @Column(name = "is_dets", nullable = false) private boolean isDets; + @Column(name = "create_record_processed_ts") + private OffsetDateTime createRecordProcessedTs; + @Override public int getStatusId() { return getStatus().getId(); diff --git a/src/main/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepository.java b/src/main/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepository.java index 38b27020bd5..e6ddb7bb08f 100644 --- a/src/main/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepository.java +++ b/src/main/java/uk/gov/hmcts/darts/common/repository/ExternalObjectDirectoryRepository.java @@ -645,13 +645,13 @@ void updateByStatusEqualsAndDataIngestionTsBefore(ObjectRecordStatusEntity curre eod.lastModifiedById = :currentUser, eod.lastModifiedDateTime = current_timestamp where eod.status = :currentStatus - and eod.inputUploadProcessedTs <= :maxInputUploadProcessedTs + and eod.createRecordProcessedTs <= :maxCreateRecordProcessedTs """) @Transactional - void updateByStatusEqualsAndInputUploadProcessedTsBefore(ObjectRecordStatusEntity currentStatus, OffsetDateTime maxInputUploadProcessedTs, - ObjectRecordStatusEntity newStatus, - Integer currentUser, - Limit limit); + void updateByStatusEqualsAndCreateRecordProcessedTsBefore(ObjectRecordStatusEntity currentStatus, OffsetDateTime maxCreateRecordProcessedTs, + ObjectRecordStatusEntity newStatus, + Integer currentUser, + Limit limit); @Modifying(clearAutomatically = true) @Query( @@ -673,13 +673,13 @@ void updateEodStatusAndTransferAttemptsWhereIdIn(ObjectRecordStatusEntity newSta """ SELECT eod FROM ExternalObjectDirectoryEntity eod WHERE eod.status = :status - AND eod.inputUploadProcessedTs between :rpoCsvStartTime AND :rpoCsvEndTime + AND eod.createRecordProcessedTs between :rpoCsvStartTime AND :rpoCsvEndTime """ ) - Page findByStatusAndInputUploadProcessedTsWithPaging(ObjectRecordStatusEntity status, - OffsetDateTime rpoCsvStartTime, - OffsetDateTime rpoCsvEndTime, - Pageable pageable); + Page findByStatusAndCreateRecordProcessedTsWithPaging(ObjectRecordStatusEntity status, + OffsetDateTime rpoCsvStartTime, + OffsetDateTime rpoCsvEndTime, + Pageable pageable); @Query( """ @@ -731,9 +731,9 @@ List findIdsByStatusAndLastModifiedBetweenAndLocationAndLimit(@Param("stat SELECT eod FROM ExternalObjectDirectoryEntity eod WHERE eod.status = :status AND eod.externalLocationType = :locationType - ORDER BY eod.inputUploadProcessedTs ASC + ORDER BY eod.createRecordProcessedTs ASC LIMIT 1 """) - ExternalObjectDirectoryEntity findOldestByInputUploadProcessedTsAndStatusAndLocation(ObjectRecordStatusEntity status, - ExternalLocationTypeEntity locationType); + ExternalObjectDirectoryEntity findOldestByCreateRecordProcessedTsAndStatusAndLocation(ObjectRecordStatusEntity status, + ExternalLocationTypeEntity locationType); } \ No newline at end of file diff --git a/src/main/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTask.java b/src/main/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTask.java index db3b18c82df..7ad0ae98ac0 100644 --- a/src/main/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTask.java +++ b/src/main/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTask.java @@ -57,7 +57,7 @@ public AutomatedTaskName getAutomatedTaskName() { protected void runTask() { Integer batchSize = this.getAutomatedTaskBatchSize(); log.info("Processing {} arm rpo pending records", batchSize); - this.externalObjectDirectoryRepository.updateByStatusEqualsAndInputUploadProcessedTsBefore( + this.externalObjectDirectoryRepository.updateByStatusEqualsAndCreateRecordProcessedTsBefore( EodHelper.armRpoPendingStatus(), this.currentTimeHelper.currentOffsetDateTime().minus(this.armRpoDuration), EodHelper.storedStatus(), diff --git a/src/main/resources/db/migration/common/V1_514__add_column_create_record_process_time_to_eod.sql b/src/main/resources/db/migration/common/V1_514__add_column_create_record_process_time_to_eod.sql new file mode 100644 index 00000000000..1bbab2df6a4 --- /dev/null +++ b/src/main/resources/db/migration/common/V1_514__add_column_create_record_process_time_to_eod.sql @@ -0,0 +1,9 @@ +ALTER TABLE external_object_directory + ADD COLUMN IF NOT EXISTS create_record_processed_ts TIMESTAMP WITH TIME ZONE; + +UPDATE external_object_directory +SET create_record_processed_ts = input_upload_processed_ts +WHERE create_record_processed_ts is null + and input_upload_processed_ts is not null; + +CREATE INDEX IF NOT EXISTS eod_cr_proc_ts_idx ON external_object_directory (create_record_processed_ts); diff --git a/src/main/resources/db/reference/modernised_darts_indexes.sql b/src/main/resources/db/reference/modernised_darts_indexes.sql index 8c2fa486eb9..eaacd98e14e 100644 --- a/src/main/resources/db/reference/modernised_darts_indexes.sql +++ b/src/main/resources/db/reference/modernised_darts_indexes.sql @@ -35,279 +35,281 @@ SET ROLE DARTS_OWNER; SET SEARCH_PATH TO darts; -- v60 application -CREATE INDEX ann_cur_own_fk ON ANNOTATION(current_owner) TABLESPACE pg_default; -CREATE INDEX ann_cre_by_fk ON ANNOTATION(created_by) TABLESPACE pg_default; -CREATE INDEX ann_lst_mod_by_fk ON ANNOTATION(last_modified_by) TABLESPACE pg_default; -CREATE INDEX ann_del_by_fk ON ANNOTATION(deleted_by) TABLESPACE pg_default; +CREATE INDEX ann_cur_own_fk ON ANNOTATION (current_owner) TABLESPACE pg_default; +CREATE INDEX ann_cre_by_fk ON ANNOTATION (created_by) TABLESPACE pg_default; +CREATE INDEX ann_lst_mod_by_fk ON ANNOTATION (last_modified_by) TABLESPACE pg_default; +CREATE INDEX ann_del_by_fk ON ANNOTATION (deleted_by) TABLESPACE pg_default; -CREATE INDEX ado_ann_fk ON ANNOTATION_DOCUMENT(ann_id) TABLESPACE pg_default; -CREATE INDEX ado_del_by_fk ON ANNOTATION_DOCUMENT(deleted_by) TABLESPACE pg_default; -CREATE INDEX ado_last_mod_by_fk ON ANNOTATION_DOCUMENT(last_modified_by) TABLESPACE pg_default; -CREATE INDEX ado_up_by_fk ON ANNOTATION_DOCUMENT(uploaded_by) TABLESPACE pg_default; +CREATE INDEX ado_ann_fk ON ANNOTATION_DOCUMENT (ann_id) TABLESPACE pg_default; +CREATE INDEX ado_del_by_fk ON ANNOTATION_DOCUMENT (deleted_by) TABLESPACE pg_default; +CREATE INDEX ado_last_mod_by_fk ON ANNOTATION_DOCUMENT (last_modified_by) TABLESPACE pg_default; +CREATE INDEX ado_up_by_fk ON ANNOTATION_DOCUMENT (uploaded_by) TABLESPACE pg_default; -CREATE INDEX aat_aut_fk ON ARM_AUTOMATED_TASK(aut_id) TABLESPACE pg_default; +CREATE INDEX aat_aut_fk ON ARM_AUTOMATED_TASK (aut_id) TABLESPACE pg_default; -CREATE INDEX ard_are_fk ON ARM_RPO_EXECUTION_DETAIL(are_id) TABLESPACE pg_default; -CREATE INDEX ard_aru_fk ON ARM_RPO_EXECUTION_DETAIL(aru_id) TABLESPACE pg_default; -CREATE INDEX ard_cre_by_fk ON ARM_RPO_EXECUTION_DETAIL(created_by) TABLESPACE pg_default; -CREATE INDEX ard_lst_mod_by_fk ON ARM_RPO_EXECUTION_DETAIL(last_modified_by) TABLESPACE pg_default; +CREATE INDEX ard_are_fk ON ARM_RPO_EXECUTION_DETAIL (are_id) TABLESPACE pg_default; +CREATE INDEX ard_aru_fk ON ARM_RPO_EXECUTION_DETAIL (aru_id) TABLESPACE pg_default; +CREATE INDEX ard_cre_by_fk ON ARM_RPO_EXECUTION_DETAIL (created_by) TABLESPACE pg_default; +CREATE INDEX ard_lst_mod_by_fk ON ARM_RPO_EXECUTION_DETAIL (last_modified_by) TABLESPACE pg_default; -CREATE INDEX aud_cas_fk ON AUDIT(cas_id) TABLESPACE pg_default; -CREATE INDEX aud_aua_fk ON AUDIT(aua_id) TABLESPACE pg_default; -CREATE INDEX aud_usr_fk ON AUDIT(usr_id) TABLESPACE pg_default; -CREATE INDEX aud_cre_by_fk ON AUDIT(created_by) TABLESPACE pg_default; -CREATE INDEX aud_lst_mod_by_fk ON AUDIT(last_modified_by) TABLESPACE pg_default; +CREATE INDEX aud_cas_fk ON AUDIT (cas_id) TABLESPACE pg_default; +CREATE INDEX aud_aua_fk ON AUDIT (aua_id) TABLESPACE pg_default; +CREATE INDEX aud_usr_fk ON AUDIT (usr_id) TABLESPACE pg_default; +CREATE INDEX aud_cre_by_fk ON AUDIT (created_by) TABLESPACE pg_default; +CREATE INDEX aud_lst_mod_by_fk ON AUDIT (last_modified_by) TABLESPACE pg_default; -CREATE INDEX aua_cre_by_fk ON AUDIT_ACTIVITY(created_by) TABLESPACE pg_default; -CREATE INDEX aua_lst_mod_by_fk ON AUDIT_ACTIVITY(last_modified_by) TABLESPACE pg_default; +CREATE INDEX aua_cre_by_fk ON AUDIT_ACTIVITY (created_by) TABLESPACE pg_default; +CREATE INDEX aua_lst_mod_by_fk ON AUDIT_ACTIVITY (last_modified_by) TABLESPACE pg_default; -CREATE INDEX aut_cre_by_fk ON AUTOMATED_TASK(created_by) TABLESPACE pg_default; -CREATE INDEX aut_lst_mod_by_fk ON AUTOMATED_TASK(last_modified_by) TABLESPACE pg_default; +CREATE INDEX aut_cre_by_fk ON AUTOMATED_TASK (created_by) TABLESPACE pg_default; +CREATE INDEX aut_lst_mod_by_fk ON AUTOMATED_TASK (last_modified_by) TABLESPACE pg_default; -CREATE INDEX cad_cas_fk ON CASE_DOCUMENT(cas_id) TABLESPACE pg_default; -CREATE INDEX cad_cre_by_fk ON CASE_DOCUMENT(created_by) TABLESPACE pg_default; -CREATE INDEX cad_lst_mod_by_fk ON CASE_DOCUMENT(last_modified_by) TABLESPACE pg_default; -CREATE INDEX cad_del_by_fk ON CASE_DOCUMENT(deleted_by) TABLESPACE pg_default; +CREATE INDEX cad_cas_fk ON CASE_DOCUMENT (cas_id) TABLESPACE pg_default; +CREATE INDEX cad_cre_by_fk ON CASE_DOCUMENT (created_by) TABLESPACE pg_default; +CREATE INDEX cad_lst_mod_by_fk ON CASE_DOCUMENT (last_modified_by) TABLESPACE pg_default; +CREATE INDEX cad_del_by_fk ON CASE_DOCUMENT (deleted_by) TABLESPACE pg_default; --CREATE INDEX caj_cas_fk ON CASE_JUDGE_AE(cas_id); -CREATE INDEX caj_jud_fk ON CASE_JUDGE_AE(jud_id) TABLESPACE pg_default; +CREATE INDEX caj_jud_fk ON CASE_JUDGE_AE (jud_id) TABLESPACE pg_default; -CREATE INDEX caj_tra_fk ON CASE_TRANSCRIPTION_AE(tra_id) TABLESPACE pg_default; +CREATE INDEX caj_tra_fk ON CASE_TRANSCRIPTION_AE (tra_id) TABLESPACE pg_default; -CREATE INDEX cas_evh_fk ON COURT_CASE(evh_id) TABLESPACE pg_default; -CREATE INDEX cas_cth_fk ON COURT_CASE(cth_id) TABLESPACE pg_default; -CREATE INDEX cas_cre_by_fk ON COURT_CASE(created_by) TABLESPACE pg_default; -CREATE INDEX cas_lst_mod_by_fk ON COURT_CASE(last_modified_by) TABLESPACE pg_default; -CREATE INDEX cas_dat_anon_by_fk ON COURT_CASE(data_anonymised_by) TABLESPACE pg_default; -CREATE INDEX cas_del_by_fk ON COURT_CASE(deleted_by) TABLESPACE pg_default; +CREATE INDEX cas_evh_fk ON COURT_CASE (evh_id) TABLESPACE pg_default; +CREATE INDEX cas_cth_fk ON COURT_CASE (cth_id) TABLESPACE pg_default; +CREATE INDEX cas_cre_by_fk ON COURT_CASE (created_by) TABLESPACE pg_default; +CREATE INDEX cas_lst_mod_by_fk ON COURT_CASE (last_modified_by) TABLESPACE pg_default; +CREATE INDEX cas_dat_anon_by_fk ON COURT_CASE (data_anonymised_by) TABLESPACE pg_default; +CREATE INDEX cas_del_by_fk ON COURT_CASE (deleted_by) TABLESPACE pg_default; -CREATE INDEX cth_cre_by_fk ON COURTHOUSE(created_by) TABLESPACE pg_default; -CREATE INDEX cth_lst_mod_by_fk ON COURTHOUSE(last_modified_by) TABLESPACE pg_default; +CREATE INDEX cth_cre_by_fk ON COURTHOUSE (created_by) TABLESPACE pg_default; +CREATE INDEX cth_lst_mod_by_fk ON COURTHOUSE (last_modified_by) TABLESPACE pg_default; --CREATE INDEX cra_cth_fk ON COURTHOUSE_REGION_AE(cth_id); -CREATE INDEX cra_reg_fk ON COURTHOUSE_REGION_AE(reg_id) TABLESPACE pg_default; +CREATE INDEX cra_reg_fk ON COURTHOUSE_REGION_AE (reg_id) TABLESPACE pg_default; -CREATE INDEX ctr_cre_by_fk ON COURTROOM(created_by) TABLESPACE pg_default; +CREATE INDEX ctr_cre_by_fk ON COURTROOM (created_by) TABLESPACE pg_default; -CREATE INDEX dan_eve_fk ON DATA_ANONYMISATION(eve_id) TABLESPACE pg_default; -CREATE INDEX dan_trc_fk ON DATA_ANONYMISATION(trc_id) TABLESPACE pg_default; -CREATE INDEX dan_req_by_fk ON DATA_ANONYMISATION(requested_by) TABLESPACE pg_default; -CREATE INDEX dan_apprv_by_fk ON DATA_ANONYMISATION(approved_by) TABLESPACE pg_default; +CREATE INDEX dan_eve_fk ON DATA_ANONYMISATION (eve_id) TABLESPACE pg_default; +CREATE INDEX dan_trc_fk ON DATA_ANONYMISATION (trc_id) TABLESPACE pg_default; +CREATE INDEX dan_req_by_fk ON DATA_ANONYMISATION (requested_by) TABLESPACE pg_default; +CREATE INDEX dan_apprv_by_fk ON DATA_ANONYMISATION (approved_by) TABLESPACE pg_default; -CREATE INDEX dal_elt_fk ON DAILY_LIST(elt_id) TABLESPACE pg_default; -CREATE INDEX dal_cre_by_fk ON DAILY_LIST(created_by) TABLESPACE pg_default; -CREATE INDEX dal_lst_mod_by ON DAILY_LIST(last_modified_by) TABLESPACE pg_default; +CREATE INDEX dal_elt_fk ON DAILY_LIST (elt_id) TABLESPACE pg_default; +CREATE INDEX dal_cre_by_fk ON DAILY_LIST (created_by) TABLESPACE pg_default; +CREATE INDEX dal_lst_mod_by ON DAILY_LIST (last_modified_by) TABLESPACE pg_default; -CREATE INDEX dfc_cre_by_fk ON DEFENCE(created_by) TABLESPACE pg_default; -CREATE INDEX dfc_lst_mod_by_fk ON DEFENCE(last_modified_by) TABLESPACE pg_default; +CREATE INDEX dfc_cre_by_fk ON DEFENCE (created_by) TABLESPACE pg_default; +CREATE INDEX dfc_lst_mod_by_fk ON DEFENCE (last_modified_by) TABLESPACE pg_default; -CREATE INDEX dfd_cre_by_fk ON DEFENDANT(created_by) TABLESPACE pg_default; -CREATE INDEX dfd_lst_mod_by_fk ON DEFENDANT(last_modified_by) TABLESPACE pg_default; +CREATE INDEX dfd_cre_by_fk ON DEFENDANT (created_by) TABLESPACE pg_default; +CREATE INDEX dfd_lst_mod_by_fk ON DEFENDANT (last_modified_by) TABLESPACE pg_default; -CREATE INDEX eve_ctr_fk ON EVENT(ctr_id) TABLESPACE pg_default; -CREATE INDEX eve_evh_fk ON EVENT(evh_id) TABLESPACE pg_default; -CREATE INDEX eve_cre_by_fk ON EVENT(created_by) TABLESPACE pg_default; -CREATE INDEX eve_lst_mod_by_fk ON EVENT(last_modified_by) TABLESPACE pg_default; +CREATE INDEX eve_ctr_fk ON EVENT (ctr_id) TABLESPACE pg_default; +CREATE INDEX eve_evh_fk ON EVENT (evh_id) TABLESPACE pg_default; +CREATE INDEX eve_cre_by_fk ON EVENT (created_by) TABLESPACE pg_default; +CREATE INDEX eve_lst_mod_by_fk ON EVENT (last_modified_by) TABLESPACE pg_default; -CREATE INDEX evh_cre_by_fk ON EVENT_HANDLER(created_by) TABLESPACE pg_default; +CREATE INDEX evh_cre_by_fk ON EVENT_HANDLER (created_by) TABLESPACE pg_default; -CREATE INDEX elc_eve_fk ON EVENT_LINKED_CASE(eve_id) TABLESPACE pg_default; -CREATE INDEX elc_cas_fk ON EVENT_LINKED_CASE(cas_id) TABLESPACE pg_default; +CREATE INDEX elc_eve_fk ON EVENT_LINKED_CASE (eve_id) TABLESPACE pg_default; +CREATE INDEX elc_cas_fk ON EVENT_LINKED_CASE (cas_id) TABLESPACE pg_default; -CREATE INDEX eod_med_fk ON EXTERNAL_OBJECT_DIRECTORY(med_id) TABLESPACE pg_default; -CREATE INDEX eod_trd_fk ON EXTERNAL_OBJECT_DIRECTORY(trd_id) TABLESPACE pg_default; -CREATE INDEX eod_cad_fk ON EXTERNAL_OBJECT_DIRECTORY(cad_id) TABLESPACE pg_default; -CREATE INDEX eod_ado_fk ON EXTERNAL_OBJECT_DIRECTORY(ado_id) TABLESPACE pg_default; -CREATE INDEX eod_cre_by_fk ON EXTERNAL_OBJECT_DIRECTORY(created_by) TABLESPACE pg_default; -CREATE INDEX eod_lst_mod_by_fk ON EXTERNAL_OBJECT_DIRECTORY(last_modified_by) TABLESPACE pg_default; -CREATE INDEX eod_ors_fk ON EXTERNAL_OBJECT_DIRECTORY(ors_id) TABLESPACE pg_default; -CREATE INDEX eod_elt_fk ON EXTERNAL_OBJECT_DIRECTORY(elt_id) TABLESPACE pg_default; +CREATE INDEX eod_med_fk ON EXTERNAL_OBJECT_DIRECTORY (med_id) TABLESPACE pg_default; +CREATE INDEX eod_trd_fk ON EXTERNAL_OBJECT_DIRECTORY (trd_id) TABLESPACE pg_default; +CREATE INDEX eod_cad_fk ON EXTERNAL_OBJECT_DIRECTORY (cad_id) TABLESPACE pg_default; +CREATE INDEX eod_ado_fk ON EXTERNAL_OBJECT_DIRECTORY (ado_id) TABLESPACE pg_default; +CREATE INDEX eod_cre_by_fk ON EXTERNAL_OBJECT_DIRECTORY (created_by) TABLESPACE pg_default; +CREATE INDEX eod_lst_mod_by_fk ON EXTERNAL_OBJECT_DIRECTORY (last_modified_by) TABLESPACE pg_default; +CREATE INDEX eod_ors_fk ON EXTERNAL_OBJECT_DIRECTORY (ors_id) TABLESPACE pg_default; +CREATE INDEX eod_elt_fk ON EXTERNAL_OBJECT_DIRECTORY (elt_id) TABLESPACE pg_default; -CREATE INDEX esa_cre_by_fk ON EXTERNAL_SERVICE_AUTH_TOKEN(created_by) TABLESPACE pg_default; -CREATE INDEX esa_lst_mod_by_fk ON EXTERNAL_SERVICE_AUTH_TOKEN(last_modified_by) TABLESPACE pg_default; +CREATE INDEX eod_cr_proc_ts_idx ON EXTERNAL_OBJECT_DIRECTORY (create_record_processed_ts) TABLESPACE pg_default; -CREATE INDEX hea_ctr_fk ON HEARING(ctr_id) TABLESPACE pg_default; -CREATE INDEX hea_cre_by_fk ON HEARING(created_by) TABLESPACE pg_default; -CREATE INDEX hea_lst_mod_by_fk ON HEARING(last_modified_by) TABLESPACE pg_default; +CREATE INDEX esa_cre_by_fk ON EXTERNAL_SERVICE_AUTH_TOKEN (created_by) TABLESPACE pg_default; +CREATE INDEX esa_lst_mod_by_fk ON EXTERNAL_SERVICE_AUTH_TOKEN (last_modified_by) TABLESPACE pg_default; + +CREATE INDEX hea_ctr_fk ON HEARING (ctr_id) TABLESPACE pg_default; +CREATE INDEX hea_cre_by_fk ON HEARING (created_by) TABLESPACE pg_default; +CREATE INDEX hea_lst_mod_by_fk ON HEARING (last_modified_by) TABLESPACE pg_default; --CREATE INDEX haa_hea_fk ON HEARING_ANNOTATION_AE(hea_id); -CREATE INDEX haa_ann_fk ON HEARING_ANNOTATION_AE(ann_id) TABLESPACE pg_default; +CREATE INDEX haa_ann_fk ON HEARING_ANNOTATION_AE (ann_id) TABLESPACE pg_default; --CREATE INDEX hee_hea_fk ON HEARING_EVENT_AE(hea_id); -CREATE INDEX hee_eve_fk ON HEARING_EVENT_AE(eve_id) TABLESPACE pg_default; +CREATE INDEX hee_eve_fk ON HEARING_EVENT_AE (eve_id) TABLESPACE pg_default; --CREATE INDEX hej_hea_fk ON HEARING_JUDGE_AE(hea_id); -CREATE INDEX hej_jud_fk ON HEARING_JUDGE_AE(jud_id) TABLESPACE pg_default; +CREATE INDEX hej_jud_fk ON HEARING_JUDGE_AE (jud_id) TABLESPACE pg_default; --CREATE INDEX hem_hea_fk ON HEARING_MEDIA_AE(hea_id); -CREATE INDEX hem_med_fk ON HEARING_MEDIA_AE(med_id) TABLESPACE pg_default; +CREATE INDEX hem_med_fk ON HEARING_MEDIA_AE (med_id) TABLESPACE pg_default; -CREATE INDEX het_tra_fk ON HEARING_TRANSCRIPTION_AE(tra_id) TABLESPACE pg_default; +CREATE INDEX het_tra_fk ON HEARING_TRANSCRIPTION_AE (tra_id) TABLESPACE pg_default; -CREATE INDEX jud_cre_by_fk ON JUDGE(created_by) TABLESPACE pg_default; -CREATE INDEX jud_lst_mod_by_fk ON JUDGE(last_modified_by) TABLESPACE pg_default; +CREATE INDEX jud_cre_by_fk ON JUDGE (created_by) TABLESPACE pg_default; +CREATE INDEX jud_lst_mod_by_fk ON JUDGE (last_modified_by) TABLESPACE pg_default; -CREATE INDEX med_ctr_id ON MEDIA(ctr_id) TABLESPACE pg_default; -CREATE INDEX med_cre_by_fk ON MEDIA(created_by) TABLESPACE pg_default; -CREATE INDEX med_lst_mod_by_fk ON MEDIA(last_modified_by) TABLESPACE pg_default; -CREATE INDEX med_del_by_fk ON MEDIA(deleted_by) TABLESPACE pg_default; +CREATE INDEX med_ctr_id ON MEDIA (ctr_id) TABLESPACE pg_default; +CREATE INDEX med_cre_by_fk ON MEDIA (created_by) TABLESPACE pg_default; +CREATE INDEX med_lst_mod_by_fk ON MEDIA (last_modified_by) TABLESPACE pg_default; +CREATE INDEX med_del_by_fk ON MEDIA (deleted_by) TABLESPACE pg_default; -CREATE INDEX mlc_med_fk ON MEDIA_LINKED_CASE(med_id) TABLESPACE pg_default; -CREATE INDEX mlc_cas_fk ON MEDIA_LINKED_CASE(cas_id) TABLESPACE pg_default; -CREATE INDEX mlc_cre_by_fk ON MEDIA_LINKED_CASE(created_by) TABLESPACE pg_default; +CREATE INDEX mlc_med_fk ON MEDIA_LINKED_CASE (med_id) TABLESPACE pg_default; +CREATE INDEX mlc_cas_fk ON MEDIA_LINKED_CASE (cas_id) TABLESPACE pg_default; +CREATE INDEX mlc_cre_by_fk ON MEDIA_LINKED_CASE (created_by) TABLESPACE pg_default; -CREATE INDEX mer_hea_fk ON MEDIA_REQUEST(hea_id) TABLESPACE pg_default; -CREATE INDEX mer_cre_by_fk ON MEDIA_REQUEST(created_by) TABLESPACE pg_default; -CREATE INDEX mer_lst_mod_by_fk ON MEDIA_REQUEST(last_modified_by) TABLESPACE pg_default; -CREATE INDEX mer_req_fk ON MEDIA_REQUEST(requestor) TABLESPACE pg_default; -CREATE INDEX mer_cur_own_fk ON MEDIA_REQUEST(current_owner) TABLESPACE pg_default; +CREATE INDEX mer_hea_fk ON MEDIA_REQUEST (hea_id) TABLESPACE pg_default; +CREATE INDEX mer_cre_by_fk ON MEDIA_REQUEST (created_by) TABLESPACE pg_default; +CREATE INDEX mer_lst_mod_by_fk ON MEDIA_REQUEST (last_modified_by) TABLESPACE pg_default; +CREATE INDEX mer_req_fk ON MEDIA_REQUEST (requestor) TABLESPACE pg_default; +CREATE INDEX mer_cur_own_fk ON MEDIA_REQUEST (current_owner) TABLESPACE pg_default; -CREATE INDEX nod_ctr_fk ON NODE_REGISTER(ctr_id) TABLESPACE pg_default; -CREATE INDEX nod_cre_by_fk ON NODE_REGISTER(created_by) TABLESPACE pg_default; +CREATE INDEX nod_ctr_fk ON NODE_REGISTER (ctr_id) TABLESPACE pg_default; +CREATE INDEX nod_cre_by_fk ON NODE_REGISTER (created_by) TABLESPACE pg_default; -CREATE INDEX not_cas_fk ON NOTIFICATION(cas_id) TABLESPACE pg_default; -CREATE INDEX not_cre_by_fk ON NOTIFICATION(created_by) TABLESPACE pg_default; -CREATE INDEX not_lst_mod_fk ON NOTIFICATION(last_modified_by) TABLESPACE pg_default; +CREATE INDEX not_cas_fk ON NOTIFICATION (cas_id) TABLESPACE pg_default; +CREATE INDEX not_cre_by_fk ON NOTIFICATION (created_by) TABLESPACE pg_default; +CREATE INDEX not_lst_mod_fk ON NOTIFICATION (last_modified_by) TABLESPACE pg_default; -CREATE INDEX oaa_ado_fk ON OBJECT_ADMIN_ACTION(ado_id) TABLESPACE pg_default; -CREATE INDEX oaa_cad_fk ON OBJECT_ADMIN_ACTION(cad_id) TABLESPACE pg_default; -CREATE INDEX oaa_med_fk ON OBJECT_ADMIN_ACTION(med_id) TABLESPACE pg_default; -CREATE INDEX oaa_trd_fk ON OBJECT_ADMIN_ACTION(trd_id) TABLESPACE pg_default; -CREATE INDEX oaa_ohr_fk ON OBJECT_ADMIN_ACTION(ohr_id) TABLESPACE pg_default; -CREATE INDEX oaa_hid_by_fk ON OBJECT_ADMIN_ACTION(hidden_by) TABLESPACE pg_default; -CREATE INDEX oaa_mkd_del_by_fk ON OBJECT_ADMIN_ACTION(marked_for_manual_del_by) TABLESPACE pg_default; +CREATE INDEX oaa_ado_fk ON OBJECT_ADMIN_ACTION (ado_id) TABLESPACE pg_default; +CREATE INDEX oaa_cad_fk ON OBJECT_ADMIN_ACTION (cad_id) TABLESPACE pg_default; +CREATE INDEX oaa_med_fk ON OBJECT_ADMIN_ACTION (med_id) TABLESPACE pg_default; +CREATE INDEX oaa_trd_fk ON OBJECT_ADMIN_ACTION (trd_id) TABLESPACE pg_default; +CREATE INDEX oaa_ohr_fk ON OBJECT_ADMIN_ACTION (ohr_id) TABLESPACE pg_default; +CREATE INDEX oaa_hid_by_fk ON OBJECT_ADMIN_ACTION (hidden_by) TABLESPACE pg_default; +CREATE INDEX oaa_mkd_del_by_fk ON OBJECT_ADMIN_ACTION (marked_for_manual_del_by) TABLESPACE pg_default; -CREATE INDEX orq_med_fk ON OBJECT_RETRIEVAL_QUEUE(med_id) TABLESPACE pg_default; -CREATE INDEX orq_trd_fk ON OBJECT_RETRIEVAL_QUEUE(trd_id) TABLESPACE pg_default; -CREATE INDEX orq_cre_by_fk ON OBJECT_RETRIEVAL_QUEUE(created_by) TABLESPACE pg_default; -CREATE INDEX orq_lst_mod_by_fk ON OBJECT_RETRIEVAL_QUEUE(last_modified_by) TABLESPACE pg_default; +CREATE INDEX orq_med_fk ON OBJECT_RETRIEVAL_QUEUE (med_id) TABLESPACE pg_default; +CREATE INDEX orq_trd_fk ON OBJECT_RETRIEVAL_QUEUE (trd_id) TABLESPACE pg_default; +CREATE INDEX orq_cre_by_fk ON OBJECT_RETRIEVAL_QUEUE (created_by) TABLESPACE pg_default; +CREATE INDEX orq_lst_mod_by_fk ON OBJECT_RETRIEVAL_QUEUE (last_modified_by) TABLESPACE pg_default; -CREATE INDEX prn_cre_by_fk ON PROSECUTOR(created_by) TABLESPACE pg_default; -CREATE INDEX prn_lst_mod_by_fk ON PROSECUTOR(last_modified_by) TABLESPACE pg_default; +CREATE INDEX prn_cre_by_fk ON PROSECUTOR (created_by) TABLESPACE pg_default; +CREATE INDEX prn_lst_mod_by_fk ON PROSECUTOR (last_modified_by) TABLESPACE pg_default; -CREATE INDEX rep_cre_by_fk ON REPORT(created_by) TABLESPACE pg_default; -CREATE INDEX rep_lst_mod_by_fk ON REPORT(last_modified_by) TABLESPACE pg_default; +CREATE INDEX rep_cre_by_fk ON REPORT (created_by) TABLESPACE pg_default; +CREATE INDEX rep_lst_mod_by_fk ON REPORT (last_modified_by) TABLESPACE pg_default; --CREATE INDEX tra_cas_fk ON TRANSCRIPTION(cas_id) TABLESPACE pg_default; -CREATE INDEX tra_ctr_fk ON TRANSCRIPTION(ctr_id) TABLESPACE pg_default; -CREATE INDEX tra_trs_fk ON TRANSCRIPTION(trs_id) TABLESPACE pg_default; -CREATE INDEX tra_tru_fk ON TRANSCRIPTION(tru_id) TABLESPACE pg_default; +CREATE INDEX tra_ctr_fk ON TRANSCRIPTION (ctr_id) TABLESPACE pg_default; +CREATE INDEX tra_trs_fk ON TRANSCRIPTION (trs_id) TABLESPACE pg_default; +CREATE INDEX tra_tru_fk ON TRANSCRIPTION (tru_id) TABLESPACE pg_default; --CREATE INDEX tra_hea_fk ON TRANSCRIPTION(hea_id) TABLESPACE pg_default; -CREATE INDEX tra_cre_by_fk ON TRANSCRIPTION(created_by) TABLESPACE pg_default; -CREATE INDEX tra_lst_mod_by_fk ON TRANSCRIPTION(last_modified_by) TABLESPACE pg_default; -CREATE INDEX tra_trt_fk ON TRANSCRIPTION(trt_id) TABLESPACE pg_default; -CREATE INDEX tra_del_by_fk ON TRANSCRIPTION(deleted_by) TABLESPACE pg_default; -CREATE INDEX tra_req_by_fk ON TRANSCRIPTION(requested_by) TABLESPACE pg_default; - -CREATE INDEX trc_tra_fk ON TRANSCRIPTION_COMMENT(tra_id) TABLESPACE pg_default; -CREATE INDEX trc_trw_fk ON TRANSCRIPTION_COMMENT(trw_id) TABLESPACE pg_default; -CREATE INDEX trc_auth_fk ON TRANSCRIPTION_COMMENT(author) TABLESPACE pg_default; -CREATE INDEX trc_cre_by_fk ON TRANSCRIPTION_COMMENT(created_by) TABLESPACE pg_default; -CREATE INDEX trc_lst_mod_by_fk ON TRANSCRIPTION_COMMENT(last_modified_by) TABLESPACE pg_default; - -CREATE INDEX trd_tra_fk ON TRANSCRIPTION_DOCUMENT(tra_id) TABLESPACE pg_default; -CREATE INDEX trd_del_by_fk ON TRANSCRIPTION_DOCUMENT(deleted_by) TABLESPACE pg_default; -CREATE INDEX trd_upl_by_fk ON TRANSCRIPTION_DOCUMENT(uploaded_by) TABLESPACE pg_default; -CREATE INDEX trd_lst_mod_by_fk ON TRANSCRIPTION_DOCUMENT(last_modified_by) TABLESPACE pg_default; - -CREATE INDEX tlc_tra_fk ON TRANSCRIPTION_LINKED_CASE(tra_id) TABLESPACE pg_default; -CREATE INDEX tlc_cas_fk ON TRANSCRIPTION_LINKED_CASE(cas_id) TABLESPACE pg_default; - -CREATE INDEX trw_tra_fk ON TRANSCRIPTION_WORKFLOW(tra_id) TABLESPACE pg_default; -CREATE INDEX trw_trs_fk ON TRANSCRIPTION_WORKFLOW(trs_id) TABLESPACE pg_default; -CREATE INDEX trw_wrkflw_act_fk ON TRANSCRIPTION_WORKFLOW(workflow_actor) TABLESPACE pg_default; - -CREATE INDEX trm_mer_fk ON TRANSFORMED_MEDIA(mer_id) TABLESPACE pg_default; -CREATE INDEX trm_cre_by_fk ON TRANSFORMED_MEDIA(created_by) TABLESPACE pg_default; -CREATE INDEX trm_lst_mod_by_fk ON TRANSFORMED_MEDIA(last_modified_by) TABLESPACE pg_default; - -CREATE INDEX tod_cre_by_fk ON TRANSIENT_OBJECT_DIRECTORY(created_by) TABLESPACE pg_default; -CREATE INDEX tod_lst_mod_by_fk ON TRANSIENT_OBJECT_DIRECTORY(last_modified_by) TABLESPACE pg_default; -CREATE INDEX tod_trm_fk ON TRANSIENT_OBJECT_DIRECTORY(trm_id) TABLESPACE pg_default; -CREATE INDEX tod_ors_fk ON TRANSIENT_OBJECT_DIRECTORY(ors_id) TABLESPACE pg_default; +CREATE INDEX tra_cre_by_fk ON TRANSCRIPTION (created_by) TABLESPACE pg_default; +CREATE INDEX tra_lst_mod_by_fk ON TRANSCRIPTION (last_modified_by) TABLESPACE pg_default; +CREATE INDEX tra_trt_fk ON TRANSCRIPTION (trt_id) TABLESPACE pg_default; +CREATE INDEX tra_del_by_fk ON TRANSCRIPTION (deleted_by) TABLESPACE pg_default; +CREATE INDEX tra_req_by_fk ON TRANSCRIPTION (requested_by) TABLESPACE pg_default; + +CREATE INDEX trc_tra_fk ON TRANSCRIPTION_COMMENT (tra_id) TABLESPACE pg_default; +CREATE INDEX trc_trw_fk ON TRANSCRIPTION_COMMENT (trw_id) TABLESPACE pg_default; +CREATE INDEX trc_auth_fk ON TRANSCRIPTION_COMMENT (author) TABLESPACE pg_default; +CREATE INDEX trc_cre_by_fk ON TRANSCRIPTION_COMMENT (created_by) TABLESPACE pg_default; +CREATE INDEX trc_lst_mod_by_fk ON TRANSCRIPTION_COMMENT (last_modified_by) TABLESPACE pg_default; + +CREATE INDEX trd_tra_fk ON TRANSCRIPTION_DOCUMENT (tra_id) TABLESPACE pg_default; +CREATE INDEX trd_del_by_fk ON TRANSCRIPTION_DOCUMENT (deleted_by) TABLESPACE pg_default; +CREATE INDEX trd_upl_by_fk ON TRANSCRIPTION_DOCUMENT (uploaded_by) TABLESPACE pg_default; +CREATE INDEX trd_lst_mod_by_fk ON TRANSCRIPTION_DOCUMENT (last_modified_by) TABLESPACE pg_default; + +CREATE INDEX tlc_tra_fk ON TRANSCRIPTION_LINKED_CASE (tra_id) TABLESPACE pg_default; +CREATE INDEX tlc_cas_fk ON TRANSCRIPTION_LINKED_CASE (cas_id) TABLESPACE pg_default; + +CREATE INDEX trw_tra_fk ON TRANSCRIPTION_WORKFLOW (tra_id) TABLESPACE pg_default; +CREATE INDEX trw_trs_fk ON TRANSCRIPTION_WORKFLOW (trs_id) TABLESPACE pg_default; +CREATE INDEX trw_wrkflw_act_fk ON TRANSCRIPTION_WORKFLOW (workflow_actor) TABLESPACE pg_default; + +CREATE INDEX trm_mer_fk ON TRANSFORMED_MEDIA (mer_id) TABLESPACE pg_default; +CREATE INDEX trm_cre_by_fk ON TRANSFORMED_MEDIA (created_by) TABLESPACE pg_default; +CREATE INDEX trm_lst_mod_by_fk ON TRANSFORMED_MEDIA (last_modified_by) TABLESPACE pg_default; + +CREATE INDEX tod_cre_by_fk ON TRANSIENT_OBJECT_DIRECTORY (created_by) TABLESPACE pg_default; +CREATE INDEX tod_lst_mod_by_fk ON TRANSIENT_OBJECT_DIRECTORY (last_modified_by) TABLESPACE pg_default; +CREATE INDEX tod_trm_fk ON TRANSIENT_OBJECT_DIRECTORY (trm_id) TABLESPACE pg_default; +CREATE INDEX tod_ors_fk ON TRANSIENT_OBJECT_DIRECTORY (ors_id) TABLESPACE pg_default; --v19 security -CREATE INDEX grp_rol_fk ON SECURITY_GROUP(rol_id) TABLESPACE pg_default; -CREATE INDEX grp_cre_by_fk ON SECURITY_GROUP(created_by) TABLESPACE pg_default; -CREATE INDEX grp_lst_mod_by_fk ON SECURITY_GROUP(last_modified_by) TABLESPACE pg_default; +CREATE INDEX grp_rol_fk ON SECURITY_GROUP (rol_id) TABLESPACE pg_default; +CREATE INDEX grp_cre_by_fk ON SECURITY_GROUP (created_by) TABLESPACE pg_default; +CREATE INDEX grp_lst_mod_by_fk ON SECURITY_GROUP (last_modified_by) TABLESPACE pg_default; --CREATE INDEX grc_grp_fk ON SECURITY_GROUP_COURTHOUSE_AE(grp_id); -CREATE INDEX grc_cth_fk ON SECURITY_GROUP_COURTHOUSE_AE(cth_id) TABLESPACE pg_default; +CREATE INDEX grc_cth_fk ON SECURITY_GROUP_COURTHOUSE_AE (cth_id) TABLESPACE pg_default; -CREATE INDEX gua_grp_fk ON SECURITY_GROUP_USER_ACCOUNT_AE(grp_id) TABLESPACE pg_default; +CREATE INDEX gua_grp_fk ON SECURITY_GROUP_USER_ACCOUNT_AE (grp_id) TABLESPACE pg_default; --CREATE INDEX gua_usr_fk ON SECURITY_GROUP_USER_ACCOUNT_AE(usr_id); --CREATE INDEX rop_rol_fk ON SECURITY_ROLE_PERMISSION_AE(rol_id); -CREATE INDEX rop_per_fk ON SECURITY_ROLE_PERMISSION_AE(per_id) TABLESPACE pg_default; +CREATE INDEX rop_per_fk ON SECURITY_ROLE_PERMISSION_AE (per_id) TABLESPACE pg_default; --v6 retention -CREATE INDEX car_cas_fk ON CASE_RETENTION(cas_id) TABLESPACE pg_default; -CREATE INDEX car_rpt_fk ON CASE_RETENTION(rpt_id) TABLESPACE pg_default; -CREATE INDEX car_cre_by_fk ON CASE_RETENTION(created_by) TABLESPACE pg_default; -CREATE INDEX car_lst_mod_by_fk ON CASE_RETENTION(last_modified_by) TABLESPACE pg_default; -CREATE INDEX car_sub_by_fk ON CASE_RETENTION(submitted_by) TABLESPACE pg_default; -CREATE INDEX car_cmr_fk ON CASE_RETENTION(cmr_id) TABLESPACE pg_default; +CREATE INDEX car_cas_fk ON CASE_RETENTION (cas_id) TABLESPACE pg_default; +CREATE INDEX car_rpt_fk ON CASE_RETENTION (rpt_id) TABLESPACE pg_default; +CREATE INDEX car_cre_by_fk ON CASE_RETENTION (created_by) TABLESPACE pg_default; +CREATE INDEX car_lst_mod_by_fk ON CASE_RETENTION (last_modified_by) TABLESPACE pg_default; +CREATE INDEX car_sub_by_fk ON CASE_RETENTION (submitted_by) TABLESPACE pg_default; +CREATE INDEX car_cmr_fk ON CASE_RETENTION (cmr_id) TABLESPACE pg_default; -CREATE INDEX cmr_cas_fk ON CASE_MANAGEMENT_RETENTION(cas_id) TABLESPACE pg_default; -CREATE INDEX cmr_rpt_fk ON CASE_MANAGEMENT_RETENTION(rpt_id) TABLESPACE pg_default; -CREATE INDEX cmr_eve_fk ON CASE_MANAGEMENT_RETENTION(eve_id) TABLESPACE pg_default; +CREATE INDEX cmr_cas_fk ON CASE_MANAGEMENT_RETENTION (cas_id) TABLESPACE pg_default; +CREATE INDEX cmr_rpt_fk ON CASE_MANAGEMENT_RETENTION (rpt_id) TABLESPACE pg_default; +CREATE INDEX cmr_eve_fk ON CASE_MANAGEMENT_RETENTION (eve_id) TABLESPACE pg_default; -CREATE INDEX rpt_cre_by_fk ON RETENTION_POLICY_TYPE(created_by) TABLESPACE pg_default; -CREATE INDEX rpt_lst_mod_by_fk ON RETENTION_POLICY_TYPE(last_modified_by) TABLESPACE pg_default; +CREATE INDEX rpt_cre_by_fk ON RETENTION_POLICY_TYPE (created_by) TABLESPACE pg_default; +CREATE INDEX rpt_lst_mod_by_fk ON RETENTION_POLICY_TYPE (last_modified_by) TABLESPACE pg_default; -CREATE INDEX rpr_rpt_fk ON RPS_RETAINER(rpt_id) TABLESPACE pg_default; -CREATE INDEX rpr_cre_by_fk ON RPS_RETAINER(created_by) TABLESPACE pg_default; -CREATE INDEX rpr_lst_mod_by_fk ON RPS_RETAINER(last_modified_by) TABLESPACE pg_default; +CREATE INDEX rpr_rpt_fk ON RPS_RETAINER (rpt_id) TABLESPACE pg_default; +CREATE INDEX rpr_cre_by_fk ON RPS_RETAINER (created_by) TABLESPACE pg_default; +CREATE INDEX rpr_lst_mod_by_fk ON RPS_RETAINER (last_modified_by) TABLESPACE pg_default; -CREATE INDEX rah_cas_fk ON CASE_RETENTION_AUDIT_HERITAGE(cas_id) TABLESPACE pg_default; -CREATE INDEX rah_rpt_fk ON CASE_RETENTION_AUDIT_HERITAGE(rpt_id) TABLESPACE pg_default; -CREATE INDEX rah_c_username_fk ON CASE_RETENTION_AUDIT_HERITAGE(c_username) TABLESPACE pg_default; -CREATE INDEX rah_r_creator_fk ON CASE_RETENTION_AUDIT_HERITAGE(r_creator_name) TABLESPACE pg_default; -CREATE INDEX rah_r_modifier_fk ON CASE_RETENTION_AUDIT_HERITAGE(r_modifier) TABLESPACE pg_default; -CREATE INDEX rah_owner_fk ON CASE_RETENTION_AUDIT_HERITAGE(owner_name) TABLESPACE pg_default; +CREATE INDEX rah_cas_fk ON CASE_RETENTION_AUDIT_HERITAGE (cas_id) TABLESPACE pg_default; +CREATE INDEX rah_rpt_fk ON CASE_RETENTION_AUDIT_HERITAGE (rpt_id) TABLESPACE pg_default; +CREATE INDEX rah_c_username_fk ON CASE_RETENTION_AUDIT_HERITAGE (c_username) TABLESPACE pg_default; +CREATE INDEX rah_r_creator_fk ON CASE_RETENTION_AUDIT_HERITAGE (r_creator_name) TABLESPACE pg_default; +CREATE INDEX rah_r_modifier_fk ON CASE_RETENTION_AUDIT_HERITAGE (r_modifier) TABLESPACE pg_default; +CREATE INDEX rah_owner_fk ON CASE_RETENTION_AUDIT_HERITAGE (owner_name) TABLESPACE pg_default; -CREATE INDEX rcc_cre_by_fk ON RETENTION_CONFIDENCE_CATEGORY_MAPPER(created_by) TABLESPACE pg_default; -CREATE INDEX rcc_lst_mod_by_fk ON RETENTION_CONFIDENCE_CATEGORY_MAPPER(last_modified_by) TABLESPACE pg_default; +CREATE INDEX rcc_cre_by_fk ON RETENTION_CONFIDENCE_CATEGORY_MAPPER (created_by) TABLESPACE pg_default; +CREATE INDEX rcc_lst_mod_by_fk ON RETENTION_CONFIDENCE_CATEGORY_MAPPER (last_modified_by) TABLESPACE pg_default; -CREATE INDEX cao_rpt_fk ON CASE_OVERFLOW(rpt_id) TABLESPACE pg_default; -CREATE INDEX cao_cas_fk ON CASE_OVERFLOW(cas_id) TABLESPACE pg_default; +CREATE INDEX cao_rpt_fk ON CASE_OVERFLOW (rpt_id) TABLESPACE pg_default; +CREATE INDEX cao_cas_fk ON CASE_OVERFLOW (cas_id) TABLESPACE pg_default; --v2 -CREATE INDEX cth_cn_idx ON COURTHOUSE(UPPER(courthouse_name)) TABLESPACE pg_default; -CREATE INDEX ctr_cn_idx ON COURTROOM(UPPER(courtroom_name)) TABLESPACE pg_default; -CREATE INDEX dfc_dn_idx ON DEFENCE(UPPER(defence_name)) TABLESPACE pg_default; -CREATE INDEX dfd_dn_idx ON DEFENDANT(UPPER(defendant_name)) TABLESPACE pg_default; -CREATE INDEX eve_ei_ic_idx ON EVENT(event_id,is_current) TABLESPACE pg_default; -CREATE INDEX eve_ts_idx ON EVENT(event_ts) TABLESPACE pg_default; -CREATE INDEX hea_hd_idx ON HEARING(hearing_date) TABLESPACE pg_default; -CREATE INDEX jud_jn_idx ON JUDGE(UPPER(judge_name)) TABLESPACE pg_default; -CREATE INDEX med_mf_idx ON MEDIA(media_file) TABLESPACE pg_default; -CREATE INDEX med_st_et_idx ON MEDIA(start_ts,end_ts) TABLESPACE pg_default; -CREATE INDEX med_chronicle_id_idx ON MEDIA(chronicle_id) TABLESPACE pg_default; -CREATE INDEX prn_pn_idx ON PROSECUTOR(UPPER(prosecutor_name)) TABLESPACE pg_default; -CREATE INDEX usr_un_idx ON USER_ACCOUNT(user_full_name) TABLESPACE pg_default; -CREATE INDEX usr_upea_idx ON USER_ACCOUNT(UPPER(user_email_address)) TABLESPACE pg_default; -CREATE INDEX usr_ag_idx ON USER_ACCOUNT(account_guid) TABLESPACE pg_default; +CREATE INDEX cth_cn_idx ON COURTHOUSE (UPPER(courthouse_name)) TABLESPACE pg_default; +CREATE INDEX ctr_cn_idx ON COURTROOM (UPPER(courtroom_name)) TABLESPACE pg_default; +CREATE INDEX dfc_dn_idx ON DEFENCE (UPPER(defence_name)) TABLESPACE pg_default; +CREATE INDEX dfd_dn_idx ON DEFENDANT (UPPER(defendant_name)) TABLESPACE pg_default; +CREATE INDEX eve_ei_ic_idx ON EVENT (event_id, is_current) TABLESPACE pg_default; +CREATE INDEX eve_ts_idx ON EVENT (event_ts) TABLESPACE pg_default; +CREATE INDEX hea_hd_idx ON HEARING (hearing_date) TABLESPACE pg_default; +CREATE INDEX jud_jn_idx ON JUDGE (UPPER(judge_name)) TABLESPACE pg_default; +CREATE INDEX med_mf_idx ON MEDIA (media_file) TABLESPACE pg_default; +CREATE INDEX med_st_et_idx ON MEDIA (start_ts, end_ts) TABLESPACE pg_default; +CREATE INDEX med_chronicle_id_idx ON MEDIA (chronicle_id) TABLESPACE pg_default; +CREATE INDEX prn_pn_idx ON PROSECUTOR (UPPER(prosecutor_name)) TABLESPACE pg_default; +CREATE INDEX usr_un_idx ON USER_ACCOUNT (user_full_name) TABLESPACE pg_default; +CREATE INDEX usr_upea_idx ON USER_ACCOUNT (UPPER(user_email_address)) TABLESPACE pg_default; +CREATE INDEX usr_ag_idx ON USER_ACCOUNT (account_guid) TABLESPACE pg_default; --v6 CREATE UNIQUE INDEX event_handler_event_type_event_event_sub_type_unq ON darts.event_handler USING btree - (event_type COLLATE pg_catalog."default" ASC NULLS LAST, event_sub_type COLLATE pg_catalog."default" ASC NULLS LAST) + (event_type COLLATE pg_catalog."default" ASC NULLS LAST, event_sub_type COLLATE pg_catalog."default" ASC NULLS LAST) TABLESPACE pg_default WHERE active; CREATE UNIQUE INDEX retention_policy_type_type_unq ON darts.retention_policy_type USING btree - (fixed_policy_key COLLATE pg_catalog."default" ASC NULLS LAST) + (fixed_policy_key COLLATE pg_catalog."default" ASC NULLS LAST) TABLESPACE pg_default WHERE policy_end_ts IS NULL; - + CREATE INDEX eod_manifest_file_idx ON darts.external_object_directory USING btree - (manifest_file COLLATE pg_catalog."default" text_pattern_ops ASC NULLS LAST) + (manifest_file COLLATE pg_catalog."default" text_pattern_ops ASC NULLS LAST) TABLESPACE pg_default; - + CREATE INDEX dfd_dn_trgm_idx ON defendant USING gin (defendant_name gin_trgm_ops); CREATE INDEX eve_evt_trgm_idx ON event USING gin (event_text gin_trgm_ops); @@ -319,25 +321,25 @@ CREATE INDEX cas_cn_trgm_idx ON court_case USING gin (case_number gin_trgm_ops); CREATE INDEX ctr_cn_trgm_idx ON courtroom USING gin (courtroom_name gin_trgm_ops); --v14 -CREATE INDEX eve_ei_mi_idx ON event(event_id,message_id); +CREATE INDEX eve_ei_mi_idx ON event (event_id, message_id); --v15 -CREATE INDEX ard_ct_idx ON arm_rpo_execution_detail(created_ts); -CREATE INDEX aut_tn_idx ON automated_task(task_name); -CREATE INDEX mer_rs_idx ON media_request(request_status); -CREATE INDEX not_ns_idx ON notification(notification_status); -CREATE INDEX rcc_cc_idx ON retention_confidence_category_mapper(confidence_category); -CREATE INDEX rpt_fpk_idx ON retention_policy_type(fixed_policy_key); +CREATE INDEX ard_ct_idx ON arm_rpo_execution_detail (created_ts); +CREATE INDEX aut_tn_idx ON automated_task (task_name); +CREATE INDEX mer_rs_idx ON media_request (request_status); +CREATE INDEX not_ns_idx ON notification (notification_status); +CREATE INDEX rcc_cc_idx ON retention_confidence_category_mapper (confidence_category); +CREATE INDEX rpt_fpk_idx ON retention_policy_type (fixed_policy_key); --v16 -CREATE INDEX ccd_ct_idx ON cc_dets(category_type); -CREATE INDEX wcc_ct_idx ON wk_case_correction(category_type); +CREATE INDEX ccd_ct_idx ON cc_dets (category_type); +CREATE INDEX wcc_ct_idx ON wk_case_correction (category_type); --v17 -CREATE INDEX wca_cdt_idx ON wk_case_activity_data(closed_date_type); +CREATE INDEX wca_cdt_idx ON wk_case_activity_data (closed_date_type); --v18 -CREATE INDEX crd_rpt_idx ON cr_dets(rpt_id); +CREATE INDEX crd_rpt_idx ON cr_dets (rpt_id); diff --git a/src/main/resources/db/reference/modernised_darts_schema.sql b/src/main/resources/db/reference/modernised_darts_schema.sql index ce33278bdd7..3d39e13e72a 100644 --- a/src/main/resources/db/reference/modernised_darts_schema.sql +++ b/src/main/resources/db/reference/modernised_darts_schema.sql @@ -1053,6 +1053,7 @@ CREATE TABLE external_object_directory ,created_by INTEGER NOT NULL ,last_modified_ts TIMESTAMP WITH TIME ZONE NOT NULL ,last_modified_by INTEGER NOT NULL +,create_record_processed_ts TIMESTAMP WITH TIME ZONE ) TABLESPACE pg_default; COMMENT ON COLUMN external_object_directory.eod_id diff --git a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmBatchProcessResponseFilesImplTest.java b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmBatchProcessResponseFilesImplTest.java index 65d3364be30..d0227e525d5 100644 --- a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmBatchProcessResponseFilesImplTest.java +++ b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmBatchProcessResponseFilesImplTest.java @@ -138,7 +138,7 @@ void setupData() { deleteArmResponseFilesHelper, featureFlagLogApi )); - + } @BeforeAll @@ -246,7 +246,6 @@ void batchProcessResponseFiles_batchSizeLargerThanMaxContinuationBatchSize_shoul when(armDataManagementApi.listResponseBlobsUsingMarker(PREFIX, 1, null)).thenReturn(continuationTokenBlobs); when(armDataManagementApi.listResponseBlobsUsingMarker(PREFIX, 1, continuationToken)).thenReturn(continuationTokenBlobs2); - List inboundList1 = new ArrayList<>(Collections.singletonList(externalObjectDirectoryArmDropZone)); ExternalObjectDirectoryEntity externalObjectDirectoryEntity2 = mock(ExternalObjectDirectoryEntity.class); List inboundList2 = new ArrayList<>(Collections.singletonList(externalObjectDirectoryEntity2)); @@ -415,7 +414,6 @@ void processBatchResponseFiles_unableToFindResponseFiles_responseProcessingFaile doNothing().when(armBatchProcessResponseFiles).updateExternalObjectDirectoryStatus(any(), any(), any()); - armBatchProcessResponseFiles.processBatchResponseFiles(batchUploadFileFilenameProcessor, armBatchResponses, userAccount); diff --git a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImplTest.java b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImplTest.java index b5101178aaf..9d8f73ac8c6 100644 --- a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoBacklogCatchupServiceImplTest.java @@ -118,7 +118,7 @@ void performCatchup_doesNothing_whenNoEodsToProcess() { armRpoExecutionDetailEntity.setArmRpoStatus(ArmRpoHelper.completedRpoStatus()); when(armRpoService.getLatestArmRpoExecutionDetailEntity()).thenReturn(armRpoExecutionDetailEntity); - when(externalObjectDirectoryRepository.findOldestByInputUploadProcessedTsAndStatusAndLocation(any(), any())) + when(externalObjectDirectoryRepository.findOldestByCreateRecordProcessedTsAndStatusAndLocation(any(), any())) .thenReturn(null); // when @@ -140,8 +140,8 @@ void performCatchup_doesNothing_whenEarliestEodTooRecent() { ExternalObjectDirectoryEntity eod = new ExternalObjectDirectoryEntity(); eod.setCreatedDateTime(OffsetDateTime.now().minusHours(1)); // recent - eod.setInputUploadProcessedTs(OffsetDateTime.now().minusHours(1)); // recent - when(externalObjectDirectoryRepository.findOldestByInputUploadProcessedTsAndStatusAndLocation(any(), any())) + eod.setCreateRecordProcessedTs(OffsetDateTime.now().minusHours(1)); // recent + when(externalObjectDirectoryRepository.findOldestByCreateRecordProcessedTsAndStatusAndLocation(any(), any())) .thenReturn(eod); when(currentTimeHelper.currentOffsetDateTime()).thenReturn(OffsetDateTime.now()); @@ -166,8 +166,8 @@ void performCatchup_runsSuccessfully_whenValid() { ExternalObjectDirectoryEntity eod = new ExternalObjectDirectoryEntity(); OffsetDateTime earliest = OffsetDateTime.now().minusHours(100); eod.setCreatedDateTime(earliest); - eod.setInputUploadProcessedTs(earliest); - when(externalObjectDirectoryRepository.findOldestByInputUploadProcessedTsAndStatusAndLocation(any(), any())) + eod.setCreateRecordProcessedTs(earliest); + when(externalObjectDirectoryRepository.findOldestByCreateRecordProcessedTsAndStatusAndLocation(any(), any())) .thenReturn(eod); when(currentTimeHelper.currentOffsetDateTime()).thenReturn(OffsetDateTime.now()); diff --git a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImplTest.java b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImplTest.java index b810bad9112..9b672498324 100644 --- a/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/darts/arm/service/impl/ArmRpoServiceImplTest.java @@ -193,7 +193,7 @@ void reconcileArmRpoCsvData_Success() { armRpoExecutionDetailEntity.setCreatedDateTime(OffsetDateTime.parse("2025-02-02T12:34:56Z")); when(armAutomatedTaskRepository.findByAutomatedTaskTaskName(any())) .thenReturn(Optional.of(createArmAutomatedTaskEntity())); - when(externalObjectDirectoryRepository.findByStatusAndInputUploadProcessedTsWithPaging(any(), any(), any(), any())) + when(externalObjectDirectoryRepository.findByStatusAndCreateRecordProcessedTsWithPaging(any(), any(), any(), any())) .thenReturn(pagedEods); File file = TestUtils.getFile("Tests/arm/rpo/armRpoCsvData.csv"); @@ -205,7 +205,7 @@ void reconcileArmRpoCsvData_Success() { assertEquals(eodHelperMocks.getStoredStatus(), externalObjectDirectoryEntity1.getStatus()); assertEquals(eodHelperMocks.getArmReplayStatus(), externalObjectDirectoryEntity2.getStatus()); - verify(externalObjectDirectoryRepository).findByStatusAndInputUploadProcessedTsWithPaging( + verify(externalObjectDirectoryRepository).findByStatusAndCreateRecordProcessedTsWithPaging( eq(eodHelperMocks.getArmRpoPendingStatus()), eq(OffsetDateTime.parse("2025-01-31T11:34Z")), eq(OffsetDateTime.parse("2025-02-01T11:34Z")), diff --git a/src/test/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTaskTest.java b/src/test/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTaskTest.java index 6705459647c..64cab17d330 100644 --- a/src/test/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTaskTest.java +++ b/src/test/java/uk/gov/hmcts/darts/task/runner/impl/ProcessArmRpoPendingAutomatedTaskTest.java @@ -105,7 +105,7 @@ void positiveRunTaskDuration1H() { processArmRpoPendingAutomatedTask.runTask(); verify(externalObjectDirectoryRepository) - .updateByStatusEqualsAndInputUploadProcessedTsBefore( + .updateByStatusEqualsAndCreateRecordProcessedTsBefore( objectRecordStatusEntityPending, currentTime.minus(Duration.ofHours(1)), objectRecordStatusEntityStored, @@ -141,7 +141,7 @@ void positiveRunTaskDuration24H() { processArmRpoPendingAutomatedTask.runTask(); verify(externalObjectDirectoryRepository) - .updateByStatusEqualsAndInputUploadProcessedTsBefore( + .updateByStatusEqualsAndCreateRecordProcessedTsBefore( objectRecordStatusEntityPending, currentTime.minus(Duration.ofHours(24)), objectRecordStatusEntityStored,