From 9bca6b406a5c6baf226fa920e3cfb43bb9986e72 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Wed, 13 Sep 2023 12:16:20 +0200 Subject: [PATCH] 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;