diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java index 2839c8a42..84fcce8dc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java @@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.migration; import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.MIGRATION_QUEUE; import static com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingQueueNames.LAYOUT_PARSING_REQUEST_QUEUE; +import java.time.OffsetDateTime; import java.util.List; import java.util.Map; import java.util.Set; @@ -27,6 +28,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.migration.MigratedIds; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus; @@ -182,14 +184,14 @@ public class SaasMigrationService implements TenantSyncService { String dossierTemplateId = dossierService.getDossierById(dossierId).getDossierTemplateId(); rabbitTemplate.convertAndSend(MIGRATION_QUEUE, - MigrationRequest.builder() - .dossierTemplateId(dossierTemplateId) - .dossierId(dossierId) - .fileId(fileId) - .fileIsApproved(fileStatusPersistenceService.getStatus(fileId).getWorkflowStatus().equals(WorkflowStatus.APPROVED)) - .manualRedactions(manualRedactionProviderService.getManualRedactions(fileId, ManualChangesQueryOptions.allWithoutDeleted())) - .entitiesWithComments(commentService.getCommentCounts(fileId).keySet()) - .build()); + MigrationRequest.builder() + .dossierTemplateId(dossierTemplateId) + .dossierId(dossierId) + .fileId(fileId) + .fileIsApproved(fileStatusPersistenceService.getStatus(fileId).getWorkflowStatus().equals(WorkflowStatus.APPROVED)) + .manualRedactions(manualRedactionProviderService.getManualRedactions(fileId, ManualChangesQueryOptions.allWithoutDeleted())) + .entitiesWithComments(commentService.getCommentCounts(fileId).keySet()) + .build()); } catch (Exception e) { log.error("Queuing of entityLog migration failed with {}", e.getMessage()); saasMigrationStatusPersistenceService.updateErrorStatus(fileId, String.format("Queuing of entityLog migration failed with %s", e.getMessage())); @@ -201,9 +203,9 @@ public class SaasMigrationService implements TenantSyncService { private boolean layoutParsingFilesExist(String dossierId, String fileId) { return storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_STRUCTURE)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_TEXT)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_PAGES)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_POSITION)); + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_TEXT)) // + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_PAGES)) // + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_POSITION)); } @@ -243,11 +245,23 @@ public class SaasMigrationService implements TenantSyncService { } + public void requeueErrorFiles() { + + automaticAnalysisJob.stopForTenant(TenantContext.getTenantId()); + saasMigrationStatusPersistenceService.findAllByStatus(SaasMigrationStatus.ERROR) + .forEach(migrationStatus -> startMigrationForFile(migrationStatus.getDossierId(), migrationStatus.getFileId())); + + } + + private void migrateAnnotationIdsAndAddManualAddRedactionsAndDeleteSectionGrid(String dossierId, String fileId) { MigratedIds migratedIds = getMigratedIds(dossierId, fileId); Map oldToNewMapping = migratedIds.buildOldToNewMapping(); updateAnnotationIds(dossierId, fileId, oldToNewMapping); + List forceRedactionIdsToDelete = migratedIds.getForceRedactionIdsToDelete(); + softDeleteForceRedactions(fileId, forceRedactionIdsToDelete); + log.info("Soft-deleted force redactions."); List manualRedactionEntriesToAdd = migratedIds.getManualRedactionEntriesToAdd(); int count = addManualRedactionEntries(manualRedactionEntriesToAdd); log.info("Added {} additional manual entries.", count); @@ -275,6 +289,12 @@ public class SaasMigrationService implements TenantSyncService { } + private void softDeleteForceRedactions(String fileId, List forceRedactionIdsToDelete) { + + manualRedactionService.softDeleteForceRedactions(fileId, forceRedactionIdsToDelete); + } + + private int addManualRedactionEntries(List manualRedactionEntriesToAdd) { manualRedactionEntriesToAdd.forEach(add -> { @@ -294,10 +314,18 @@ public class SaasMigrationService implements TenantSyncService { Map newToOldMapping = migratedIds.buildNewToOldMapping(); updateAnnotationIds(dossierId, fileId, newToOldMapping); deleteManualRedactionEntries(migratedIds.getManualRedactionEntriesToAdd()); + undeleteForceRedactions(fileId, migratedIds.getForceRedactionIdsToDelete()); saasMigrationStatusPersistenceService.createMigrationRequiredStatus(dossierId, fileId); } + private void undeleteForceRedactions(String fileId, List forceRedactionIdsToDelete) { + + manualRedactionService.undeleteForceRedactions(fileId, forceRedactionIdsToDelete); + + } + + private void deleteManualRedactionEntries(List manualRedactionEntriesToAdd) { manualRedactionService.deleteManualRedactionEntries(manualRedactionEntriesToAdd); @@ -310,10 +338,10 @@ public class SaasMigrationService implements TenantSyncService { updateAnnotationIds(fileId, idMapping); } catch (Exception e) { String message = String.format("Error during annotation id migration for tenant %s dossier %s and file %s, cause %s", - TenantContext.getTenantId(), - dossierId, - fileId, - e.getMessage()); + TenantContext.getTenantId(), + dossierId, + fileId, + e.getMessage()); saasMigrationStatusPersistenceService.updateErrorStatus(fileId, message); log.error(message); throw e; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java index 18235d8c6..73871243a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java @@ -175,7 +175,6 @@ public class ManualRedactionService { manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest, removeRedactionRequest.getTypeToRemove(), removeRedactionRequest.getDossierTemplateId()); - log.info("add removeRedaction for file {} and annotation {}", fileId, removeRedactionRequest.getAnnotationId()); removeRedactionPersistenceService.insert(fileId, removeRedactionRequest); @@ -496,6 +495,19 @@ public class ManualRedactionService { } + public void softDeleteForceRedactions(String fileId, List ids) { + + OffsetDateTime now = OffsetDateTime.now(); + ids.forEach(id -> forceRedactionPersistenceService.softDelete(fileId, id, now)); + } + + + public void undeleteForceRedactions(String fileId, List ids) { + + ids.forEach(id -> forceRedactionPersistenceService.undelete(fileId, id)); + } + + private void addManualRedactionEntry(String fileId, EntityLogEntry entityLogEntry) { ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder() diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java index 474c52fac..523d56078 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/migration/MigratedIds.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import lombok.AllArgsConstructor; @@ -21,6 +22,8 @@ public class MigratedIds { List manualRedactionEntriesToAdd; + List forceRedactionIdsToDelete; + public Map buildOldToNewMapping() {