From b1d5d1632f26857cbe5df705149c9a02ce0173ec Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 1/2] RED-9472: seperation of system rules now calling respected endpoints in rules controller --- .../api/impl/controller/RulesController.java | 15 +++++++++++++++ ...sistenceServiceProcessorConfiguration.java | 3 ++- .../redactionservice/RuleBuilderClient.java | 10 ++++++++++ .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 -- .../rules/RulesUpdateRequest.java | 19 +++++++++++++++++++ .../rules/SystemRulesSeperationRequest.java | 17 +++++++++++++++++ 7 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/redactionservice/RuleBuilderClient.java 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/RulesUpdateRequest.java 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/SystemRulesSeperationRequest.java diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/RulesController.java index e76aee9e8..6ff15d4a5 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 @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.FileUploadException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; @@ -34,8 +35,10 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileTyp import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.DroolsValidationResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUpdateRequest; 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.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -49,6 +52,7 @@ public class RulesController implements RulesResource { private static final String DOWNLOAD_FILE_NAME = "rules.drl"; + private final RuleBuilderClient ruleBuilderClient; private final RulesPersistenceService rulesPersistenceService; private final RulesValidationService rulesValidationService; private final AuditPersistenceService auditPersistenceService; @@ -61,6 +65,12 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + var ruleEntityOptional = rulesPersistenceService.getRules(rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); + if (ruleEntityOptional.isPresent()) { + RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); + log.info("merged rules:{} ", ruleBuilderClient.getRuleFileWithSeperatedSystemRules(rulesUpdateRequest).getRules()); + } + try { var droolsValidation = rulesValidationService.validateRules(rulesUploadRequest.getRuleFileType(), rulesUploadRequest.getRules()); droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); @@ -104,6 +114,11 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isEmpty()) { throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); } + log.info("calling rules management to remove system rules of file {} ", ruleEntityOptional); + SystemRulesSeperationRequest systemRulesSeperationRequest = new SystemRulesSeperationRequest(ruleEntityOptional.get().getValue()); + String cleanedRules = ruleBuilderClient.getRuleFileWithoutSystemRules(systemRulesSeperationRequest).getRules(); + log.info("result from rules management seperation: {}", cleanedRules); + return new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java index 793880151..9170ec10f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java @@ -20,6 +20,7 @@ import org.springframework.retry.support.RetryTemplate; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.StatusReportClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient; import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; @@ -30,7 +31,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Configuration @ComponentScan -@EnableFeignClients(basePackageClasses = {PDFTronClient.class, StatusReportClient.class, SearchClient.class, RedactionClient.class, UsersClient.class}) +@EnableFeignClients(basePackageClasses = {PDFTronClient.class, StatusReportClient.class, SearchClient.class, RedactionClient.class, UsersClient.class, RuleBuilderClient.class}) @ImportAutoConfiguration(SharedMongoAutoConfiguration.class) public class PersistenceServiceProcessorConfiguration { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/redactionservice/RuleBuilderClient.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/redactionservice/RuleBuilderClient.java new file mode 100644 index 000000000..db06c9cff --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/client/redactionservice/RuleBuilderClient.java @@ -0,0 +1,10 @@ +package com.iqser.red.service.persistence.management.v1.processor.client.redactionservice; + +import org.springframework.cloud.openfeign.FeignClient; + +import com.iqser.red.service.redaction.v1.resources.RuleBuilderResource; + +@FeignClient(name = "RuleBuilderClient", url = "${redaction-service.url}") +public interface RuleBuilderClient extends RuleBuilderResource { + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RulesValidationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RulesValidationService.java index 97f0a1ed3..dfaeb8271 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RulesValidationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RulesValidationService.java @@ -19,6 +19,7 @@ public class RulesValidationService { public DroolsValidation validateRules(RuleFileType ruleFileType, String rules) { return redactionServiceClient.testRules(new RuleValidationModel(ruleFileType.name(), rules)); + } } 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 4205a9d36..2ab1bdb2e 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 @@ -5,7 +5,6 @@ import java.util.Optional; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.RuleSetEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; @@ -105,7 +104,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, 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/RulesUpdateRequest.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/RulesUpdateRequest.java new file mode 100644 index 000000000..8e17cb1ce --- /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/RulesUpdateRequest.java @@ -0,0 +1,19 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "Object containing a string of Drools rules.") +public class RulesUpdateRequest { + + @Schema(description = "The actual string of rules.") + private String existingRules; + @Schema(description = "The actual string of rules.") + private String updatedRules; + +} 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/SystemRulesSeperationRequest.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/SystemRulesSeperationRequest.java new file mode 100644 index 000000000..1aff6cb17 --- /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/SystemRulesSeperationRequest.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "Object containing a string of Drools rules.") +public class SystemRulesSeperationRequest { + + @Schema(description = "The string of rules that should be cleaned of sytem rules.") + private String rules; + +} From 1c6305385378adab9aac0d38bdbe6c9c220002a0 Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 9 Oct 2024 12:24:57 +0200 Subject: [PATCH 2/2] RED-9472: seperation of system rules now calling respected endpoints in rules controller --- .../api/impl/controller/RulesController.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 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/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 6ff15d4a5..b52e23f30 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 @@ -28,7 +28,6 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.utils.RulesValidationMapper; import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesResource; import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; @@ -64,27 +63,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; var ruleEntityOptional = rulesPersistenceService.getRules(rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); if (ruleEntityOptional.isPresent()) { RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); - log.info("merged rules:{} ", ruleBuilderClient.getRuleFileWithSeperatedSystemRules(rulesUpdateRequest).getRules()); - } - - try { - var droolsValidation = rulesValidationService.validateRules(rulesUploadRequest.getRuleFileType(), rulesUploadRequest.getRules()); - droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); - if (!droolsValidation.isCompiled()) { - - return new ResponseEntity<>(droolsValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); - } - } catch (FeignException e) { - if (e.status() == HttpStatus.BAD_REQUEST.value()) { - throw new BadRequestException("The provided rule string is not a valid drools rule file!"); + try { + ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + if (mergedRules.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { + DroolsValidationResponse mergedRulesValidationResponse = (DroolsValidationResponse) mergedRules.getBody(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesResponse) mergedRules.getBody()).getRules(); + } catch (FeignException e) { + if (e.status() == HttpStatus.BAD_REQUEST.value()) { + throw new BadRequestException("The provided rule string is not a valid drools rule file!"); + } } } if (!rules.isDryRun()) { - rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); + rulesPersistenceService.setRules(mergedRulesString, rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); } auditPersistenceService.audit(AuditRequest.builder() @@ -114,11 +112,11 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isEmpty()) { throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); } - log.info("calling rules management to remove system rules of file {} ", ruleEntityOptional); + log.info("calling rules management to remove system rules of file"); SystemRulesSeperationRequest systemRulesSeperationRequest = new SystemRulesSeperationRequest(ruleEntityOptional.get().getValue()); + log.info(systemRulesSeperationRequest.getRules()); String cleanedRules = ruleBuilderClient.getRuleFileWithoutSystemRules(systemRulesSeperationRequest).getRules(); - log.info("result from rules management seperation: {}", cleanedRules); - + ruleEntityOptional.get().setValue(cleanedRules); return new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); }