RED-9180 - Add migration to reanalyze all non-approved files #491
@ -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<DossierEntity> dossierEntities = dossierRepository.findAll();
|
||||
dossierEntities.forEach(dossierEntity -> {
|
||||
Set<String> unapprovedFilesByDossierIds = fileRepository.findByDossierIdAndWorkflowStatusNotApproved(dossierEntity.getId()).stream()
|
||||
.map(FileEntity::getId)
|
||||
.collect(Collectors.toSet());
|
||||
reanalysisService.reanalyzeFiles(dossierEntity.getId(), unapprovedFilesByDossierIds, true);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@ -30,6 +30,10 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
List<FileEntity> findByAddedBefore(OffsetDateTime end);
|
||||
|
||||
|
||||
@Query("SELECT f FROM FileEntity f WHERE f.dossierId = :dossierId AND f.workflowStatus <> 'APPROVED'")
|
||||
List<FileEntity> findByDossierIdAndWorkflowStatusNotApproved(@Param("dossierId") String dossierId);
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity e set e.hasRedactions = :hasRedactions ,"
|
||||
+ " e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions,"
|
||||
@ -168,12 +172,13 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
@Param("lastUpdated") OffsetDateTime lastUpdated,
|
||||
@Param("softDeletedTime") OffsetDateTime softDeletedTime);
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, " + "f.deleted = :softDeletedTime where f.id in (:fileIds)")
|
||||
int softDeleteFiles(@Param("fileIds") List<String> fileIds,
|
||||
@Param("processingStatus") ProcessingStatus processingStatus,
|
||||
@Param("lastUpdated") OffsetDateTime lastUpdated,
|
||||
@Param("softDeletedTime") OffsetDateTime softDeletedTime);
|
||||
@Param("processingStatus") ProcessingStatus processingStatus,
|
||||
@Param("lastUpdated") OffsetDateTime lastUpdated,
|
||||
@Param("softDeletedTime") OffsetDateTime softDeletedTime);
|
||||
|
||||
|
||||
@Modifying
|
||||
@ -380,10 +385,7 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
+ " when f.deleted is not null then f.deleted "
|
||||
+ "end "
|
||||
+ "where f.id in (:fileIds)")
|
||||
int hardDeleteFiles(@Param("fileIds") List<String> fileIds,
|
||||
@Param("processingStatus") ProcessingStatus processingStatus,
|
||||
@Param("deletionTime") OffsetDateTime deletionTime);
|
||||
|
||||
int hardDeleteFiles(@Param("fileIds") List<String> fileIds, @Param("processingStatus") ProcessingStatus processingStatus, @Param("deletionTime") OffsetDateTime deletionTime);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user