From 849506eb2ee0656bb980915e0ccf54d2cf1d53d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 5 Nov 2024 11:39:16 +0100 Subject: [PATCH] RED-6420: Added errorCode to file, reset processingErrorCounter on rules change --- .../api/impl/controller/RulesController.java | 3 +++ ...atusProcessingUpdateInternalController.java | 6 +++--- .../processor/entity/dossier/FileEntity.java | 6 ++++++ .../FileStatusPersistenceService.java | 10 ++++++++-- .../persistence/repository/FileRepository.java | 11 ++++++++++- .../db/changelog/db.changelog-tenant.yaml | 4 +++- .../tenant/144-add-error-code-to-file.yaml | 11 +++++++++++ .../integration/tests/FileAttributeTest.java | 2 +- .../{ => component}/ComponentOverrideTest.java | 3 +-- .../dossier/file/ErrorCode.java | 5 +++++ .../dossier/file/FileErrorInfo.java | 18 ++++++++++++++++++ 11 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-error-code-to-file.yaml rename persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/{ => component}/ComponentOverrideTest.java (99%) create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/ErrorCode.java diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java index e76aee9e8..ac872dedd 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java @@ -26,6 +26,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.FileU import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.utils.RulesValidationMapper; import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesResource; @@ -52,6 +53,7 @@ public class RulesController implements RulesResource { private final RulesPersistenceService rulesPersistenceService; private final RulesValidationService rulesValidationService; private final AuditPersistenceService auditPersistenceService; + private final FileStatusPersistenceService fileStatusPersistenceService; @Override @@ -75,6 +77,7 @@ public class RulesController implements RulesResource { } if (!rules.isDryRun()) { rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); + fileStatusPersistenceService.resetErrorCounter(rulesUploadRequest.getDossierTemplateId()); } auditPersistenceService.audit(AuditRequest.builder() diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java index 7d530b5d5..40948a6a4 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileStatusProcessingUpdateInternalController.java @@ -41,7 +41,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP new FileErrorInfo("preprocessing failed", MessagingConfiguration.PRE_PROCESSING_DLQ, "pdftron-service", - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null)); } @@ -97,7 +97,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP new FileErrorInfo("ocr failed", MessagingConfiguration.OCR_DLQ, "ocr-service", - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null)); } @@ -127,7 +127,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP new FileErrorInfo("indexing failed", MessagingConfiguration.INDEXING_DQL, "search-service", - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS))); + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null)); } 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 76a1a2945..2c8ab77eb 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 @@ -10,6 +10,7 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ErrorCode; 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; @@ -198,6 +199,11 @@ public class FileEntity { @Column private OffsetDateTime errorTimestamp; + @Column + @Enumerated(EnumType.STRING) + private ErrorCode errorCode; + + @ElementCollection(fetch = FetchType.EAGER) private List componentMappingVersions; 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 e996e84e6..7ad1d4115 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 @@ -210,12 +210,13 @@ public class FileStatusPersistenceService { public void updateStatusErrorInfo(String fileId, FileErrorInfo fileErrorInfo) { if (fileErrorInfo == null) { - fileRepository.updateStatusErrorInfo(fileId, null, null, null, null); + fileRepository.updateStatusErrorInfo(fileId, null, null, null, null, null); } else { fileRepository.updateStatusErrorInfo(fileId, fileErrorInfo.getCause().substring(0, Math.min(fileErrorInfo.getCause().length(), 255)), fileErrorInfo.getQueue(), fileErrorInfo.getService(), + fileErrorInfo.getErrorCode(), fileErrorInfo.getTimestamp()); } @@ -230,7 +231,7 @@ public class FileStatusPersistenceService { } if (processingStatus == ProcessingStatus.PROCESSED) { // reset the error info - fileRepository.updateStatusErrorInfo(fileId, null, null, null, null); + fileRepository.updateStatusErrorInfo(fileId, null, null, null, null, null); // In case the file is updated to "processed", "lastProcessed" date should be updated to "now" fileRepository.updateProcessingStatus(fileId, processingStatus, @@ -620,6 +621,11 @@ public class FileStatusPersistenceService { fileRepository.updateFileModificationDate(fileId, fileManipulationDate); } + @Transactional + public void resetErrorCounter(String dossierTemplateId){ + fileRepository.updateErrorCounter(dossierTemplateId, 0); + } + @Transactional public void updateHasHighlights(String fileId, boolean hasHighlights) { 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 2c90f7e3a..a961381ac 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 @@ -13,6 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FilePageCountsProjection; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileProcessingStatusProjection; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileWorkflowStatusProjection; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ErrorCode; 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; @@ -121,12 +122,20 @@ public interface FileRepository extends JpaRepository { @Param("processingErrorCounter") int processingErrorCounter); + @Modifying(clearAutomatically = true) + @Query("update FileEntity f set f.processingErrorCounter = :processingErrorCounter " + + "where f.dossierId in (select fe.dossierId from FileEntity fe inner join DossierEntity d on d.id = fe.dossierId where d.dossierTemplateId = :dossierTemplateId) and f.processingStatus = 'ERROR'") + void updateErrorCounter(@Param("dossierTemplateId") String dossierTemplateId, + @Param("processingErrorCounter") int processingErrorCounter); + + @Modifying - @Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp " + "where f.id = :fileId") + @Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp, f.errorCode = :errorCode where f.id = :fileId") void updateStatusErrorInfo(@Param("fileId") String fileId, @Param("cause") String cause, @Param("queue") String queue, @Param("service") String service, + @Param("errorCode") ErrorCode errorCode, @Param("timestamp") OffsetDateTime timestamp); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index 25cc56447..7b88e0973 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -218,4 +218,6 @@ databaseChangeLog: - include: file: db/changelog/tenant/141-add-overwrite-file-counter-to-file.yaml - include: - file: db/changelog/tenant/143-modify-download-redaction-file-status-details.yaml \ No newline at end of file + file: db/changelog/tenant/143-modify-download-redaction-file-status-details.yaml + - include: + file: db/changelog/tenant/144-add-error-code-to-file.yaml \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-error-code-to-file.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-error-code-to-file.yaml new file mode 100644 index 000000000..7700451e2 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-error-code-to-file.yaml @@ -0,0 +1,11 @@ +databaseChangeLog: + - changeSet: + id: 144-add-error-code-to-file + author: dom + changes: + - addColumn: + columns: + - column: + name: error_code + type: VARCHAR(255) + tableName: file diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 7f57bc35c..0b83fe640 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -367,7 +367,7 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); - assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]")); + assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/component/ComponentOverrideTest.java similarity index 99% rename from persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java rename to persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/component/ComponentOverrideTest.java index 9e330c4e4..f8f462752 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/component/ComponentOverrideTest.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.peristence.v1.server.integration.tests; +package com.iqser.red.service.peristence.v1.server.integration.tests.component; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -25,7 +25,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.FileSer import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLogEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentsOverrides; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.RevertOverrideRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.AddFileRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v2.api.external.model.Component; import com.iqser.red.service.persistence.service.v2.api.external.model.ComponentValue; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/ErrorCode.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/ErrorCode.java new file mode 100644 index 000000000..998c82a15 --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/ErrorCode.java @@ -0,0 +1,5 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file; + +public enum ErrorCode { + RULES_EXECUTION_TIMEOUT, LOCKED_RULES, MISSING_DOCX_PDFTRON_LICENSE +} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java index 02bd8b189..89866feb2 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/dossier/file/FileErrorInfo.java @@ -18,6 +18,7 @@ public class FileErrorInfo { private String queue; private String service; private OffsetDateTime timestamp; + private ErrorCode errorCode; public FileErrorInfo(String cause, String queue, String service) { @@ -28,4 +29,21 @@ public class FileErrorInfo { this.timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); } + public FileErrorInfo(String cause, String queue, String service, OffsetDateTime timestamp) { + + this.cause = cause; + this.queue = queue; + this.service = service; + this.timestamp = timestamp; + } + + public FileErrorInfo(String cause, String queue, String service, ErrorCode errorCode) { + + this.cause = cause; + this.queue = queue; + this.service = service; + this.timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + this.errorCode = errorCode; + } + }