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 f3813c32d..579122c85 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; @@ -201,6 +202,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 a3f2882a2..2e74953f0 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 @@ -213,12 +213,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()); } @@ -233,7 +234,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, 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 1a2388af6..93cdfde12 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 @@ -15,6 +15,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.projecti 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; @@ -133,11 +134,12 @@ public interface FileRepository extends JpaRepository { @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/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileModelMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileModelMapper.java index c1d89f926..987373f91 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileModelMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/FileModelMapper.java @@ -18,7 +18,7 @@ public class FileModelMapper implements BiConsumer { fileEntity.getFileAttributes() .forEach(fa -> fileModel.getFileAttributes().put(fa.getFileAttributeId().getFileAttributeConfigId(), fa.getValue())); - fileModel.setFileErrorInfo(new FileErrorInfo(fileEntity.getErrorCause(), fileEntity.getErrorQueue(), fileEntity.getErrorService(), fileEntity.getErrorTimestamp())); + fileModel.setFileErrorInfo(new FileErrorInfo(fileEntity.getErrorCause(), fileEntity.getErrorQueue(), fileEntity.getErrorService(), fileEntity.getErrorTimestamp(), fileEntity.getErrorCode())); fileModel.setComponentMappingVersions(getComponentMappingVersions(fileEntity)); } 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 6a2921877..82db9efe7 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 @@ -230,12 +230,14 @@ databaseChangeLog: - include: file: db/changelog/tenant/143-modify-download-redaction-file-status-details.yaml - include: - file: db/changelog/tenant/144-add-protobuf-migration-done-to-file.yaml + file: db/changelog/tenant/144-add-error-code-to-file.yaml - include: - file: db/changelog/tenant/145-add-indexes-to-file-table.yaml + file: db/changelog/tenant/145-add-protobuf-migration-done-to-file.yaml - include: - file: db/changelog/tenant/146-add-layout-parsing-type-to-dossier-template.yaml + file: db/changelog/tenant/146-add-indexes-to-file-table.yaml - include: - file: db/changelog/tenant/147-add-quotechar-to-component-mapping.yaml + file: db/changelog/tenant/147-add-layout-parsing-type-to-dossier-template.yaml - include: - file: db/changelog/tenant/148-remove-based-on-dict-annotation-id-columns.yaml + file: db/changelog/tenant/148-add-quotechar-to-component-mapping.yaml + - include: + file: db/changelog/tenant/149-remove-based-on-dict-annotation-id-columns.yaml 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..6a43e3f81 --- /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 \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-protobuf-migration-done-to-file.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/145-add-protobuf-migration-done-to-file.yaml similarity index 100% rename from persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/144-add-protobuf-migration-done-to-file.yaml rename to persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/145-add-protobuf-migration-done-to-file.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/145-add-indexes-to-file-table.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/146-add-indexes-to-file-table.yaml similarity index 100% rename from persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/145-add-indexes-to-file-table.yaml rename to persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/146-add-indexes-to-file-table.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/146-add-layout-parsing-type-to-dossier-template.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/147-add-layout-parsing-type-to-dossier-template.yaml similarity index 100% rename from persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/146-add-layout-parsing-type-to-dossier-template.yaml rename to persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/147-add-layout-parsing-type-to-dossier-template.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/147-add-quotechar-to-component-mapping.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/148-add-quotechar-to-component-mapping.yaml similarity index 100% rename from persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/147-add-quotechar-to-component-mapping.yaml rename to persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/148-add-quotechar-to-component-mapping.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/148-remove-based-on-dict-annotation-id-columns.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/149-remove-based-on-dict-annotation-id-columns.yaml similarity index 100% rename from persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/148-remove-based-on-dict-annotation-id-columns.yaml rename to persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/149-remove-based-on-dict-annotation-id-columns.yaml 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/ComponentOverrideTest.java index 7336ee468..4fa633a7d 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/ComponentOverrideTest.java @@ -76,7 +76,7 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId()); - var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename"); + var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename1"); System.out.println("DOSSIER TEMPLATE ID: " + dossierTemplate.getId()); System.out.println("DOSSIER ID: " + dossier.getId()); @@ -199,7 +199,7 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId()); - var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename"); + var file = fileTesterAndProvider.testAndProvideFile(dossier, "filename2"); System.out.println("DOSSIER TEMPLATE ID: " + dossierTemplate.getId()); System.out.println("DOSSIER ID: " + dossier.getId()); @@ -261,7 +261,7 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest assertTrue(overrides.getComponentOverrides().isEmpty()); // case 2: re-upload file that was deleted before overrides should also not be returned anymore - fileTesterAndProvider.testAndProvideFile(dossier, "filename"); + fileTesterAndProvider.testAndProvideFile(dossier, "filename3"); var e = assertThrows(FeignException.class, () -> componentClient.getOverrides(dossierTemplate.getId(), dossier.getId(), file.getId())); assertEquals(e.status(), 404); 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..ecf17c635 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,23 @@ 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; + } + + }