diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java index 343551e4c..50a8c1c87 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java @@ -60,6 +60,7 @@ public class FileModel { private Map fileAttributes = new HashMap<>(); private String dossierId; private OffsetDateTime redactionModificationDate; + private OffsetDateTime fileManipulationDate; public boolean isAnalysisRequired(){ return this.fullAnalysisRequired || this.reanalysisRequired; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java index cb3078225..b5ae2c887 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java @@ -135,6 +135,9 @@ public class FileEntity { @Column private OffsetDateTime redactionModificationDate; + @Column + private OffsetDateTime fileManipulationDate; + @Column(columnDefinition = "text", name = "excluded_pages") @Convert(converter = JSONIntegerSetConverter.class) private Set excludedPages = new HashSet<>(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index b23980795..bcdd634f2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -35,6 +35,7 @@ public class FileStatusPersistenceService { public void createStatus(String dossierId, String fileId, String filename, String uploader) { + OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); FileEntity file = new FileEntity(); file.setId(fileId); file.setDossierId(dossierId); @@ -42,10 +43,11 @@ public class FileStatusPersistenceService { file.setProcessingStatus(ProcessingStatus.UNPROCESSED); file.setWorkflowStatus(WorkflowStatus.NEW); file.setNumberOfPages(0); - file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setAdded(now); file.setUploader(uploader); - file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastUploaded(now); + file.setLastUpdated(now); + file.setFileManipulationDate(now); fileRepository.save(file); } @@ -123,6 +125,7 @@ public class FileStatusPersistenceService { return; } fileRepository.updateLastOCRTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), time); + fileRepository.updateFileModificationDate(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @@ -367,4 +370,11 @@ public class FileStatusPersistenceService { public List getAllRelevantStatusesForReanalysisScheduler() { return fileRepository.getAllRelevantStatusesForReanalysisScheduler(); } + + + @Transactional + public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate){ + fileRepository.updateFileModificationDate(fileId, fileManipulationDate); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index 152063583..95ce76e20 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -74,6 +74,10 @@ public interface FileRepository extends JpaRepository { @Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.lastOCRTime = :lastOCRTime where f.id = :fileId") void updateLastOCRTime(String fileId, OffsetDateTime lastUpdated, OffsetDateTime lastOCRTime); + @Modifying + @Query("update FileEntity f set f.fileManipulationDate = :fileManipulationDate where f.id = :fileId") + void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate); + @Modifying @Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.hasAnnotationComments = :hasAnnotationComments where f.id = :fileId") void updateHasComments(String fileId, OffsetDateTime lastUpdated, boolean hasAnnotationComments); @@ -120,7 +124,7 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + - "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " + + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + "f.assignee = null, f.approvalDate = null, f.lastManualRedaction = null, f.numberOfAnalyses = 0, " + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 27841437d..c0ad1f2dc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -25,6 +25,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -91,6 +93,10 @@ public class ReanalysisController implements ReanalysisResource { public TextHighlightResponse processTextHighlights(@RequestBody TextHighlightRequest textHighlightRequest){ var textHighlightResponse = pDFTronRedactionClient.processTextHighlights(textHighlightRequest); + + if(textHighlightRequest.getOperation().equals(TextHighlightOperation.REMOVE) || textHighlightRequest.getOperation().equals(TextHighlightOperation.CONVERT)){ + fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } if(textHighlightRequest.getOperation().equals(TextHighlightOperation.CONVERT)){ fileStatusService.setStatusFullReprocess(textHighlightRequest.getDossierId(), textHighlightRequest.getFileId(), 1); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index 0b888312a..80d3d0680 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -325,6 +325,11 @@ public class FileStatusService { } + public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate){ + fileStatusPersistenceService.updateFileModificationDate(fileId, fileManipulationDate); + } + + public void setAssignee(String dossierId, String fileId, String assignee) { if (StringUtils.isNotEmpty(assignee) && !dossierPersistenceService.getAndValidateDossier(dossierId) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/10-added-file-manipulation-date.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/10-added-file-manipulation-date.changelog.yaml new file mode 100644 index 000000000..81e51c73a --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/10-added-file-manipulation-date.changelog.yaml @@ -0,0 +1,11 @@ +databaseChangeLog: + - changeSet: + id: added-file-manipulation-date.changelog + author: dom + changes: + - addColumn: + columns: + - column: + name: file_manipulation_date + type: TIMESTAMP WITHOUT TIME ZONE + tableName: file diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml index a552a1583..d4a44d7a2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml @@ -19,3 +19,5 @@ databaseChangeLog: file: db/changelog/sql/7.2-set-dossier-status.sql - include: file: db/changelog/9-changed-annotation-modification-date.changelog.yaml + - include: + file: db/changelog/10-added-file-manipulation-date.changelog.yaml diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 6922e420d..72bc48b32 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -120,6 +120,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getFileManipulationDate()).isNotNull(); fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), "1"); diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index a51ff188c..3603275ae 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -27,7 +27,7 @@ 3.76.0 2.18.0 - 3.42.0 + 3.44.0 3.19.0