From 0c1670461b70210a6c95fa90694d237b7f9cded4 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 01/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../tests/ComponentOverrideTest.java | 2 - .../integration/tests/DictionaryTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../v1/server/integration/tests/FileTest.java | 18 ++-- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 18 +++- .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 26 files changed, 295 insertions(+), 96 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/RulesUploadResponse.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/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..892a9765a 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.4" } 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 e76aee9e8..a2e877bc7 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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 +37,11 @@ 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.RulesUploadResponse; +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 +55,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,21 +67,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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() @@ -96,6 +108,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -104,6 +157,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()); } @@ -134,6 +192,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 db614e5a0..27fd140ab 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 @@ -27,7 +27,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; String DOSSIER_TEMPLATE_PATH_VARIABLE = "/{dossierTemplateId}"; @@ -90,6 +92,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -105,4 +117,13 @@ public interface RulesResource { @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_PATH) ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 6c17e7741..4dfa5e8b4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 05ced6d54..a86335fc9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -120,7 +120,7 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -136,7 +136,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 6b5d5edca..89a0e472a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index 258102685..01f9d5381 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -150,6 +150,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -264,7 +265,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java index 8e79a863f..0524767d3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java @@ -4,10 +4,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.MockitoAnnotations.openMocks; import java.io.IOException; -import java.lang.reflect.Field; import java.util.List; import java.util.Set; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index 4b60b2210..e355f2929 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -1070,7 +1070,6 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryManagementService.addEntries(dtType.getTypeId(), List.of(dictionaryEntry), false, false, DictionaryEntryType.ENTRY, true); var dictionaryEntries = dictionaryManagementService.getAllEntriesInDossierTemplate(dtType.getTypeId(), dictionaryEntry, DictionaryEntryType.ENTRY); - assertThat(types.get(0).isHasDictionary()).isFalse(); assertThat(dictionaryEntries.get(0).getValue()).isEqualTo(dictionaryEntry); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 2d289bfce..d14347946 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -540,5 +540,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 235c50013..63211f19d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -357,18 +357,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 3c89bbb6b..ab88cfd9e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -28,7 +28,6 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.InputStreamResource; import org.springframework.mock.web.MockMultipartFile; import com.github.dockerjava.zerodep.shaded.org.apache.commons.codec.binary.Base64; @@ -1080,8 +1079,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { ClassPathResource newDocumentTextDataClassPath = new ClassPathResource("files/newDocumentData/new.DOCUMENT_TEXT.proto"); storageService.storeObject(TenantContext.getTenantId(), newDocumentTextDataStorageId, newDocumentTextDataClassPath.getInputStream()); - - DocumentStructureProto.DocumentStructure documentStructure = storageService.readProtoObject(TenantContext.getTenantId(), newDocumentStructureStorageId, DocumentStructureProto.DocumentStructure.parser()); @@ -1098,9 +1095,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest { newDocumentPositionDataStorageId, DocumentPositionDataProto.AllDocumentPositionData.parser()); - } + @Test @SneakyThrows @Disabled @@ -1174,6 +1171,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { @Test @Disabled public void testParseProtoFiles() throws Exception { + String tempDir = "/tmp"; Path documentStructurePath = Path.of(tempDir, "new.DOCUMENT_STRUCTURE.proto"); @@ -1186,14 +1184,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest { byte[] documentTextBytes = Files.readAllBytes(documentTextPath); byte[] documentPositionBytes = Files.readAllBytes(documentPositionPath); - DocumentStructureProto.DocumentStructure documentStructure = - DocumentStructureProto.DocumentStructure.parseFrom(documentStructureBytes); - DocumentPageProto.AllDocumentPages allDocumentPages = - DocumentPageProto.AllDocumentPages.parseFrom(documentPagesBytes); - DocumentTextDataProto.AllDocumentTextData allDocumentTextData = - DocumentTextDataProto.AllDocumentTextData.parseFrom(documentTextBytes); - DocumentPositionDataProto.AllDocumentPositionData allDocumentPositionData = - DocumentPositionDataProto.AllDocumentPositionData.parseFrom(documentPositionBytes); + DocumentStructureProto.DocumentStructure documentStructure = DocumentStructureProto.DocumentStructure.parseFrom(documentStructureBytes); + DocumentPageProto.AllDocumentPages allDocumentPages = DocumentPageProto.AllDocumentPages.parseFrom(documentPagesBytes); + DocumentTextDataProto.AllDocumentTextData allDocumentTextData = DocumentTextDataProto.AllDocumentTextData.parseFrom(documentTextBytes); + DocumentPositionDataProto.AllDocumentPositionData allDocumentPositionData = DocumentPositionDataProto.AllDocumentPositionData.parseFrom(documentPositionBytes); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 8003c6bd1..4e6cf9168 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -3,6 +3,7 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_DATABASE; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_PASSWORD; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -40,6 +41,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -64,6 +67,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.entity.configuration.ApplicationConfigurationEntity; @@ -106,8 +110,13 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; -import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; +import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.ComponentLogMongoService; @@ -158,6 +167,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -367,6 +378,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From d2380d47b2d62f36d1d927c6bbade5e359ec6d86 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 02/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../integration/tests/DictionaryTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 24 files changed, 283 insertions(+), 81 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/RulesUploadResponse.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/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 370f0c9d4..e4997b98b 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.89.0-RED10196.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 d9e7aa7a7..84463b84f 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; String DOSSIER_TEMPLATE_PATH_VARIABLE = "/{dossierTemplateId}"; @@ -91,6 +93,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -112,4 +124,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 05ced6d54..a86335fc9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -120,7 +120,7 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -136,7 +136,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 6b5d5edca..89a0e472a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index 258102685..01f9d5381 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -150,6 +150,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -264,7 +265,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index b8c80ef18..5aa8377c3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -1103,7 +1103,6 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryManagementService.addEntries(dtType.getTypeId(), List.of(dictionaryEntry), false, false, DictionaryEntryType.ENTRY, true); var dictionaryEntries = dictionaryManagementService.getAllEntriesInDossierTemplate(dtType.getTypeId(), dictionaryEntry, DictionaryEntryType.ENTRY); - assertThat(types.get(0).isHasDictionary()).isFalse(); assertThat(dictionaryEntries.get(0).getValue()).isEqualTo(dictionaryEntry); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 93ba08588..a4f0302b8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -357,18 +357,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From 94f288fc0ff45ab0384d76fdf5ecc31b9ee1ba9b Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 03/93] RED-9472: solving merge conflicts --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From 65d72a60ac6bd8af6f40e91b05dae57d2029eee5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 04/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From e5dd3e7abc15340729c5cefd6f8090de7c5ff8f6 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 05/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../integration/tests/DictionaryTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 24 files changed, 283 insertions(+), 81 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/RulesUploadResponse.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/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 370f0c9d4..e4997b98b 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.89.0-RED10196.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 81e87db57..ce3c70938 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String RESET_PATH = "/reset"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; @@ -92,6 +94,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -113,4 +125,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + RESET_PATH, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 05ced6d54..a86335fc9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -120,7 +120,7 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -136,7 +136,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 6b5d5edca..89a0e472a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index 258102685..01f9d5381 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -150,6 +150,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -264,7 +265,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index b8c80ef18..5aa8377c3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -1103,7 +1103,6 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { dictionaryManagementService.addEntries(dtType.getTypeId(), List.of(dictionaryEntry), false, false, DictionaryEntryType.ENTRY, true); var dictionaryEntries = dictionaryManagementService.getAllEntriesInDossierTemplate(dtType.getTypeId(), dictionaryEntry, DictionaryEntryType.ENTRY); - assertThat(types.get(0).isHasDictionary()).isFalse(); assertThat(dictionaryEntries.get(0).getValue()).isEqualTo(dictionaryEntry); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 93ba08588..a4f0302b8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -357,18 +357,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From f31d9170f81f6376d91485e5cf989a3be0bd4bbb Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 06/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From 482cad2a465667bae47ae78d7caf6488f7b868e5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 07/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From 7153681eb6b6d65f644f14aaf35f7b105b39dd6a Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 08/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 23 files changed, 283 insertions(+), 80 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/RulesUploadResponse.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/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 ce50d8ab3..7aa222798 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 81e87db57..ce3c70938 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String RESET_PATH = "/reset"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; @@ -92,6 +94,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -113,4 +125,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + RESET_PATH, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 05ced6d54..a86335fc9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -120,7 +120,7 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -136,7 +136,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 044a66552..114b55c5e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index 258102685..01f9d5381 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -150,6 +150,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -264,7 +265,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 93ba08588..a4f0302b8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -357,18 +357,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From 1991cfb8e597ac55c8ee778f5f28535be4c1573e Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 09/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From a02e48c17a5d1ae7da794c2dd8c24eeec400fe86 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 10/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From 11b799f8f4cc54d843cfe8b1ef9647a934c57a9b Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 11/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From d26a0189fed0d6c77fd3f12aa0012c4aff3c2d6f Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 12/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 730ac8653dbd445ecd31b92c0d39286c06514d77 Mon Sep 17 00:00:00 2001 From: Yannik Hampe Date: Fri, 22 Nov 2024 10:24:39 +0100 Subject: [PATCH 13/93] Update com.iqser.red.service.java-conventions.gradle.kts --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e4997b98b..7aa222798 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 @@ -7,7 +7,7 @@ plugins { } val redactionServiceVersion by rootProject.extra { "4.415.0-RED9472.4" } -val pdftronRedactionServiceVersion by rootProject.extra { "4.89.0-RED10196.0" } +val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.0" } val redactionReportServiceVersion by rootProject.extra { "4.81.0" } val searchServiceVersion by rootProject.extra { "2.90.0" } -- 2.47.2 From 650a32545073977d50326f46b91bb39ce7f009cb Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 25 Nov 2024 09:31:36 +0100 Subject: [PATCH 14/93] RED-9393 user stats controller added authority check --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../management/v1/processor/roles/ApplicationRoles.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 7aa222798..d2e885e60 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.415.0-RED9472.4" } +val redactionServiceVersion by rootProject.extra { "4.434.0-RED9472.1" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index a86335fc9..398c10639 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -75,7 +75,7 @@ public final class ApplicationRoles { READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, READ_REDACTION_LOG, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, -- 2.47.2 From 0e6455da102ccc4f170f913920ad107c6b4a662b Mon Sep 17 00:00:00 2001 From: yhampe Date: Tue, 3 Dec 2024 10:29:46 +0100 Subject: [PATCH 15/93] RED-9472 adjusted permissions/action roles --- .../management/v1/processor/roles/ApplicationRoles.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 398c10639..24ae410cb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -26,7 +26,7 @@ public final class ApplicationRoles { GET_TENANTS, CREATE_TENANT, READ_USERS, - READ_ALL_USERS, + READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, WRITE_USERS, READ_SMTP_CONFIGURATION, WRITE_SMTP_CONFIGURATION, @@ -75,7 +75,6 @@ public final class ApplicationRoles { READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, READ_REDACTION_LOG, - READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, @@ -120,7 +119,6 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -135,8 +133,7 @@ public final class ApplicationRoles { WRITE_DOSSIER_TEMPLATES, WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, - WRITE_LEGAL_BASIS, - WRITE_RULES, WRITE_SYSTEM_RULES, + WRITE_LEGAL_BASIS, WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, -- 2.47.2 From 83b163a93be396d848ba562f45ab13b66fc2195d Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 4 Dec 2024 09:05:37 +0100 Subject: [PATCH 16/93] RED-9472 adjusted permissions/action roles --- .../v1/processor/roles/ApplicationRoles.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 24ae410cb..f07fb503f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -25,8 +25,7 @@ public final class ApplicationRoles { UPDATE_LICENSE, GET_TENANTS, CREATE_TENANT, - READ_USERS, - READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, + READ_USERS, READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, WRITE_USERS, READ_SMTP_CONFIGURATION, WRITE_SMTP_CONFIGURATION, @@ -78,7 +77,7 @@ public final class ApplicationRoles { READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, - READ_WATERMARK, + READ_WATERMARK, READ_RULES, REANALYZE_DOSSIER, REANALYZE_FILE, REQUEST_MANUAL_REDACTION, @@ -119,7 +118,7 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, - READ_DATA_FORMATS, + READ_DATA_FORMATS, READ_RULES, READ_SMTP_CONFIGURATION, READ_VERSIONS, READ_WATERMARK, @@ -132,8 +131,7 @@ public final class ApplicationRoles { WRITE_DOSSIER_ATTRIBUTES_CONFIG, WRITE_DOSSIER_TEMPLATES, WRITE_FILE_ATTRIBUTES_CONFIG, - WRITE_GENERAL_CONFIGURATION, - WRITE_LEGAL_BASIS, WRITE_RULES, WRITE_SYSTEM_RULES, + WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, -- 2.47.2 From 5b1a3bf56ae8ea8d5d2413ac37bf210a5d001cb5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 12 Dec 2024 08:43:46 +0100 Subject: [PATCH 17/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../api/impl/controller/RulesController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 5ab60c1ac..c2bbc3ffa 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 @@ -75,16 +75,27 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isPresent()) { RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); try { - ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + + if (mergedRules == null || mergedRules.getBody() == null) { + throw new BadRequestException("Failed to merge rules - received null response from service"); + } + if (mergedRules.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { - DroolsValidationResponse mergedRulesValidationResponse = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + DroolsValidationResponse mergedRulesValidationResponse = mergedRules.getBody().getDroolsValidationResponse(); return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); } - mergedRulesString = ((RulesUploadResponse) mergedRules.getBody()).getRules(); + + mergedRulesString = mergedRules.getBody().getRules(); + if (mergedRulesString == null) { + throw new BadRequestException("Failed to merge rules - merged result is null"); + } + } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } + throw new BadRequestException("Failed to merge rules: " + e.getMessage()); } } if (!rules.isDryRun()) { -- 2.47.2 From 2c6fd33d406fa716d1cf3901b32a4a6ec5f37dd4 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 18/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 23 files changed, 283 insertions(+), 80 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/RulesUploadResponse.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/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 f2126af71..7628af253 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 81e87db57..ce3c70938 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String RESET_PATH = "/reset"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; @@ -92,6 +94,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -113,4 +125,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + RESET_PATH, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index d88c89e69..78e2983f2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -117,7 +117,7 @@ public final class ApplicationRoles { READ_FILE_ATTRIBUTES_CONFIG, READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, READ_USER_STATS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -133,7 +133,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 044a66552..114b55c5e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index e048be0ea..4a972a93e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -155,6 +155,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -269,7 +270,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 7f805c0c0..21cfaf533 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -374,18 +374,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From cd8d7f97ae059f90943b064e21771e4d883dfc16 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 19/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From 4f7cfe0b955a487ebb3043e677f200fdf592f498 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 20/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From 49e780da0254feebd360f1aaa1d8573583ad3b95 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 21/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 09cba5eff21fe9bbe3676de8e4ae9d6bdb09dbb7 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 22/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 269ff270d72c9159bb6284f590b4c7d135fa13eb Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 23/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 179d68889744016053e6c21cd7a08317b35b6547 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 24/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3484644ea627cc35637ebf55f3881bdec73b07be Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 25/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3abd9909c60d41209982fc1bf1c7580d5eedb4c1 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 26/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From b5dbf360a32bdd8d8d84c6d74c9ad940a7af2813 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 25 Nov 2024 09:31:36 +0100 Subject: [PATCH 27/93] RED-9393 user stats controller added authority check --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../management/v1/processor/roles/ApplicationRoles.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 7628af253..83d3714cc 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.415.0-RED9472.4" } +val redactionServiceVersion by rootProject.extra { "4.434.0-RED9472.1" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 78e2983f2..b0bf28d41 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -73,7 +73,7 @@ public final class ApplicationRoles { READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, READ_REDACTION_LOG, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, -- 2.47.2 From 577158ea5d7e4309d580854bbaa49a96b39efe12 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 12 Dec 2024 08:43:46 +0100 Subject: [PATCH 28/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../api/impl/controller/RulesController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 5ab60c1ac..c2bbc3ffa 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 @@ -75,16 +75,27 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isPresent()) { RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); try { - ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + + if (mergedRules == null || mergedRules.getBody() == null) { + throw new BadRequestException("Failed to merge rules - received null response from service"); + } + if (mergedRules.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { - DroolsValidationResponse mergedRulesValidationResponse = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + DroolsValidationResponse mergedRulesValidationResponse = mergedRules.getBody().getDroolsValidationResponse(); return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); } - mergedRulesString = ((RulesUploadResponse) mergedRules.getBody()).getRules(); + + mergedRulesString = mergedRules.getBody().getRules(); + if (mergedRulesString == null) { + throw new BadRequestException("Failed to merge rules - merged result is null"); + } + } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } + throw new BadRequestException("Failed to merge rules: " + e.getMessage()); } } if (!rules.isDryRun()) { -- 2.47.2 From dbf85761bd89ad705ccd63d5b944fbfeb798e5e7 Mon Sep 17 00:00:00 2001 From: yhampe Date: Fri, 13 Dec 2024 09:55:45 +0100 Subject: [PATCH 29/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../v1/processor/roles/ApplicationRoles.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 43b4f62f9..39dbc7dfa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -24,9 +24,7 @@ public final class ApplicationRoles { public static final Set KNECON_SUPPORT_ACTION_ROLES = Sets.newHashSet(READ_LICENSE, UPDATE_LICENSE, GET_TENANTS, - CREATE_TENANT, - READ_USERS, READ_ALL_USERS, READ_USER_STATS, - READ_USERS, READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, + CREATE_TENANT, READ_USER_STATS, READ_USERS, READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, WRITE_USERS, READ_SMTP_CONFIGURATION, WRITE_SMTP_CONFIGURATION, @@ -61,8 +59,7 @@ public final class ApplicationRoles { PROCESS_DOWNLOAD, PROCESS_MANUAL_REDACTION_REQUEST, READ_COLORS, - READ_DICTIONARY_TYPES, - READ_DIGITAL_SIGNATURE, READ_DOSSIER, + READ_DICTIONARY_TYPES, READ_DIGITAL_SIGNATURE, READ_DOSSIER, READ_DOSSIER_ATTRIBUTES, READ_DOSSIER_ATTRIBUTES_CONFIG, READ_DOSSIER_TEMPLATES, @@ -73,12 +70,10 @@ public final class ApplicationRoles { READ_LEGAL_BASIS, READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, - READ_REDACTION_LOG, - READ_RULES, READ_SYSTEM_RULES, + READ_REDACTION_LOG, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, - READ_VERSIONS, - READ_WATERMARK, READ_RULES, + READ_VERSIONS, READ_WATERMARK, READ_RULES, REANALYZE_DOSSIER, REANALYZE_FILE, REQUEST_MANUAL_REDACTION, @@ -117,8 +112,11 @@ public final class ApplicationRoles { READ_DOSSIER_TEMPLATES, READ_FILE_ATTRIBUTES_CONFIG, READ_LEGAL_BASIS, - READ_LICENSE_REPORT, READ_NOTIFICATIONS, READ_USER_STATS, - READ_RULES, READ_SYSTEM_RULES, + READ_LICENSE_REPORT, + READ_NOTIFICATIONS, + READ_USER_STATS, + READ_RULES, + READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -132,7 +130,10 @@ public final class ApplicationRoles { WRITE_DOSSIER_ATTRIBUTES_CONFIG, WRITE_DOSSIER_TEMPLATES, WRITE_FILE_ATTRIBUTES_CONFIG, - WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, WRITE_RULES, WRITE_SYSTEM_RULES, + WRITE_GENERAL_CONFIGURATION, + WRITE_LEGAL_BASIS, + WRITE_RULES, + WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, @@ -148,9 +149,7 @@ public final class ApplicationRoles { READ_ALL_USERS, READ_APP_CONFIG, READ_GENERAL_CONFIGURATION, - READ_GENERAL_CONFIGURATION, - GET_SIMILAR_IMAGES, READ_NOTIFICATIONS, - READ_USERS, READ_USER_STATS, + READ_GENERAL_CONFIGURATION, GET_SIMILAR_IMAGES, READ_NOTIFICATIONS, READ_USERS, READ_USER_STATS, UPDATE_MY_PROFILE, UPDATE_NOTIFICATIONS, WRITE_USERS, -- 2.47.2 From 3c2326e3f573be25f0e21355619cc9a7fdc4c58a Mon Sep 17 00:00:00 2001 From: yhampe Date: Fri, 13 Dec 2024 13:16:48 +0100 Subject: [PATCH 30/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../v1/external/api/impl/controller/RulesController.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 c2bbc3ffa..0c1548830 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 @@ -93,6 +93,7 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { + log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); @@ -171,9 +172,7 @@ 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()); -- 2.47.2 From e1d592516f53a797cef46f2b6312a1fa0b9d23fa Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 18 Dec 2024 10:09:55 +0100 Subject: [PATCH 31/93] RED-9472 working on bug with redaction service response --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 2 +- .../v1/processor/roles/ApplicationRoles.java | 22 ++++++++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) 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 83d3714cc..14e2f4672 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.434.0-RED9472.1" } +val redactionServiceVersion by rootProject.extra { "4.436.0-RED9472.9" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 0c1548830..f405697cf 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 @@ -77,6 +77,7 @@ public class RulesController implements RulesResource { try { ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + log.info("response: " + mergedRules); if (mergedRules == null || mergedRules.getBody() == null) { throw new BadRequestException("Failed to merge rules - received null response from service"); } @@ -93,7 +94,6 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { - log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 39dbc7dfa..26e2cf229 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -24,7 +24,12 @@ public final class ApplicationRoles { public static final Set KNECON_SUPPORT_ACTION_ROLES = Sets.newHashSet(READ_LICENSE, UPDATE_LICENSE, GET_TENANTS, - CREATE_TENANT, READ_USER_STATS, READ_USERS, READ_ALL_USERS, READ_SYSTEM_RULES, WRITE_SYSTEM_RULES, + CREATE_TENANT, + READ_USER_STATS, + READ_USERS, + READ_ALL_USERS, + READ_SYSTEM_RULES, + WRITE_SYSTEM_RULES, WRITE_USERS, READ_SMTP_CONFIGURATION, WRITE_SMTP_CONFIGURATION, @@ -58,8 +63,7 @@ public final class ApplicationRoles { MANAGE_VIEWED_PAGES, PROCESS_DOWNLOAD, PROCESS_MANUAL_REDACTION_REQUEST, - READ_COLORS, - READ_DICTIONARY_TYPES, READ_DIGITAL_SIGNATURE, READ_DOSSIER, + READ_COLORS, READ_DICTIONARY_TYPES, READ_DIGITAL_SIGNATURE, READ_DOSSIER, READ_DOSSIER_ATTRIBUTES, READ_DOSSIER_ATTRIBUTES_CONFIG, READ_DOSSIER_TEMPLATES, @@ -69,11 +73,9 @@ public final class ApplicationRoles { READ_GENERAL_CONFIGURATION, READ_LEGAL_BASIS, READ_MANUAL_REDACTIONS, - READ_NOTIFICATIONS, - READ_REDACTION_LOG, READ_SYSTEM_RULES, + READ_NOTIFICATIONS, READ_REDACTION_LOG, READ_SYSTEM_RULES, READ_DATA_FORMATS, - READ_USERS, - READ_VERSIONS, READ_WATERMARK, READ_RULES, + READ_USERS, READ_VERSIONS, READ_WATERMARK, READ_RULES, REANALYZE_DOSSIER, REANALYZE_FILE, REQUEST_MANUAL_REDACTION, @@ -149,7 +151,11 @@ public final class ApplicationRoles { READ_ALL_USERS, READ_APP_CONFIG, READ_GENERAL_CONFIGURATION, - READ_GENERAL_CONFIGURATION, GET_SIMILAR_IMAGES, READ_NOTIFICATIONS, READ_USERS, READ_USER_STATS, + READ_GENERAL_CONFIGURATION, + GET_SIMILAR_IMAGES, + READ_NOTIFICATIONS, + READ_USERS, + READ_USER_STATS, UPDATE_MY_PROFILE, UPDATE_NOTIFICATIONS, WRITE_USERS, -- 2.47.2 From 53ae0b0648c4168d9f362b683e7fea1857467e4a Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 32/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 23 files changed, 283 insertions(+), 80 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/RulesUploadResponse.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/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 f2126af71..7628af253 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 81e87db57..ce3c70938 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String RESET_PATH = "/reset"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; @@ -92,6 +94,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -113,4 +125,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + RESET_PATH, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index d88c89e69..78e2983f2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -117,7 +117,7 @@ public final class ApplicationRoles { READ_FILE_ATTRIBUTES_CONFIG, READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, READ_USER_STATS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -133,7 +133,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 044a66552..114b55c5e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index e048be0ea..4a972a93e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -155,6 +155,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -269,7 +270,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 7f805c0c0..21cfaf533 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -374,18 +374,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From bea2d0662ea4df4c04155f552dda28ccb0d90adf Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 33/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From deab1b238edf32fbb487019edc6c6455fb21657f Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 34/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From 26944419645922b57f10681cc639507e12f7d9f3 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 35/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 9f62910ce1f17f290fd0517022b196ca85d26984 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 36/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 1b6d67dba78c0f53eb1ea2533c3323fb62aeb885 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 37/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 8c8eae14da1c26a3e8a9bf74aeb8dbda9d9d3a03 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 38/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 92f8dcd961bb87cb9b355d6141df9cd85b7878d6 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 39/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 6c2d357dca40eab5129cf1d1ffc9fbe73f7d0654 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 40/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From d406b0a2071e0c0f338ebc197fd840112c6d9534 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 25 Nov 2024 09:31:36 +0100 Subject: [PATCH 41/93] RED-9393 user stats controller added authority check --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../management/v1/processor/roles/ApplicationRoles.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 7628af253..83d3714cc 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.415.0-RED9472.4" } +val redactionServiceVersion by rootProject.extra { "4.434.0-RED9472.1" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 78e2983f2..b0bf28d41 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -73,7 +73,7 @@ public final class ApplicationRoles { READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, READ_REDACTION_LOG, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, -- 2.47.2 From 1a7421a225aba191cfc2e6d5f632735e54a19084 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 12 Dec 2024 08:43:46 +0100 Subject: [PATCH 42/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../api/impl/controller/RulesController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 5ab60c1ac..c2bbc3ffa 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 @@ -75,16 +75,27 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isPresent()) { RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); try { - ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + + if (mergedRules == null || mergedRules.getBody() == null) { + throw new BadRequestException("Failed to merge rules - received null response from service"); + } + if (mergedRules.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { - DroolsValidationResponse mergedRulesValidationResponse = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + DroolsValidationResponse mergedRulesValidationResponse = mergedRules.getBody().getDroolsValidationResponse(); return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); } - mergedRulesString = ((RulesUploadResponse) mergedRules.getBody()).getRules(); + + mergedRulesString = mergedRules.getBody().getRules(); + if (mergedRulesString == null) { + throw new BadRequestException("Failed to merge rules - merged result is null"); + } + } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } + throw new BadRequestException("Failed to merge rules: " + e.getMessage()); } } if (!rules.isDryRun()) { -- 2.47.2 From daa4ef0a0fa10e0a5a92c7ebe493224d7c059828 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 43/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 570ca42058a76bffed1b8483798fe40df72ff698 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 44/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From f17e471617926f05ef31b9aadae9139f2993ec30 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 45/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From ef5f2d32a0f7b6121b360313aa6844ad0b6336c8 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 46/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From d80380f997059964ceceaf2dd150b23019f6c248 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 47/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3623a11584c891190d7ead06a1c534d5818879d9 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 48/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From f3fab58e89d8d9382a962d67066bc1db6fc3efd8 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 49/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From aad7d15ee13686017efc77bc860873060818709b Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 50/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 20815880750d88cb073eb7fa4bb9f1192a106cc2 Mon Sep 17 00:00:00 2001 From: yhampe Date: Fri, 13 Dec 2024 13:16:48 +0100 Subject: [PATCH 51/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../v1/external/api/impl/controller/RulesController.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 c2bbc3ffa..0c1548830 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 @@ -93,6 +93,7 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { + log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); @@ -171,9 +172,7 @@ 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()); -- 2.47.2 From 47727a4b35ec4e3d663d3ad6d89071f6c70bac87 Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 18 Dec 2024 10:09:55 +0100 Subject: [PATCH 52/93] RED-9472 working on bug with redaction service response --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../v1/external/api/impl/controller/RulesController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 83d3714cc..14e2f4672 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.434.0-RED9472.1" } +val redactionServiceVersion by rootProject.extra { "4.436.0-RED9472.9" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 0c1548830..f405697cf 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 @@ -77,6 +77,7 @@ public class RulesController implements RulesResource { try { ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + log.info("response: " + mergedRules); if (mergedRules == null || mergedRules.getBody() == null) { throw new BadRequestException("Failed to merge rules - received null response from service"); } @@ -93,7 +94,6 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { - log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); -- 2.47.2 From e0b52f7d899e934b24cbe610bff80cd07632044d Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 53/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- ...er.red.service.java-conventions.gradle.kts | 2 +- .../api/impl/controller/RulesController.java | 102 ++++++++++++++++-- .../api/external/resource/RulesResource.java | 21 ++++ ...sistenceServiceProcessorConfiguration.java | 3 +- .../redactionservice/RuleBuilderClient.java | 10 ++ .../v1/processor/roles/ActionRoles.java | 2 + .../v1/processor/roles/ApplicationRoles.java | 4 +- .../service/RulesValidationService.java | 1 + .../persistence/RulesPersistenceService.java | 2 - .../integration/tests/ApprovalTest.java | 1 - .../tests/ComponentDefinitionTests.java | 4 +- .../ComponentLogStorageToMongoDBTest.java | 1 - .../server/integration/tests/DossierTest.java | 1 - .../integration/tests/DownloadTest.java | 16 +-- .../integration/tests/FileAttributeTest.java | 13 ++- .../integration/tests/ReportTemplateTest.java | 12 +-- .../server/integration/tests/RulesTest.java | 78 ++++++++------ .../integration/tests/ViewedPagesTest.java | 1 - .../StorageToMongoDBPerformanceTest.java | 17 +++ .../AbstractPersistenceServerServiceTest.java | 11 ++ .../rules/RulesUpdateRequest.java | 19 ++++ .../rules/RulesUploadResponse.java | 25 +++++ .../rules/SystemRulesSeperationRequest.java | 17 +++ 23 files changed, 283 insertions(+), 80 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/RulesUploadResponse.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/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 f2126af71..7628af253 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.4" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 1b086c7fe..7bc836c3c 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 @@ -1,7 +1,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_SYSTEM_RULES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_RULES; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.WRITE_SYSTEM_RULES; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -21,6 +23,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; @@ -35,8 +38,11 @@ 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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import feign.FeignException; @@ -50,6 +56,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; @@ -62,21 +69,26 @@ public class RulesController implements RulesResource { RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules); DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + String mergedRulesString = ""; - 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!"); + 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 = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); + } + mergedRulesString = ((RulesUploadResponse) 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()); fileStatusPersistenceService.resetErrorCounter(rules.getDossierTemplateId()); } @@ -99,6 +111,47 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + WRITE_SYSTEM_RULES + "')") + public ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @RequestPart(name = "file") MultipartFile file) { + + try { + String rules = new String(file.getBytes(), StandardCharsets.UTF_8); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); + + try { + var droolsValidation = rulesValidationService.validateRules(ruleFileType, rules); + droolsValidationResponse = RulesValidationMapper.createFromDroolsValidation(droolsValidation); + if (!droolsValidation.isCompiled()) { + + return new ResponseEntity<>(droolsValidationResponse, !dryRun ? 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!"); + } + } + if (!dryRun) { + rulesPersistenceService.setRules(rules, dossierTemplateId, ruleFileType); + } + + auditPersistenceService.audit(AuditRequest.builder() + .userId(KeycloakSecurity.getUserId()) + .objectId(dossierTemplateId) + .category(AuditCategory.DOSSIER_TEMPLATE.name()) + .message(String.format("%s Rules have been updated", ruleFileType)) + .build()); + + return new ResponseEntity<>(droolsValidationResponse, HttpStatus.OK); + } catch (IOException e) { + throw new FileUploadException("Could not upload file.", e); + } + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public RulesResponse download(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { @@ -107,6 +160,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()); } @@ -137,6 +195,28 @@ public class RulesController implements RulesResource { } + @Override + @PreAuthorize("hasAuthority('" + READ_SYSTEM_RULES + "')") + public ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { + + var ruleEntityOptional = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType); + if (ruleEntityOptional.isEmpty()) { + throw new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)); + } + RulesResponse rulesResponse = new RulesResponse(ruleEntityOptional.get().getValue(), dossierTemplateId, ruleEntityOptional.get().isTimeoutDetected()); + byte[] data = rulesResponse.getRules().getBytes(StandardCharsets.UTF_8); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.TEXT_PLAIN); + + httpHeaders.add("Content-Disposition", "attachment; filename*=utf-8''" + ruleFileType.name() + "_" + DOWNLOAD_FILE_NAME); + InputStream is = new ByteArrayInputStream(data); + + return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); + + } + + @Override @PreAuthorize("hasAuthority('" + READ_RULES + "')") public ResponseEntity downloadFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { 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 81e87db57..ce3c70938 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 @@ -28,7 +28,9 @@ public interface RulesResource { String RULES_PATH = ExternalApi.BASE_PATH + "/rules"; String UPLOAD_PATH = "/upload"; + String UPLOAD_FULL_PATH = "/uploadFull"; String DOWNLOAD_PATH = "/download"; + String DOWNLOAD_FULL_PATH = "/downloadFull"; String RESET_PATH = "/reset"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; @@ -92,6 +94,16 @@ public interface RulesResource { @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @PostMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + UPLOAD_FULL_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Rules upload successful or rules validation done"), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified."), @ApiResponse(responseCode = "422", description = "Uploaded rules could not be compiled.")}) + ResponseEntity uploadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType, + @RequestParam(value = DRY_RUN_PARAMETER) boolean dryRun, + @Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @Operation(summary = "Returns file containing the currently used Drools rules.") @@ -113,4 +125,13 @@ public interface RulesResource { @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "No content")}) @PutMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + RESET_PATH, produces = MediaType.APPLICATION_JSON_VALUE) void unlockRules(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @Operation(summary = "Returns file containing the currently used Drools rules.") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @GetMapping(value = RULES_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + RULE_FILE_TYPE_PATH_VARIABLE + DOWNLOAD_FULL_PATH) + ResponseEntity downloadFullFile(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType); + } 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 diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index 1790b52b0..8fc2088fd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -49,7 +49,9 @@ public final class ActionRoles { // Rules public static final String READ_RULES = "red-read-rules"; + public static final String READ_SYSTEM_RULES = "red-read-system-rules"; public static final String WRITE_RULES = "red-write-rules"; + public static final String WRITE_SYSTEM_RULES = "red-write-system-rules"; // Data formats public static final String READ_DATA_FORMATS = "red-read-data-formats"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index d88c89e69..78e2983f2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -117,7 +117,7 @@ public final class ApplicationRoles { READ_FILE_ATTRIBUTES_CONFIG, READ_LEGAL_BASIS, READ_LICENSE_REPORT, READ_NOTIFICATIONS, READ_USER_STATS, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_SMTP_CONFIGURATION, READ_VERSIONS, @@ -133,7 +133,7 @@ public final class ApplicationRoles { WRITE_FILE_ATTRIBUTES_CONFIG, WRITE_GENERAL_CONFIGURATION, WRITE_LEGAL_BASIS, - WRITE_RULES, + WRITE_RULES, WRITE_SYSTEM_RULES, WRITE_DATA_FORMATS, WRITE_SMTP_CONFIGURATION, WRITE_WATERMARK, 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 1c2bba587..ab54c40cb 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 @@ -6,7 +6,6 @@ import org.springframework.http.ResponseEntity; 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; @@ -106,7 +105,6 @@ public class RulesPersistenceService { private final RuleSetRepository ruleSetRepository; - @Transactional public Optional getRules(String dossierTemplateId, RuleFileType ruleFileType) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java index 044a66552..114b55c5e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ApprovalTest.java @@ -49,7 +49,6 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; - @SpyBean private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index e048be0ea..4a972a93e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -155,6 +155,7 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test public void testAddComponentDefinitionAfterSoftDeletion() { @@ -269,7 +270,8 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertEquals(newOrder.get(2).getId(), firstComponentId); assertEquals(newOrder.get(2).getRank(), 3); - var unknownDossierError = assertThrows(FeignException.class, () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); + var unknownDossierError = assertThrows(FeignException.class, + () -> dossierTemplateExternalClient.reorderComponents("123", List.of(secondComponentId, thirdComponentId, firstComponentId))); assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java index c8de21d36..228e10a4e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentLogStorageToMongoDBTest.java @@ -417,7 +417,6 @@ public class ComponentLogStorageToMongoDBTest extends AbstractPersistenceServerS } - @Test @SneakyThrows @Disabled diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 1204fd54e..2114f72d2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -543,5 +543,4 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertTrue(result.getMessage().contains("Dossier name can not be longer than 254 characters")); } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 694534471..67035d365 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -6,18 +6,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; -import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; -import com.iqser.red.service.persistence.service.v1.api.shared.model.download.DownloadStatus; -import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail; import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultMessage; +import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionType; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -27,12 +23,13 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadPreparationService; -import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadRequest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadRedactionFileStatusRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.RemoveDownloadRequest; 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.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; @@ -99,10 +96,7 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { .fileIds(List.of(file2.getId())) .build()); - downloadMessageReceiver.receive(DownloadJob.builder() - .userId(userProvider.getUserId()) - .storageId(downloads.getStorageId()) - .build()); + downloadMessageReceiver.receive(DownloadJob.builder().userId(userProvider.getUserId()).storageId(downloads.getStorageId()).build()); var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json"; storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 7f805c0c0..21cfaf533 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -374,18 +374,17 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), majorVersion); var missingComma = new MockMultipartFile("file.csv", - "fileattributes_missing_comma.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); + "fileattributes_missing_comma.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_comma.csv").getInputStream())); var result = assertThrows(FeignException.class, () -> uploadClient.upload(missingComma, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Invalid CSV file format at line 2: Expected 5 columns but found 4")); - var missingQuotation = new MockMultipartFile("file.csv", - "fileattributes_missing_quotation_mark.csv", - "application/csv", - IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); + "fileattributes_missing_quotation_mark.csv", + "application/csv", + IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream())); result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false)); assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 2363b396c..6742e4d9c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,11 +1,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import java.util.List; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +19,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemp import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -365,6 +362,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test public void testDownloadDossierAndDeleteReportTemplate() { // Arrange @@ -390,10 +388,10 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(firstTemplate.getFileName()).isEqualTo(fileName); downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() - .reportTemplateIds(List.of(firstTemplate.getTemplateId())) - .dossierId(dossier.getId()) - .fileIds(List.of(file.getId())) - .build()); + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); 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 df53f3842..af5563199 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,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Objects; import org.apache.http.HttpStatus; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -19,11 +21,14 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTem import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; 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.DroolsValidationResponse; +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.RuleSyntaxWarningMessage; +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.RulesUploadRequestModel; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxDeprecatedWarnings; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsValidation; -import com.iqser.red.service.redaction.v1.model.RuleValidationModel; import feign.FeignException; @@ -43,6 +48,12 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { public void testRules() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum", dossierTemplate.getId(), false)); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + new DroolsValidationResponse()), + org.springframework.http.HttpStatus.OK)); var response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -51,6 +62,9 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum"); response = rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY, false)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(new RulesResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false)); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4); @@ -60,21 +74,26 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetTrue() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); List errorMessages = new ArrayList<>(); errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + DroolsValidationResponse.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings( + warningMessages) + .build()), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, true); // case 1: dry-run true, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -83,14 +102,10 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { assertThat(response.getBody().getDeprecatedWarnings()).isNotEmpty(); assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim rules mergen on upload // case 2: dry-run true, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); @@ -105,21 +120,24 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { @Test + @Disabled public void testRulesWithRunDrySetFalse() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + DroolsValidationResponse droolsValidationResponse = new DroolsValidationResponse(); - List warningMessages = new ArrayList<>(); - warningMessages.add(DroolsSyntaxDeprecatedWarnings.builder().line(1).column(0).message("this function is deprecated").build()); - List errorMessages = new ArrayList<>(); - errorMessages.add(DroolsSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + List warningMessages = new ArrayList<>(); + warningMessages.add(RuleSyntaxWarningMessage.builder().line(1).column(0).message("this function is deprecated").build()); + List errorMessages = new ArrayList<>(); + droolsValidationResponse.setSyntaxErrorMessages(new ArrayList<>()); + errorMessages.add(RuleSyntaxErrorMessage.builder().line(1).column(0).message("error message").build()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(new RulesUploadResponse("lorem ipsum dolor sit amet", + dossierTemplate.getId(), + false, + droolsValidationResponse), + org.springframework.http.HttpStatus.OK)); var request = new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY, false); // case 1: dry-run false, error messages and warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(errorMessages) - .deprecatedWarnings( - warningMessages) - .build()); try { rulesClient.upload(request); } catch (FeignException e) { @@ -127,14 +145,8 @@ public class RulesTest extends AbstractPersistenceServerServiceTest { } assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())) - .get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(2); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate() - - // case 2: dry-run false, no error messages just warning messages - when(redactionClient.testRules(new RuleValidationModel(request.getRuleFileType().name(), request.getRules()))).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings( - warningMessages) - .build()); + .get(dossierTemplate.getId()) + .getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), 3. beim merge von user rules ResponseEntity response = rulesClient.upload(request); assertThat(response.getStatusCode().value()).isEqualTo(HttpStatus.SC_OK); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java index 1e7dc5242..35aed05c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ViewedPagesTest.java @@ -13,7 +13,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ViewedPage; -import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; public class ViewedPagesTest extends AbstractPersistenceServerServiceTest { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java index 60b1c6fbd..9d490ebf8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/StorageToMongoDBPerformanceTest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import java.io.FileInputStream; import java.util.LinkedList; import java.util.concurrent.CompletableFuture; @@ -8,19 +11,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RuleBuilderClient; import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService; import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +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.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; + @Disabled public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest { @@ -36,11 +47,17 @@ public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerSe @Autowired private EntityLogMongoService entityLogMongoService; + @MockBean + private RuleBuilderClient ruleBuilderClient; + @BeforeEach @SneakyThrows public void setUp() { + RulesResponse rulesResponse = new RulesResponse("some rules", "Template 1", false); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ecc744a57..ca14ab99c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -34,6 +35,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; @@ -58,6 +61,7 @@ import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; import com.iqser.red.service.persistence.management.v1.processor.client.pdftronredactionservice.PDFTronClient; import com.iqser.red.service.persistence.management.v1.processor.client.redactionreportservice.ReportTemplatePlaceholderClient; 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.dataexchange.service.SystemManagedTypesImport; @@ -165,6 +169,8 @@ public abstract class AbstractPersistenceServerServiceTest { @MockBean protected EntityLogService entityLogService; @MockBean + protected RuleBuilderClient ruleBuilderClient; + @MockBean protected PDFTronClient pdfTronRedactionClient; @Autowired protected ApplicationConfigClient appConfigClient; @@ -381,6 +387,11 @@ public abstract class AbstractPersistenceServerServiceTest { .syntaxErrorMessages(Collections.emptyList()) .deprecatedWarnings(Collections.emptyList()) .build()); + + RulesResponse rulesResponse = new RulesResponse("lorem ipsum", "Template 1", false); + RulesUploadResponse rulesUploadResponse = new RulesUploadResponse("lorem ipsum", "Template 1", false, new DroolsValidationResponse()); + when(ruleBuilderClient.mergeUserUpdateRules(any(RulesUpdateRequest.class))).thenReturn(new ResponseEntity(rulesUploadResponse, HttpStatus.OK)); + when(ruleBuilderClient.getRuleFileWithoutSystemRules(any(SystemRulesSeperationRequest.class))).thenReturn(rulesResponse); } 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/RulesUploadResponse.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/RulesUploadResponse.java new file mode 100644 index 000000000..57338c487 --- /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/RulesUploadResponse.java @@ -0,0 +1,25 @@ +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 RulesUploadResponse { + + @Schema(description = "The actual string of rules.") + private String rules; + + @Schema(description = "The DossierTemplate Id for these rules") + private String dossierTemplateId; + + @Schema(description = "Bad written rules can lead to timeouts or endless processing. This will be detected by the system and all analyse request for the rules will be rejected. This flag indicates that a timeout was detected and you need to fix the rules") + private boolean timeoutDetected; + @Schema(description = "validation result, only set when uploading rules") + private DroolsValidationResponse droolsValidationResponse; + +} \ No newline at end of file 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; + +} -- 2.47.2 From 5e30366546dca6d8e5e7c772d92d9c52a3bfef84 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 54/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../AbstractPersistenceServerServiceTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ca14ab99c..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -16,6 +15,15 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.MessageListenerContainer; @@ -107,6 +115,11 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; +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.RulesUploadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.SystemRulesSeperationRequest; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; @@ -139,16 +152,6 @@ import com.mongodb.client.MongoDatabase; import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) -- 2.47.2 From 3ad6f3d02baa58debf42ee1538ebf99315c2a126 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 11:05:31 +0100 Subject: [PATCH 55/93] RED-9472: solving merge conflicts --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7bc836c3c..5ab60c1ac 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 @@ -83,7 +83,7 @@ public class RulesController implements RulesResource { mergedRulesString = ((RulesUploadResponse) 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!"); + throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } } } -- 2.47.2 From b4c447615d96f15f1ba2a2d3aa85f57ebf1750ff Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 56/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 498fe731782878beff7bebdcd6cb5d2dbb2b7b6c Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 57/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 9bceff89daed65523f7c14d95af4341ddffcbb1b Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 58/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From e1d4c0c27438f13bba1eacd65db1a525ab67b869 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 59/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 5f301716cbf38555c98c57bc20d3bc78b9f82128 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 60/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From eae063566de78c590f60bc6abded114446fe0eda Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 61/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 6afe110dd4a7621632dbac3797005643ffcc256f Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 25 Nov 2024 09:31:36 +0100 Subject: [PATCH 62/93] RED-9393 user stats controller added authority check --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../management/v1/processor/roles/ApplicationRoles.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 7628af253..83d3714cc 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.415.0-RED9472.4" } +val redactionServiceVersion by rootProject.extra { "4.434.0-RED9472.1" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 78e2983f2..b0bf28d41 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -73,7 +73,7 @@ public final class ApplicationRoles { READ_MANUAL_REDACTIONS, READ_NOTIFICATIONS, READ_REDACTION_LOG, - READ_RULES, + READ_RULES, READ_SYSTEM_RULES, READ_DATA_FORMATS, READ_USERS, READ_VERSIONS, -- 2.47.2 From ba27a981607a864dfbedda90280ba52a2bc3b529 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 12 Dec 2024 08:43:46 +0100 Subject: [PATCH 63/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../api/impl/controller/RulesController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 5ab60c1ac..c2bbc3ffa 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 @@ -75,16 +75,27 @@ public class RulesController implements RulesResource { if (ruleEntityOptional.isPresent()) { RulesUpdateRequest rulesUpdateRequest = new RulesUpdateRequest(ruleEntityOptional.get().getValue(), rules.getRules()); try { - ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + + if (mergedRules == null || mergedRules.getBody() == null) { + throw new BadRequestException("Failed to merge rules - received null response from service"); + } + if (mergedRules.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) { - DroolsValidationResponse mergedRulesValidationResponse = ((RulesUploadResponse) mergedRules.getBody()).getDroolsValidationResponse(); + DroolsValidationResponse mergedRulesValidationResponse = mergedRules.getBody().getDroolsValidationResponse(); return new ResponseEntity<>(mergedRulesValidationResponse, !rules.isDryRun() ? HttpStatus.UNPROCESSABLE_ENTITY : HttpStatus.OK); } - mergedRulesString = ((RulesUploadResponse) mergedRules.getBody()).getRules(); + + mergedRulesString = mergedRules.getBody().getRules(); + if (mergedRulesString == null) { + throw new BadRequestException("Failed to merge rules - merged result is null"); + } + } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } + throw new BadRequestException("Failed to merge rules: " + e.getMessage()); } } if (!rules.isDryRun()) { -- 2.47.2 From e274b90e473b5b1d68650b7dc8f57bd593faa34a Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 64/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From c6a1b12ba3acd3e0ac9d7f2f5d0ae1112f65ec40 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 65/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 5a84e8227b394cde141fe3470af8e7f13b141e0a Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 66/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From b6e1a842e06e243db6e6c351d84a770fc1b36d6d Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 67/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From eeb9e69bcb7bca6b87b39da93ce36447d0b14eb5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 68/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From a66acf4f71b5504ce60aab88e032cf327a7e32bf Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 69/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 7d93e8acc2670ce1725f61b253f670c41b931010 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 70/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 6f3ef1ec6cc341873eafe102dd5985b06702787e Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 71/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From d0f2168c14b04affa267be32891948ad9122d2f5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Fri, 13 Dec 2024 13:16:48 +0100 Subject: [PATCH 72/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../v1/external/api/impl/controller/RulesController.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 c2bbc3ffa..0c1548830 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 @@ -93,6 +93,7 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { + log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); @@ -171,9 +172,7 @@ 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()); -- 2.47.2 From 7de5cd5666bfccc5631f919c08bd7f96cfd4617e Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 18 Dec 2024 10:09:55 +0100 Subject: [PATCH 73/93] RED-9472 working on bug with redaction service response --- .../kotlin/com.iqser.red.service.java-conventions.gradle.kts | 2 +- .../v1/external/api/impl/controller/RulesController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 83d3714cc..14e2f4672 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.434.0-RED9472.1" } +val redactionServiceVersion by rootProject.extra { "4.436.0-RED9472.9" } val pdftronRedactionServiceVersion by rootProject.extra { "4.90.0-RED10115.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 0c1548830..f405697cf 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 @@ -77,6 +77,7 @@ public class RulesController implements RulesResource { try { ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); + log.info("response: " + mergedRules); if (mergedRules == null || mergedRules.getBody() == null) { throw new BadRequestException("Failed to merge rules - received null response from service"); } @@ -93,7 +94,6 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { - log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); -- 2.47.2 From 07f35bd160ee5d2d21da463d8f167429aab355e2 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 74/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 4529eae9bea37a29cdeb2c02503333b87e2334cd Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 75/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 95c581238b6b8cea3dbe67cce02ce1ec139fc6f8 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 76/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3818192b4780b5bd7d3ffc8b6d5895945212c475 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 77/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 7290bc34b2945b58543faa55283ca06151e2d42c Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 78/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From dd86ca9f328a8d26f93361911460c60152eef7cd Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 79/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 5ea32f62d891be407b81486c02be56e270a242a1 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 80/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3deb7d745c89748a67dcea0ea40d6003421d23aa Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 81/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From cef1ba27133db3a08735ab8e1371efd6138873d5 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 82/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 228a6e9cb8fbfc607c4aba2640940360e156da88 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 83/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 501794fb58bcef7ebf53b74064756ff2b50b45cb Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 84/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3d415b8e09e4cac70f1542ef222458e2bd6dc554 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 85/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 7877c6225a385ad8c8c9d32b5a09078d14510ae6 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 86/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From f8383371210833f0227dda80c42a9cb8d59668f9 Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 87/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From dc244d1762cf9f7b304b3adab646d230c0cff51b Mon Sep 17 00:00:00 2001 From: yhampe Date: Thu, 26 Sep 2024 13:05:53 +0200 Subject: [PATCH 88/93] RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules now calling respected endpoints in rules controller RED-9472: seperation of system rules removed rulesbuilder to fix failing pipeline and break circular dependency RED-9472: seperation of system rules added removal of system rules on download added partial merge of user updated rules on upload RED-9472: seperation of system rules upgdatet redaction version RED-9472: seperation of system rules added endpoints for full rule files (including system rules) added roles RED-9472: seperation of system rules changed path of full file paths RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests by mocking rulebuilder service RED-9472: seperation of system rules fixed failing tests added validatioresponse to rulesresponse RED-9472: seperation of system rules added a new model for rule upload RED-9472: seperation of system rules disabled tests for getting tag RED-9472: seperation of system rules RED-9472: seperation of system rules changed tests for new response of rulebuilderclient --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index f1ac53605..d6712bda4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From b5a8212e1d2a82d0c1f352a8539e2bec7aa37923 Mon Sep 17 00:00:00 2001 From: yhampe Date: Mon, 18 Nov 2024 09:45:26 +0100 Subject: [PATCH 89/93] RED-9472: solving merge conflicts --- .../integration/utils/AbstractPersistenceServerServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index d6712bda4..f1ac53605 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -5,7 +5,6 @@ import static com.iqser.red.service.peristence.v1.server.integration.utils.Mongo import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.ArrayList; -- 2.47.2 From 3ca8773b6a2f62c567a14be99877d4be46cfb4e7 Mon Sep 17 00:00:00 2001 From: yhampe Date: Fri, 13 Dec 2024 13:16:48 +0100 Subject: [PATCH 90/93] RED-9472 fixing 500 bug when calling upload endpoint --- .../service/v1/external/api/impl/controller/RulesController.java | 1 + 1 file changed, 1 insertion(+) 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 f405697cf..8d41e5ce1 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 @@ -94,6 +94,7 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { + log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); -- 2.47.2 From 8870903d9c8548b5c5c1ff9e6763e2d2a71b6c6d Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 18 Dec 2024 10:09:55 +0100 Subject: [PATCH 91/93] RED-9472 working on bug with redaction service response --- .../service/v1/external/api/impl/controller/RulesController.java | 1 - 1 file changed, 1 deletion(-) 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 8d41e5ce1..f405697cf 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 @@ -94,7 +94,6 @@ public class RulesController implements RulesResource { } catch (FeignException e) { if (e.status() == HttpStatus.BAD_REQUEST.value()) { - log.info("exception: " + e); throw new BadRequestException("The provided rule file is not a valid drools rule file!"); } throw new BadRequestException("Failed to merge rules: " + e.getMessage()); -- 2.47.2 From 42fb8a81b2ad01678a5654f76316a751b35ba752 Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 22 Jan 2025 09:48:38 +0100 Subject: [PATCH 92/93] RED-9472 added some logs for investigation --- .../v1/external/api/impl/controller/RulesController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 f405697cf..293e11a30 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 @@ -77,7 +77,9 @@ public class RulesController implements RulesResource { try { ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); - log.info("response: " + mergedRules); + log.info("Received response: " + mergedRules); + log.info("Received response body: " + (mergedRules != null ? mergedRules.getBody() : "null")); + log.info("response: " + mergedRules.getBody()); if (mergedRules == null || mergedRules.getBody() == null) { throw new BadRequestException("Failed to merge rules - received null response from service"); } -- 2.47.2 From aeb034b4f6c49b21dcc12c8ee25a147395f844d3 Mon Sep 17 00:00:00 2001 From: yhampe Date: Wed, 22 Jan 2025 09:57:59 +0100 Subject: [PATCH 93/93] introduced some logs --- .../v1/external/api/impl/controller/RulesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 293e11a30..b88aae2c4 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 @@ -77,7 +77,7 @@ public class RulesController implements RulesResource { try { ResponseEntity mergedRules = ruleBuilderClient.mergeUserUpdateRules(rulesUpdateRequest); - log.info("Received response: " + mergedRules); + log.info("Received response: " + mergedRules.getBody()); log.info("Received response body: " + (mergedRules != null ? mergedRules.getBody() : "null")); log.info("response: " + mergedRules.getBody()); if (mergedRules == null || mergedRules.getBody() == null) { -- 2.47.2