From ed3ee8b2d2e55353d93de369ee313d7782d3c600 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Thu, 14 Nov 2024 11:25:16 +0100 Subject: [PATCH] RED-10463: unlock rule file endpoint --- .../api/impl/controller/RulesController.java | 7 ++++ .../api/external/resource/RulesResource.java | 7 ++++ .../persistence/RulesPersistenceService.java | 32 ++++++++++++------- .../repository/RuleSetRepository.java | 5 +-- 4 files changed, 38 insertions(+), 13 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 ad0962f9b..4f79d9c94 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 @@ -160,4 +160,11 @@ public class RulesController implements RulesResource { return new ResponseEntity<>(new InputStreamResource(is), httpHeaders, HttpStatus.OK); } + + @Override + public void unlockRules(String dossierTemplateId, RuleFileType ruleFileType) { + + rulesPersistenceService.resetTimeoutDetected(dossierTemplateId, ruleFileType); + } + } 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..d9e7aa7a7 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 @@ -6,6 +6,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; @@ -105,4 +106,10 @@ 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 = "Resets the timeout detected flag in a Rule file.") + @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); } 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..1c2bba587 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 @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import java.util.Optional; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.RuleSetEntity; @@ -20,11 +21,11 @@ public class RulesPersistenceService { public static final String DEFAULT_RULES = """ package drools - + import static java.lang.String.format; import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; - + import java.util.List; import java.util.LinkedList; import java.util.Set; @@ -32,7 +33,7 @@ public class RulesPersistenceService { import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; - + import com.iqser.red.service.redaction.v1.server.model.document.*; import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import com.iqser.red.service.redaction.v1.server.model.document.entity.*; @@ -65,7 +66,7 @@ public class RulesPersistenceService { import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService; import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; - + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; @@ -73,20 +74,20 @@ public class RulesPersistenceService { import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; - + global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService global Dictionary dictionary - + //------------------------------------ queries ------------------------------------ - + query "getFileAttributes" $fileAttribute: FileAttribute() end - + //------------------------------------ Local dictionary search rules ------------------------------------ - + // Rule unit: LocalDictionarySearch.0 rule "LDS.0.0: run local dictionary search" agenda-group "LOCAL_DICTIONARY_ADDS" @@ -140,6 +141,7 @@ public class RulesPersistenceService { }); } + @Transactional public void setRules(@NonNull String rules, String dossierTemplateId, RuleFileType ruleFileType, long version, boolean timeoutDetected) { @@ -147,7 +149,8 @@ public class RulesPersistenceService { ruleSet.setDossierTemplateId(dossierTemplateId); ruleSet.setRuleFileType(ruleFileType.name()); ruleSet.setValue(rules); - ruleSet.setVersion(ruleSet.getVersion() + 1); // Setting rules version in existing dossier template will break analysis, if there are files with higher versions in entity log. So only increment. + // Setting rules version in existing dossier template will break analysis, if there are files with higher versions in entity log. So only increment. + ruleSet.setVersion(ruleSet.getVersion() + 1); ruleSet.setTimeoutDetected(timeoutDetected); }, () -> { RuleSetEntity ruleSet = new RuleSetEntity(); @@ -164,7 +167,14 @@ public class RulesPersistenceService { @Transactional public void setTimeoutDetected(String dossierTemplateId, RuleFileType ruleFileType) { - ruleSetRepository.updateTimeoutDetected(dossierTemplateId, ruleFileType.name()); + ruleSetRepository.updateTimeoutDetected(dossierTemplateId, ruleFileType.name(), true); + } + + + @Transactional + public void resetTimeoutDetected(String dossierTemplateId, RuleFileType ruleFileType) { + + ruleSetRepository.updateTimeoutDetected(dossierTemplateId, ruleFileType.name(), false); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java index 94efddbb0..40be6e492 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RuleSetRepository.java @@ -13,8 +13,8 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur public interface RuleSetRepository extends JpaRepository { @Modifying - @Query("update RuleSetEntity r set r.timeoutDetected = true where r.dossierTemplateId = :dossierTemplateId and r.ruleFileType = :ruleFileType") - void updateTimeoutDetected(@Param("dossierTemplateId") String dossierTemplateId, @Param("ruleFileType") String ruleFileType); + @Query("update RuleSetEntity r set r.timeoutDetected = :timeoutDetected where r.dossierTemplateId = :dossierTemplateId and r.ruleFileType = :ruleFileType") + void updateTimeoutDetected(@Param("dossierTemplateId") String dossierTemplateId, @Param("ruleFileType") String ruleFileType, @Param("timeoutDetected") boolean timeoutDetected); @Modifying @Query("update RuleSetEntity r set r.version = :version where r.dossierTemplateId = :dossierTemplateId and r.ruleFileType = :ruleFileType") @@ -27,4 +27,5 @@ public interface RuleSetRepository extends JpaRepository findVersionByDossierTemplateIdAndRuleFileType(@Param("dossierTemplateId") String dossierTemplateId, @Param("ruleFileType") String ruleFileType); + }