DM-285: make rule value non nullable

This commit is contained in:
Kilian Schuettler 2023-09-13 12:16:20 +02:00
parent 7466a61583
commit 9bca6b406a
10 changed files with 44 additions and 23 deletions

View File

@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.v1.internal.api.controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.exception.RulesTimeoutDetectedException; import com.iqser.red.service.persistence.management.v1.processor.exception.RulesTimeoutDetectedException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.internal.resources.RulesResource; import com.iqser.red.service.persistence.service.v1.api.internal.resources.RulesResource;
@ -30,17 +29,13 @@ public class RulesInternalController implements RulesResource {
@Override @Override
public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) { public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(RULE_FILE_TYPE_PARAMETER_NAME) RuleFileType ruleFileType) {
try { var rules = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType);
var rules = rulesPersistenceService.getRules(dossierTemplateId, ruleFileType);
if (rules.isTimeoutDetected()) { if (rules.isTimeoutDetected()) {
throw new RulesTimeoutDetectedException(dossierTemplateId); throw new RulesTimeoutDetectedException(dossierTemplateId);
}
return rules.getVersion();
} catch (NotFoundException e) {
return 0;
} }
return rules.getVersion();
} }

View File

@ -128,8 +128,11 @@ public class DossierTemplateCloneService {
private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) { private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) {
for (RuleFileType ruleFileType : RuleFileType.values()) { for (RuleFileType ruleFileType : RuleFileType.values()) {
try {
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType); rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType);
} catch (NotFoundException e) {
log.debug("No {} rules found, will not be cloned!", ruleFileType);
}
} }
} }

View File

@ -411,7 +411,9 @@ public class DossierTemplateImportService {
dossierTemplateEntity.setCreatedBy(request.getUserId()); dossierTemplateEntity.setCreatedBy(request.getUserId());
//set rules //set rules
rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity.getId(), RuleFileType.ENTITY); rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity.getId(), RuleFileType.ENTITY);
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT); if (request.getComponentRuleSet() != null) {
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT);
}
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity);
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate));

View File

@ -123,7 +123,6 @@ public class ManualRedactionDictionaryUpdateHandler {
removeFromDictionary(entry.getTypeId(), entry.getValue(), dossierId, fileId, dictionaryEntryType); removeFromDictionary(entry.getTypeId(), entry.getValue(), dossierId, fileId, dictionaryEntryType);
}); });
} else { } else {
removeFromDictionary(dossierDictionaryTypeId, manualRequestWithRemoveFromDictionary.getValue(), dossierId, fileId, dictionaryEntryType); removeFromDictionary(dossierDictionaryTypeId, manualRequestWithRemoveFromDictionary.getValue(), dossierId, fileId, dictionaryEntryType);
typeIdsOfModifiedDictionaries.add(dossierDictionaryTypeId); typeIdsOfModifiedDictionaries.add(dossierDictionaryTypeId);
} }

View File

@ -113,7 +113,6 @@ public class ManualRedactionService {
var manualRedactions = manualRedactionProviderService.getManualRedactions(fileId); var manualRedactions = manualRedactionProviderService.getManualRedactions(fileId);
//validate removing from dossier template dictionary //validate removing from dossier template dictionary
for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) { for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) {
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest, manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest,
removeRedactionRequest.getTypeToRemove(), removeRedactionRequest.getTypeToRemove(),

View File

@ -8,6 +8,7 @@ import java.util.UUID;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
@ -28,6 +29,9 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DossierTemplatePersistenceService { public class DossierTemplatePersistenceService {
@Value("${application.type}")
private String applicationType;
public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found."; public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found.";
private final DossierTemplateRepository dossierTemplateRepository; private final DossierTemplateRepository dossierTemplateRepository;
@ -69,7 +73,6 @@ public class DossierTemplatePersistenceService {
dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser());
rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY); rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY);
rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.COMPONENT);
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate);
loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate)); loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate));
@ -102,12 +105,18 @@ public class DossierTemplatePersistenceService {
if (legalBasis == null || legalBasis.isEmpty()) { if (legalBasis == null || legalBasis.isEmpty()) {
return DossierTemplateStatus.INCOMPLETE; return DossierTemplateStatus.INCOMPLETE;
} }
try {
var rules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY); rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY);
var componentRules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT); } catch (NotFoundException e) {
if (rules == null || componentRules == null) {
return DossierTemplateStatus.INCOMPLETE; return DossierTemplateStatus.INCOMPLETE;
} }
if (applicationType.equals("DocuMine")) {
try {
rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT);
} catch (NotFoundException e) {
return DossierTemplateStatus.INCOMPLETE;
}
}
var now = OffsetDateTime.now(); var now = OffsetDateTime.now();
boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX); boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX);

View File

@ -8,6 +8,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Service @Service
@ -130,7 +131,7 @@ public class RulesPersistenceService {
@Transactional @Transactional
public void setRules(String rules, String dossierTemplateId, RuleFileType ruleFileType) { public void setRules(@NonNull String rules, String dossierTemplateId, RuleFileType ruleFileType) {
ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).ifPresentOrElse(ruleSet -> { ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).ifPresentOrElse(ruleSet -> {
ruleSet.setDossierTemplateId(dossierTemplateId); ruleSet.setDossierTemplateId(dossierTemplateId);

View File

@ -161,3 +161,5 @@ databaseChangeLog:
file: db/changelog/tenant/109-add-rules-timeout-detected-column.yaml file: db/changelog/tenant/109-add-rules-timeout-detected-column.yaml
- include: - include:
file: db/changelog/tenant/110-add-rules-file-type.yaml file: db/changelog/tenant/110-add-rules-file-type.yaml
- include:
file: db/changelog/tenant/111-make-rule-values-non-nullable.yaml

View File

@ -0,0 +1,8 @@
databaseChangeLog:
- changeSet:
id: make-rule-values-non-nullable
author: kilian
changes:
- addNotNullConstraint:
columnName: value
tableName: rule_set

View File

@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.NonNull;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ -13,9 +14,11 @@ import lombok.NoArgsConstructor;
@Schema(description = "Object containing a string of Drools rules.") @Schema(description = "Object containing a string of Drools rules.")
public class RulesUploadRequestModel { public class RulesUploadRequestModel {
@NonNull
@Schema(description = "The actual string of rules.") @Schema(description = "The actual string of rules.")
private String rules; private String rules;
@NonNull
@Schema(description = "The DossierTemplate Id for these rules") @Schema(description = "The DossierTemplate Id for these rules")
private String dossierTemplateId; private String dossierTemplateId;