From 8cec05e2bb624bb28c64082234f4085a410ec511 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 17 Oct 2024 10:10:13 +0200 Subject: [PATCH] RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 36 +++++++++++++------ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++++++ 4 files changed, 38 insertions(+), 13 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 diff --git a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts index d99698532..36bd0a21c 100644 --- a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts @@ -6,7 +6,7 @@ plugins { jacoco } -val redactionServiceVersion by rootProject.extra { "4.290.0" } +val redactionServiceVersion by rootProject.extra { "4.415.0-RED9472.1" } val pdftronRedactionServiceVersion by rootProject.extra { "4.87.0" } val redactionReportServiceVersion by rootProject.extra { "4.81.0" } val searchServiceVersion by rootProject.extra { "2.90.0" } 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 4eb3bc21f..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 @@ -21,21 +21,23 @@ 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; 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; 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 +51,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; @@ -60,20 +63,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - try { - var droolsValidation = rulesValidationService.validateRules(rulesUploadRequest.getRuleFileType(), rulesUploadRequest.getRules()); - droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); - if (!droolsValidation.isCompiled()) { + String mergedRulesString = ""; - 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!"); + var ruleEntityOptional = rulesPersistenceService.getRules(rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType()); + if (ruleEntityOptional.isPresent()) { + RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); + 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() @@ -103,6 +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"); + SystemRulesSeperationRequest systemRulesSeperationRequest = new SystemRulesSeperationRequest(ruleEntityOptional.get().getValue()); + log.info(systemRulesSeperationRequest.getRules()); + String cleanedRules = ruleBuilderClient.getRuleFileWithoutSystemRules(systemRulesSeperationRequest).getRules(); + ruleEntityOptional.get().setValue(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..909bbaf77 --- /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 { + +} \ No newline at end of file