From e2c7238c67ca4fe7b1d6c28f221786ae7a6851ab Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Tue, 12 Sep 2023 09:15:00 +0200 Subject: [PATCH 1/7] DM-285: make RuleFileType.ENTITY default --- .../api/impl/controller/RulesController.java | 14 +++++----- .../api/external/resource/RulesResource.java | 4 +-- .../DossierTemplateTesterAndProvider.java | 5 ++-- .../server/integration/tests/RulesTest.java | 20 +++++++------- .../rules/RulesUploadRequest.java | 26 ++++++++++--------- .../rules/RulesUploadRequestModel.java | 25 ++++++++++++++++++ 6 files changed, 63 insertions(+), 31 deletions(-) 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/rules/RulesUploadRequestModel.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 9fd83f386..13f3a7b6d 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 @@ -31,6 +31,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.Audit import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RuleSyntaxErrorMessage; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.Rules; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequestModel; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; @@ -51,9 +52,10 @@ public class RulesController implements RulesResource { @Override @PreAuthorize("hasAuthority('" + WRITE_RULES + "')") - public ResponseEntity upload(@RequestBody RulesUploadRequest rules) { + public ResponseEntity upload(@RequestBody RulesUploadRequestModel rules) { - DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(rules.getRuleFileType(), rules.getRules()); + RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); + DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(rulesUploadRequest.getRuleFileType(), rulesUploadRequest.getRules()); if (!droolsSyntaxValidation.isCompiled()) { var rulesSyntaxErrorMessages = droolsSyntaxValidation.getDroolsSyntaxErrorMessages() .stream() @@ -61,13 +63,13 @@ public class RulesController implements RulesResource { .toList(); return new ResponseEntity<>(rulesSyntaxErrorMessages, HttpStatus.BAD_REQUEST); } - rulesPersistenceService.setRules(rules.getRules(), rules.getDossierTemplateId(), rules.getRuleFileType()); + rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) - .objectId(rules.getDossierTemplateId()) + .objectId(rulesUploadRequest.getDossierTemplateId()) .category(AuditCategory.DOSSIER_TEMPLATE.name()) - .message("Rules have been updated") + .message(String.format("%s Rules have been updated", rulesUploadRequest.getRuleFileType())) .build()); return ResponseEntity.ok().build(); @@ -107,7 +109,7 @@ public class RulesController implements RulesResource { @RequestPart(name = "file") MultipartFile file) { try { - return upload(new RulesUploadRequest(new String(file.getBytes(), StandardCharsets.UTF_8), dossierTemplateId, ruleFileType)); + return upload(new RulesUploadRequestModel(new String(file.getBytes(), StandardCharsets.UTF_8), dossierTemplateId, ruleFileType)); } catch (IOException e) { throw new FileUploadException("Could not upload file.", e); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/RulesResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/RulesResource.java index 198d6b8e0..385759f79 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/RulesResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/RulesResource.java @@ -14,7 +14,7 @@ import org.springframework.web.multipart.MultipartFile; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.Rules; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequestModel; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -42,7 +42,7 @@ public interface RulesResource { @PostMapping(value = RULES_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Rules upload successful."), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified.")}) - ResponseEntity upload(@RequestBody RulesUploadRequest rules); + ResponseEntity upload(@RequestBody RulesUploadRequestModel rules); @ResponseBody diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java index cfc954454..91e5e20b4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java @@ -15,10 +15,11 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisClient; import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient; import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequestModel; @Service public class DossierTemplateTesterAndProvider { @@ -78,7 +79,7 @@ public class DossierTemplateTesterAndProvider { assertThat(loadedTemplate).isEqualTo(result); - rulesClient.upload(new RulesUploadRequest("ABCD", loadedTemplate.getDossierTemplateId())); + rulesClient.upload(new RulesUploadRequestModel("ABCD", loadedTemplate.getDossierTemplateId(), RuleFileType.ENTITY)); legalBasisClient.setLegalBasisMapping(List.of(new LegalBasis("name", "description", "reason")), loadedTemplate.getDossierTemplateId()); loadedTemplate = dossierTemplateClient.getDossierTemplate(result.getDossierTemplateId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java index 43ea31130..b0553d4b4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java @@ -1,16 +1,18 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient; import com.iqser.red.service.peristence.v1.server.integration.client.VersionClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequest; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; +import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequestModel; public class RulesTest extends AbstractPersistenceServerServiceTest { @@ -29,13 +31,13 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - rulesClient.upload(new RulesUploadRequest("lorem ipsum", dossierTemplate.getId())); + rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY)); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()) .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), damit es ACTIVE ist assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); - rulesClient.upload(new RulesUploadRequest("lorem ipsum dolor sit amet", dossierTemplate.getId())); + rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY)); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())).get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum dolor sit amet"); 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/rules/RulesUploadRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequest.java index bf17d271f..74d4981f4 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequest.java @@ -2,32 +2,34 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertem import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; -import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AccessLevel; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; @Data +@Builder @AllArgsConstructor @NoArgsConstructor -@Schema(description = "Object containing a string of Drools rules.") +@FieldDefaults(level = AccessLevel.PRIVATE) public class RulesUploadRequest { - public RulesUploadRequest(String rules, String dossierTemplateId) { + public static RulesUploadRequest fromModel(RulesUploadRequestModel rulesUploadRequestModel) { - this.rules = rules; - this.dossierTemplateId = dossierTemplateId; - this.ruleFileType = RuleFileType.ENTITY; + return RulesUploadRequest.builder() + .rules(rulesUploadRequestModel.getRules()) + .dossierTemplateId(rulesUploadRequestModel.getDossierTemplateId()) + .ruleFileType(rulesUploadRequestModel.getRuleFileType() != null ? rulesUploadRequestModel.getRuleFileType() : RuleFileType.ENTITY) + .build(); } - @Schema(description = "The actual string of rules.") - private String rules; + String rules; - @Schema(description = "The DossierTemplate Id for these rules") - private String dossierTemplateId; + String dossierTemplateId; - @Schema(description = "The Rule file type of these rules", allowableValues = {"ENTITY", "COMPONENT"}) - private RuleFileType ruleFileType; + RuleFileType ruleFileType; } 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/rules/RulesUploadRequestModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java new file mode 100644 index 000000000..61542e543 --- /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/rules/RulesUploadRequestModel.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Object containing a string of Drools rules.") +public class RulesUploadRequestModel { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "The Rule file type of these rules", allowableValues = {"ENTITY", "COMPONENT"}) + private RuleFileType ruleFileType; + +} -- 2.47.2 From 7466a61583a72c27dea12600c1e57499c0f7b3e6 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Tue, 12 Sep 2023 17:22:19 +0200 Subject: [PATCH 2/7] DM-285: don't import empty component rules --- .../v1/processor/service/DossierTemplateImportService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 35b8845f8..7f23541b2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -305,7 +305,9 @@ public class DossierTemplateImportService { // set rules rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId, RuleFileType.ENTITY); - rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT); + if (request.getComponentRuleSet() != null) { + rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT); + } existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) .name())); -- 2.47.2 From 9bca6b406a5c6baf226fa920e3cfb43bb9986e72 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 12:16:20 +0200 Subject: [PATCH 3/7] DM-285: make rule value non nullable --- .../controller/RulesInternalController.java | 15 +++++---------- .../service/DossierTemplateCloneService.java | 7 +++++-- .../service/DossierTemplateImportService.java | 4 +++- ...anualRedactionDictionaryUpdateHandler.java | 1 - .../ManualRedactionService.java | 1 - .../DossierTemplatePersistenceService.java | 19 ++++++++++++++----- .../persistence/RulesPersistenceService.java | 5 +++-- .../db/changelog/db.changelog-tenant.yaml | 4 +++- .../111-make-rule-values-non-nullable.yaml | 8 ++++++++ .../rules/RulesUploadRequestModel.java | 3 +++ 10 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/111-make-rule-values-non-nullable.yaml diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/RulesInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/RulesInternalController.java index 35f54aa0a..ea56f5fa6 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/RulesInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/RulesInternalController.java @@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.v1.internal.api.controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.RulesTimeoutDetectedException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.internal.resources.RulesResource; @@ -30,17 +29,13 @@ public class RulesInternalController implements RulesResource { @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { - try { - var rules = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + var rules = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); - if (rules.isTimeoutDetected()) { - throw new RulesTimeoutDetectedException(dossierTemplateId); - } - - return rules.getVersion(); - } catch (NotFoundException e) { - return 0; + if (rules.isTimeoutDetected()) { + throw new RulesTimeoutDetectedException(dossierTemplateId); } + + return rules.getVersion(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java index 1038fcbf0..e703fff62 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java @@ -128,8 +128,11 @@ public class DossierTemplateCloneService { private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) { for (RuleFileType ruleFileType : RuleFileType.values()) { - - rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType); + try { + rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType); + } catch (NotFoundException e) { + log.debug("No {} rules found, will not be cloned!", ruleFileType); + } } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 7f23541b2..c1021b0b3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -411,7 +411,9 @@ public class DossierTemplateImportService { dossierTemplateEntity.setCreatedBy(request.getUserId()); //set rules rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity.getId(), RuleFileType.ENTITY); - rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT); + if (request.getComponentRuleSet() != null) { + rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT); + } var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity); loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java index 777bc976a..9326f98fa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java @@ -123,7 +123,6 @@ public class ManualRedactionDictionaryUpdateHandler { removeFromDictionary(entry.getTypeId(), entry.getValue(), dossierId, fileId, dictionaryEntryType); }); } else { - removeFromDictionary(dossierDictionaryTypeId, manualRequestWithRemoveFromDictionary.getValue(), dossierId, fileId, dictionaryEntryType); typeIdsOfModifiedDictionaries.add(dossierDictionaryTypeId); } 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 b8e84e4fe..70ce5b71c 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 @@ -113,7 +113,6 @@ public class ManualRedactionService { var manualRedactions = manualRedactionProviderService.getManualRedactions(fileId); //validate removing from dossier template dictionary - for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) { manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest, removeRedactionRequest.getTypeToRemove(), diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 6ee5e082b..1c459bb35 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -8,6 +8,7 @@ import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; @@ -28,6 +29,9 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class DossierTemplatePersistenceService { + @Value("${application.type}") + private String applicationType; + public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found."; private final DossierTemplateRepository dossierTemplateRepository; @@ -69,7 +73,6 @@ public class DossierTemplatePersistenceService { dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY); - rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.COMPONENT); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate); loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate)); @@ -102,12 +105,18 @@ public class DossierTemplatePersistenceService { if (legalBasis == null || legalBasis.isEmpty()) { return DossierTemplateStatus.INCOMPLETE; } - - var rules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY); - var componentRules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT); - if (rules == null || componentRules == null) { + try { + rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY); + } catch (NotFoundException e) { return DossierTemplateStatus.INCOMPLETE; } + if (applicationType.equals("DocuMine")) { + try { + rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT); + } catch (NotFoundException e) { + return DossierTemplateStatus.INCOMPLETE; + } + } var now = OffsetDateTime.now(); boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index 36348dc7f..68508c9cb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -8,6 +8,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import jakarta.transaction.Transactional; +import lombok.NonNull; import lombok.RequiredArgsConstructor; @Service @@ -100,7 +101,7 @@ public class RulesPersistenceService { end // --------------------------------------- Your rules below this line -------------------------------------------------- """; - + private final RuleSetRepository ruleSetRepository; @@ -130,7 +131,7 @@ public class RulesPersistenceService { @Transactional - public void setRules(String rules, String dossierTemplateId, RuleFileType ruleFileType) { + public void setRules(@NonNull String rules, String dossierTemplateId, RuleFileType ruleFileType) { ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).ifPresentOrElse(ruleSet -> { ruleSet.setDossierTemplateId(dossierTemplateId); 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 18935cdf7..e51438236 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 @@ -160,4 +160,6 @@ databaseChangeLog: - include: file: db/changelog/tenant/109-add-rules-timeout-detected-column.yaml - include: - file: db/changelog/tenant/110-add-rules-file-type.yaml \ No newline at end of file + file: db/changelog/tenant/110-add-rules-file-type.yaml + - include: + file: db/changelog/tenant/111-make-rule-values-non-nullable.yaml \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/111-make-rule-values-non-nullable.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/111-make-rule-values-non-nullable.yaml new file mode 100644 index 000000000..674622253 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/111-make-rule-values-non-nullable.yaml @@ -0,0 +1,8 @@ +databaseChangeLog: + - changeSet: + id: make-rule-values-non-nullable + author: kilian + changes: + - addNotNullConstraint: + columnName: value + tableName: rule_set 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/rules/RulesUploadRequestModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java index 61542e543..7090d4a0e 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.NonNull; @Data @NoArgsConstructor @@ -13,9 +14,11 @@ import lombok.NoArgsConstructor; @Schema(description = "Object containing a string of Drools rules.") public class RulesUploadRequestModel { + @NonNull @Schema(description = "The actual string of rules.") private String rules; + @NonNull @Schema(description = "The DossierTemplate Id for these rules") private String dossierTemplateId; -- 2.47.2 From 31890e643474c6367b19cc9e82dbf3bfcb3c4d91 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 14:24:25 +0200 Subject: [PATCH 4/7] DM-285: update component rules version with AnalyzeResult --- .../v1/processor/service/FileStatusService.java | 1 + .../service/ReanalysisRequiredStatusService.java | 16 ++++++++++++++-- .../manualredactions/ManualRedactionService.java | 2 +- .../FileStatusPersistenceService.java | 2 ++ .../LegalBasisChangePersistenceService.java | 6 ++++++ .../persistence/repository/FileRepository.java | 13 ++++++------- .../LegalBasisChangeRepository.java | 5 +++++ .../tests/DossierTemplateStatsTest.java | 12 ++++++------ .../v1/api/shared/model/AnalyzeResult.java | 1 + 9 files changed, 42 insertions(+), 16 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java index 9a9c9fe63..24912b848 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java @@ -435,6 +435,7 @@ public class FileStatusService { analyzeResult.getNumberOfPages(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), + analyzeResult.getComponentRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java index b599033fb..9db12cd3c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java @@ -14,6 +14,7 @@ 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.exception.DossierNotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; @@ -152,8 +153,8 @@ public class ReanalysisRequiredStatusService { var versions = new HashMap(); - versions.put(RULES, rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.ENTITY).getVersion()); - versions.put(COMPONENT_RULES, rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT).getVersion()); + versions.put(RULES, getRulesVersion(dossierTemplateId, RuleFileType.ENTITY)); + versions.put(COMPONENT_RULES, getRulesVersion(dossierTemplateId, RuleFileType.COMPONENT)); versions.put(DICTIONARY, dictionaryPersistenceService.getVersion(dossierTemplateId)); versions.put(LEGAL_BASIS, legalBasisMappingPersistenceService.getVersion(dossierTemplateId)); @@ -161,6 +162,17 @@ public class ReanalysisRequiredStatusService { } + private Long getRulesVersion(String dossierTemplateId, RuleFileType ruleFileType) { + + try { + return rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getVersion(); + } catch (NotFoundException e) { + log.info(e.getMessage()); + return -1L; + } + } + + private Long getDossierVersionData(String dossierId) { return dictionaryPersistenceService.getVersionForDossier(dossierId); 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 70ce5b71c..8f4325e9b 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 @@ -373,7 +373,7 @@ public class ManualRedactionService { if (manualRedactions.getLegalBasisChanges() != null) { manualRedactions.getLegalBasisChanges().forEach(e -> { if (!e.getStatus().equals(AnnotationStatus.REQUESTED) && e.getProcessedDate() == null) { - resizeRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId()); + legalBasisChangePersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId()); } }); } 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 912ea9679..29eba3d47 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 @@ -104,6 +104,7 @@ public class FileStatusPersistenceService { int numberOfPages, long dictionaryVersion, long rulesVersion, + long componentRulesVersion, long legalBasisVersion, long duration, long dossierDictionaryVersion, @@ -118,6 +119,7 @@ public class FileStatusPersistenceService { ProcessingStatus.PROCESSED, dictionaryVersion, rulesVersion, + componentRulesVersion, legalBasisVersion, duration, dossierDictionaryVersion, diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java index 75ab35e6d..1653b98b5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java @@ -84,4 +84,10 @@ public class LegalBasisChangePersistenceService { } + + public void markAsProcessed(String annotationId, String fileId) { + + legalBasisChangeRepository.markAsProcessed(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } + } 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 c18ede4a0..f01701af4 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 @@ -3,8 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import java.time.OffsetDateTime; import java.util.List; -import jakarta.transaction.Transactional; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -16,6 +14,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist 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; +import jakarta.transaction.Transactional; + public interface FileRepository extends JpaRepository { boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since); @@ -40,12 +40,13 @@ public interface FileRepository extends JpaRepository { @Modifying - @Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") + @Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.componentRulesVersion = :componentRulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") void updateProcessingStatus(String fileId, int numberOfPages, ProcessingStatus processingStatus, long dictionaryVersion, long rulesVersion, + long componentRulesVersion, long legalBasisVersion, long analysisDuration, long dossierDictionaryVersion, @@ -80,6 +81,7 @@ public interface FileRepository extends JpaRepository { @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId") void updateProcessingStatus(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, int processingErrorCounter); + @Modifying @Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp where f.id = :fileId") void updateStatusErrorInfo(String fileId, String cause, String queue, String service, OffsetDateTime timestamp); @@ -183,10 +185,7 @@ public interface FileRepository extends JpaRepository { void setLastManualChangeDate(String fileId, OffsetDateTime lastManualChangeDate, OffsetDateTime lastUpdated); - @Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false " - + " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )" - + " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " - + " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries") + @Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false " + " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )" + " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries") List getAllRelevantStatusesForReanalysisScheduler(int maxRetries); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java index 6fc4b3c99..0a027adba 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java @@ -31,4 +31,9 @@ public interface LegalBasisChangeRepository extends JpaRepository findByFileIdIncludeDeletions(String fileId, boolean includeDeletions); + + @Modifying + @Query("update ManualLegalBasisChangeEntity mlbc set mlbc.processedDate = :processedDate where mlbc.id = :annotationEntityId") + void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate); + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java index 108ffb89e..f5d492f4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java @@ -286,20 +286,20 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe for (int k = 0; k < 6; k++) { var fileId = fileTesterAndProvider.testAndProvideFileQuick(dossier, "file: " + k); - if (k == 1){ - fileStatusPersistenceService.updateProcessingStatus(fileId, k, 0L, 0L, 0L, 0L, 0L, 1, 1); + if (k == 1) { + fileStatusPersistenceService.updateProcessingStatus(fileId, k, 0L, 0L, 0L, 0L, 0L, 0L, 1, 1); reanalysisClient.excludePages(dossier.getId(), fileId, new PageExclusionRequest(List.of(new PageRange(k, k)))); } - if (k ==2) { + if (k == 2) { fileManagementClient.deleteFile(dossier.getId(), fileId); } - if (k == 3){ + if (k == 3) { fileManagementClient.hardDeleteFiles(dossier.getId(), Set.of(fileId)); } - if (k == 4){ + if (k == 4) { fileClient.setStatusUnderReview(dossier.getId(), fileId, userId); } - if (k == 5){ + if (k == 5) { fileClient.setStatusUnderApproval(dossier.getId(), fileId, userId); } } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AnalyzeResult.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AnalyzeResult.java index 2087b898e..5ef8e7b29 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AnalyzeResult.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/AnalyzeResult.java @@ -25,6 +25,7 @@ public class AnalyzeResult { private long dictionaryVersion; private long dossierDictionaryVersion; private long rulesVersion; + private long componentRulesVersion; private long legalBasisVersion; private boolean wasReanalyzed; -- 2.47.2 From d3db8c7b168a37e543c12f47613e04369b8deca7 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 15:14:41 +0200 Subject: [PATCH 5/7] DM-285: update component rules version with AnalyzeResult --- .../v1/processor/service/ReanalysisRequiredStatusService.java | 2 +- .../processor/service/persistence/RulesPersistenceService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java index 9db12cd3c..2e96b8f7a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java @@ -168,7 +168,7 @@ public class ReanalysisRequiredStatusService { return rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getVersion(); } catch (NotFoundException e) { log.info(e.getMessage()); - return -1L; + return 0L; } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index 68508c9cb..08f83f878 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -105,7 +105,7 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional + @Transactional(Transactional.TxType.REQUIRES_NEW) public RuleSetEntity getRules(String dossierTemplateId, RuleFileType ruleFileType) { if (ruleFileType.equals(RuleFileType.ENTITY)) { -- 2.47.2 From 70b7a258e9d4bd6e226a89a22390b840757f1952 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 16:04:17 +0200 Subject: [PATCH 6/7] DM-285: update component rules version with AnalyzeResult --- .../service/export/DossierTemplateExportService.java | 12 ++++++++---- .../service/persistence/RulesPersistenceService.java | 4 +--- .../rules/RulesUploadRequestModel.java | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java index 2a3efc95f..8d446586e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java @@ -177,10 +177,14 @@ public class DossierTemplateExportService { objectMapper.writeValueAsBytes(ruleSet.getValue()))); // add component rule set - var componentRuleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT); - fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, - getFilename(ExportFilename.COMPONENT_RULES, TXT_EXT), - objectMapper.writeValueAsBytes(componentRuleSet.getValue()))); + try { + var componentRuleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT); + fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, + getFilename(ExportFilename.COMPONENT_RULES, TXT_EXT), + objectMapper.writeValueAsBytes(componentRuleSet.getValue()))); + } catch (NotFoundException e) { + log.debug("No component rules present."); + } //N files with the related report templates var reportTemplateList = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplate.getId()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index 08f83f878..9ef6edbbb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -105,11 +105,9 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional(Transactional.TxType.REQUIRES_NEW) public RuleSetEntity getRules(String dossierTemplateId, RuleFileType ruleFileType) { if (ruleFileType.equals(RuleFileType.ENTITY)) { - return ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()) .orElseGet(() -> createAndGetDefaultRuleSet(dossierTemplateId, ruleFileType)); } @@ -118,7 +116,7 @@ public class RulesPersistenceService { } - private RuleSetEntity createAndGetDefaultRuleSet(String dossierTemplateId, RuleFileType ruleFileType) { + public RuleSetEntity createAndGetDefaultRuleSet(String dossierTemplateId, RuleFileType ruleFileType) { RuleSetEntity ruleSet = new RuleSetEntity(); ruleSet.setDossierTemplateId(dossierTemplateId); 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/rules/RulesUploadRequestModel.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java index 7090d4a0e..82eff8e88 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/rules/RulesUploadRequestModel.java @@ -23,6 +23,6 @@ public class RulesUploadRequestModel { private String dossierTemplateId; @Schema(description = "The Rule file type of these rules", allowableValues = {"ENTITY", "COMPONENT"}) - private RuleFileType ruleFileType; + private RuleFileType ruleFileType = RuleFileType.ENTITY; } -- 2.47.2 From 62065e89ca0ea535bd3922be64c315fd33971348 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 16:58:43 +0200 Subject: [PATCH 7/7] DM-285: get component version without transaction --- .../api/impl/controller/VersionsController.java | 3 +-- .../service/ReanalysisRequiredStatusService.java | 16 ++-------------- .../persistence/RulesPersistenceService.java | 15 +++------------ .../repository/RuleSetRepository.java | 4 ++++ 4 files changed, 10 insertions(+), 28 deletions(-) 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/VersionsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java index 35cce5ac1..af36f1e29 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/VersionsController.java @@ -33,8 +33,7 @@ public class VersionsController implements VersionsResource { var result = new HashMap(); dossierTemplateIds.forEach(rsId -> { - VersionsResponse response = new VersionsResponse(dictionaryPersistenceService.getVersion(rsId), - rulesPersistenceService.getRules(rsId, RuleFileType.ENTITY).getVersion()); + VersionsResponse response = new VersionsResponse(dictionaryPersistenceService.getVersion(rsId), rulesPersistenceService.getVersion(rsId, RuleFileType.ENTITY)); result.put(rsId, response); }); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java index 2e96b8f7a..405d28ab5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java @@ -14,7 +14,6 @@ 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.exception.DossierNotFoundException; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; @@ -153,8 +152,8 @@ public class ReanalysisRequiredStatusService { var versions = new HashMap(); - versions.put(RULES, getRulesVersion(dossierTemplateId, RuleFileType.ENTITY)); - versions.put(COMPONENT_RULES, getRulesVersion(dossierTemplateId, RuleFileType.COMPONENT)); + versions.put(RULES, rulesPersistenceService.getVersion(dossierTemplateId, RuleFileType.ENTITY)); + versions.put(COMPONENT_RULES, rulesPersistenceService.getVersion(dossierTemplateId, RuleFileType.COMPONENT)); versions.put(DICTIONARY, dictionaryPersistenceService.getVersion(dossierTemplateId)); versions.put(LEGAL_BASIS, legalBasisMappingPersistenceService.getVersion(dossierTemplateId)); @@ -162,17 +161,6 @@ public class ReanalysisRequiredStatusService { } - private Long getRulesVersion(String dossierTemplateId, RuleFileType ruleFileType) { - - try { - return rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getVersion(); - } catch (NotFoundException e) { - log.info(e.getMessage()); - return 0L; - } - } - - private Long getDossierVersionData(String dossierId) { return dictionaryPersistenceService.getVersionForDossier(dossierId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index 9ef6edbbb..db502994d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -105,26 +105,17 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; + @Transactional(Transactional.TxType.REQUIRES_NEW) public RuleSetEntity getRules(String dossierTemplateId, RuleFileType ruleFileType) { - if (ruleFileType.equals(RuleFileType.ENTITY)) { - return ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()) - .orElseGet(() -> createAndGetDefaultRuleSet(dossierTemplateId, ruleFileType)); - } return ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()) .orElseThrow(() -> new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId))); } - public RuleSetEntity createAndGetDefaultRuleSet(String dossierTemplateId, RuleFileType ruleFileType) { + public long getVersion(String dossierTemplateId, RuleFileType ruleFileType) { - RuleSetEntity ruleSet = new RuleSetEntity(); - ruleSet.setDossierTemplateId(dossierTemplateId); - ruleSet.setRuleFileType(ruleFileType.name()); - ruleSet.setValue(DEFAULT_RULES); - ruleSet.setVersion(1); - ruleSet.setTimeoutDetected(false); - return ruleSetRepository.save(ruleSet); + return ruleSetRepository.findVersionByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).orElse(-1L); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java index 5a4a5fb28..05a0ce002 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java @@ -18,4 +18,8 @@ public interface RuleSetRepository extends JpaRepository findByDossierTemplateIdAndRuleFileType(String dossierTemplateId, String ruleFileType); + + @Query("select r.version from RuleSetEntity r where r.dossierTemplateId = :dossierTemplateId and r.ruleFileType = :ruleFileType") + Optional findVersionByDossierTemplateIdAndRuleFileType(String dossierTemplateId, String ruleFileType); + } -- 2.47.2