From 54a239581b4b267fb935b499182ac67651630521 Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Wed, 22 May 2024 14:41:20 +0200 Subject: [PATCH] RED-9180 - Add migration to reanalyze all non-approved files --- .../ReanalyzeNonApprovedFilesService.java | 38 +++++++++ .../ReanalyzeNonApprovedFilesMigration18.java | 37 +++++++++ .../repository/FileRepository.java | 5 ++ .../tests/ReanalyzeNonApprovedFilesTest.java | 82 +++++++++++++++++++ 4 files changed, 162 insertions(+) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/ReanalyzeNonApprovedFilesService.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReanalyzeNonApprovedFilesMigration18.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalyzeNonApprovedFilesTest.java diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/ReanalyzeNonApprovedFilesService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/ReanalyzeNonApprovedFilesService.java new file mode 100644 index 000000000..027900e25 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/ReanalyzeNonApprovedFilesService.java @@ -0,0 +1,38 @@ +package com.iqser.red.service.persistence.management.v1.processor.migration; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.ReanalysisService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ReanalyzeNonApprovedFilesService { + + private final DossierRepository dossierRepository; + private final FileRepository fileRepository; + private final ReanalysisService reanalysisService; + + + public void reanalyzeNonApprovedFiles() { + + List dossierEntities = dossierRepository.findAll(); + dossierEntities.forEach(dossierEntity -> { + Set unapprovedFilesByDossierIds = fileRepository.findByDossierIdAndWorkflowStatusNotApproved(dossierEntity.getId()).stream() + .map(FileEntity::getId) + .collect(Collectors.toSet()); + reanalysisService.reanalyzeFiles(dossierEntity.getId(), unapprovedFilesByDossierIds, true); + }); + } + +} \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReanalyzeNonApprovedFilesMigration18.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReanalyzeNonApprovedFilesMigration18.java new file mode 100644 index 000000000..d2652cfa7 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/ReanalyzeNonApprovedFilesMigration18.java @@ -0,0 +1,37 @@ +package com.iqser.red.service.persistence.management.v1.processor.migration.migrations; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; +import com.iqser.red.service.persistence.management.v1.processor.migration.ReanalyzeNonApprovedFilesService; + +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Setter +@Service +public class ReanalyzeNonApprovedFilesMigration18 extends Migration { + + @Autowired + private ReanalyzeNonApprovedFilesService reanalyzeNonApprovedFilesService; + + private static final String NAME = "Reanalyze all non-approved files"; + private static final long VERSION = 18; + + + public ReanalyzeNonApprovedFilesMigration18() { + + super(NAME, VERSION); + } + + + @Override + protected void migrate() { + + log.info("Reanalyzing all non-approved files."); + reanalyzeNonApprovedFilesService.reanalyzeNonApprovedFiles(); + } + +} \ No newline at end of file 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 7916254b3..7e2f24dcf 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 @@ -7,6 +7,7 @@ import java.util.Optional; 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 com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FilePageCountsProjection; @@ -28,6 +29,10 @@ public interface FileRepository extends JpaRepository { List findByAddedBefore(OffsetDateTime end); + @Query("SELECT f FROM FileEntity f WHERE f.dossierId = :dossierId AND f.workflowStatus <> 'APPROVED'") + List findByDossierIdAndWorkflowStatusNotApproved(@Param("dossierId") String dossierId); + + @Modifying @Query("update FileEntity e set e.hasRedactions = :hasRedactions ," + " e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions," + " e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments, " + " e.lastUpdated = :lastUpdated " + " where e.id =:fileId") void updateFlags(String fileId, diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalyzeNonApprovedFilesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalyzeNonApprovedFilesTest.java new file mode 100644 index 000000000..72fc86f81 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalyzeNonApprovedFilesTest.java @@ -0,0 +1,82 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.migration.MigrationController; +import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService; +import com.iqser.red.service.persistence.management.v1.processor.service.ReanalysisService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; + +public class ReanalyzeNonApprovedFilesTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private ReanalysisService reanalysisService; + + @Autowired + private MigrationController migrationController; + + @Autowired + private FileStatusManagementService fileStatusManagementService; + + + @Test + public void testReanalyzeNonApprovedFiles() { + + var filename1 = "test-dossier1-approved"; + var filename2 = "test-dossier1-not-approved"; + var filename3 = "test-dossier2-approved"; + var filename4 = "test-dossier2-not-approved"; + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier1 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "dossier1"); + var dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "dossier2"); + + var file1 = fileTesterAndProvider.testAndProvideFile(dossier1, filename1); + var file2 = fileTesterAndProvider.testAndProvideFile(dossier1, filename2); + var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, filename3); + var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, filename4); + + fileStatusManagementService.setStatusApproved(dossier1.getId(), file1.getFileId(), "user"); + fileStatusManagementService.setStatusApproved(dossier2.getId(), file3.getFileId(), "user"); + + var fileStatus1 = fileStatusManagementService.getFileStatus(file1.getFileId()); + var fileStatus2 = fileStatusManagementService.getFileStatus(file2.getFileId()); + var fileStatus3 = fileStatusManagementService.getFileStatus(file3.getFileId()); + var fileStatus4 = fileStatusManagementService.getFileStatus(file4.getFileId()); + + assertEquals(fileStatus1.getWorkflowStatus(), WorkflowStatus.APPROVED); + assertEquals(fileStatus2.getWorkflowStatus(), WorkflowStatus.NEW); + assertEquals(fileStatus3.getWorkflowStatus(), WorkflowStatus.APPROVED); + assertEquals(fileStatus4.getWorkflowStatus(), WorkflowStatus.NEW); + + migrationController.run("Reanalyze all non-approved files", true); + + fileStatus1 = fileStatusManagementService.getFileStatus(file1.getFileId()); + fileStatus2 = fileStatusManagementService.getFileStatus(file2.getFileId()); + fileStatus3 = fileStatusManagementService.getFileStatus(file3.getFileId()); + fileStatus4 = fileStatusManagementService.getFileStatus(file4.getFileId()); + + assertEquals(fileStatus1.getProcessingStatus(), ProcessingStatus.PRE_PROCESSING_QUEUED); + assertEquals(fileStatus2.getProcessingStatus(), ProcessingStatus.FULL_PROCESSING); + assertEquals(fileStatus3.getProcessingStatus(), ProcessingStatus.PRE_PROCESSING_QUEUED); + assertEquals(fileStatus4.getProcessingStatus(), ProcessingStatus.FULL_PROCESSING); + } + +} \ No newline at end of file