DM-285: minor fixes to previous version #117
@ -31,6 +31,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.Audit
|
||||
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.Rules;
|
||||
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.redaction.v1.model.DroolsSyntaxValidation;
|
||||
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
|
||||
|
||||
@ -51,9 +52,10 @@ public class RulesController implements RulesResource {
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasAuthority('" + WRITE_RULES + "')")
|
||||
public ResponseEntity<?> upload(@RequestBody RulesUploadRequest rules) {
|
||||
public ResponseEntity<?> upload(@RequestBody RulesUploadRequestModel rules) {
|
||||
|
||||
DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(rules.getRuleFileType(), rules.getRules());
|
||||
RulesUploadRequest rulesUploadRequest = RulesUploadRequest.fromModel(rules);
|
||||
DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(rulesUploadRequest.getRuleFileType(), rulesUploadRequest.getRules());
|
||||
if (!droolsSyntaxValidation.isCompiled()) {
|
||||
var rulesSyntaxErrorMessages = droolsSyntaxValidation.getDroolsSyntaxErrorMessages()
|
||||
.stream()
|
||||
@ -61,13 +63,13 @@ public class RulesController implements RulesResource {
|
||||
.toList();
|
||||
return new ResponseEntity<>(rulesSyntaxErrorMessages, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
rulesPersistenceService.setRules(rules.getRules(), rules.getDossierTemplateId(), rules.getRuleFileType());
|
||||
rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType());
|
||||
|
||||
auditPersistenceService.audit(AuditRequest.builder()
|
||||
.userId(KeycloakSecurity.getUserId())
|
||||
.objectId(rules.getDossierTemplateId())
|
||||
.objectId(rulesUploadRequest.getDossierTemplateId())
|
||||
.category(AuditCategory.DOSSIER_TEMPLATE.name())
|
||||
.message("Rules have been updated")
|
||||
.message(String.format("%s Rules have been updated", rulesUploadRequest.getRuleFileType()))
|
||||
.build());
|
||||
|
||||
return ResponseEntity.ok().build();
|
||||
@ -107,7 +109,7 @@ public class RulesController implements RulesResource {
|
||||
@RequestPart(name = "file") MultipartFile file) {
|
||||
|
||||
try {
|
||||
return upload(new RulesUploadRequest(new String(file.getBytes(), StandardCharsets.UTF_8), dossierTemplateId, ruleFileType));
|
||||
return upload(new RulesUploadRequestModel(new String(file.getBytes(), StandardCharsets.UTF_8), dossierTemplateId, ruleFileType));
|
||||
} catch (IOException e) {
|
||||
throw new FileUploadException("Could not upload file.", e);
|
||||
}
|
||||
|
||||
@ -33,8 +33,7 @@ public class VersionsController implements VersionsResource {
|
||||
|
||||
var result = new HashMap<String, VersionsResponse>();
|
||||
dossierTemplateIds.forEach(rsId -> {
|
||||
VersionsResponse response = new VersionsResponse(dictionaryPersistenceService.getVersion(rsId),
|
||||
rulesPersistenceService.getRules(rsId, RuleFileType.ENTITY).getVersion());
|
||||
VersionsResponse response = new VersionsResponse(dictionaryPersistenceService.getVersion(rsId), rulesPersistenceService.getVersion(rsId, RuleFileType.ENTITY));
|
||||
result.put(rsId, response);
|
||||
});
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
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.Rules;
|
||||
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 io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
@ -42,7 +42,7 @@ public interface RulesResource {
|
||||
@PostMapping(value = RULES_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@Operation(summary = "Takes object containing string or rules as argument, which will be used by the redaction service.")
|
||||
@ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Rules upload successful."), @ApiResponse(responseCode = "400", description = "Uploaded rules could not be verified.")})
|
||||
ResponseEntity<?> upload(@RequestBody RulesUploadRequest rules);
|
||||
ResponseEntity<?> upload(@RequestBody RulesUploadRequestModel rules);
|
||||
|
||||
|
||||
@ResponseBody
|
||||
|
||||
@ -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.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.service.persistence.RulesPersistenceService;
|
||||
import com.iqser.red.service.persistence.service.v1.api.internal.resources.RulesResource;
|
||||
@ -30,17 +29,13 @@ public class RulesInternalController implements RulesResource {
|
||||
@Override
|
||||
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()) {
|
||||
throw new RulesTimeoutDetectedException(dossierTemplateId);
|
||||
}
|
||||
|
||||
return rules.getVersion();
|
||||
} catch (NotFoundException e) {
|
||||
return 0;
|
||||
if (rules.isTimeoutDetected()) {
|
||||
throw new RulesTimeoutDetectedException(dossierTemplateId);
|
||||
}
|
||||
|
||||
return rules.getVersion();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -128,8 +128,11 @@ public class DossierTemplateCloneService {
|
||||
private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||
|
||||
for (RuleFileType ruleFileType : RuleFileType.values()) {
|
||||
|
||||
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType);
|
||||
try {
|
||||
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId, ruleFileType).getValue(), clonedDossierTemplateId, ruleFileType);
|
||||
} catch (NotFoundException e) {
|
||||
log.debug("No {} rules found, will not be cloned!", ruleFileType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -305,7 +305,9 @@ public class DossierTemplateImportService {
|
||||
|
||||
// set rules
|
||||
rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId, RuleFileType.ENTITY);
|
||||
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT);
|
||||
if (request.getComponentRuleSet() != null) {
|
||||
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT);
|
||||
}
|
||||
|
||||
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate)
|
||||
.name()));
|
||||
@ -409,7 +411,9 @@ public class DossierTemplateImportService {
|
||||
dossierTemplateEntity.setCreatedBy(request.getUserId());
|
||||
//set rules
|
||||
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);
|
||||
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate));
|
||||
|
||||
@ -435,6 +435,7 @@ public class FileStatusService {
|
||||
analyzeResult.getNumberOfPages(),
|
||||
analyzeResult.getDictionaryVersion(),
|
||||
analyzeResult.getRulesVersion(),
|
||||
analyzeResult.getComponentRulesVersion(),
|
||||
analyzeResult.getLegalBasisVersion(),
|
||||
analyzeResult.getDuration(),
|
||||
analyzeResult.getDossierDictionaryVersion(),
|
||||
|
||||
@ -152,8 +152,8 @@ public class ReanalysisRequiredStatusService {
|
||||
|
||||
var versions = new HashMap<VersionType, Long>();
|
||||
|
||||
versions.put(RULES, rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.ENTITY).getVersion());
|
||||
versions.put(COMPONENT_RULES, rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT).getVersion());
|
||||
versions.put(RULES, rulesPersistenceService.getVersion(dossierTemplateId, RuleFileType.ENTITY));
|
||||
versions.put(COMPONENT_RULES, rulesPersistenceService.getVersion(dossierTemplateId, RuleFileType.COMPONENT));
|
||||
versions.put(DICTIONARY, dictionaryPersistenceService.getVersion(dossierTemplateId));
|
||||
versions.put(LEGAL_BASIS, legalBasisMappingPersistenceService.getVersion(dossierTemplateId));
|
||||
|
||||
|
||||
@ -177,10 +177,14 @@ public class DossierTemplateExportService {
|
||||
objectMapper.writeValueAsBytes(ruleSet.getValue())));
|
||||
|
||||
// add component rule set
|
||||
var componentRuleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT);
|
||||
fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null,
|
||||
getFilename(ExportFilename.COMPONENT_RULES, TXT_EXT),
|
||||
objectMapper.writeValueAsBytes(componentRuleSet.getValue())));
|
||||
try {
|
||||
var componentRuleSet = rulesPersistenceService.getRules(dossierTemplateId, RuleFileType.COMPONENT);
|
||||
fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null,
|
||||
getFilename(ExportFilename.COMPONENT_RULES, TXT_EXT),
|
||||
objectMapper.writeValueAsBytes(componentRuleSet.getValue())));
|
||||
} catch (NotFoundException e) {
|
||||
log.debug("No component rules present.");
|
||||
}
|
||||
|
||||
//N files with the related report templates
|
||||
var reportTemplateList = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplate.getId());
|
||||
|
||||
@ -123,7 +123,6 @@ public class ManualRedactionDictionaryUpdateHandler {
|
||||
removeFromDictionary(entry.getTypeId(), entry.getValue(), dossierId, fileId, dictionaryEntryType);
|
||||
});
|
||||
} else {
|
||||
|
||||
removeFromDictionary(dossierDictionaryTypeId, manualRequestWithRemoveFromDictionary.getValue(), dossierId, fileId, dictionaryEntryType);
|
||||
typeIdsOfModifiedDictionaries.add(dossierDictionaryTypeId);
|
||||
}
|
||||
|
||||
@ -113,7 +113,6 @@ public class ManualRedactionService {
|
||||
var manualRedactions = manualRedactionProviderService.getManualRedactions(fileId);
|
||||
|
||||
//validate removing from dossier template dictionary
|
||||
|
||||
for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) {
|
||||
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest,
|
||||
removeRedactionRequest.getTypeToRemove(),
|
||||
@ -374,7 +373,7 @@ public class ManualRedactionService {
|
||||
if (manualRedactions.getLegalBasisChanges() != null) {
|
||||
manualRedactions.getLegalBasisChanges().forEach(e -> {
|
||||
if (!e.getStatus().equals(AnnotationStatus.REQUESTED) && e.getProcessedDate() == null) {
|
||||
resizeRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||
legalBasisChangePersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import java.util.UUID;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
|
||||
@ -28,6 +29,9 @@ import lombok.RequiredArgsConstructor;
|
||||
@RequiredArgsConstructor
|
||||
public class DossierTemplatePersistenceService {
|
||||
|
||||
@Value("${application.type}")
|
||||
private String applicationType;
|
||||
|
||||
public static final String DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE = "DossierTemplate with Id %s not found.";
|
||||
|
||||
private final DossierTemplateRepository dossierTemplateRepository;
|
||||
@ -69,7 +73,6 @@ public class DossierTemplatePersistenceService {
|
||||
dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser());
|
||||
rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.ENTITY);
|
||||
rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId(), RuleFileType.COMPONENT);
|
||||
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate);
|
||||
loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate));
|
||||
|
||||
@ -102,12 +105,18 @@ public class DossierTemplatePersistenceService {
|
||||
if (legalBasis == null || legalBasis.isEmpty()) {
|
||||
return DossierTemplateStatus.INCOMPLETE;
|
||||
}
|
||||
|
||||
var rules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY);
|
||||
var componentRules = rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT);
|
||||
if (rules == null || componentRules == null) {
|
||||
try {
|
||||
rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.ENTITY);
|
||||
} catch (NotFoundException e) {
|
||||
return DossierTemplateStatus.INCOMPLETE;
|
||||
}
|
||||
if (applicationType.equals("DocuMine")) {
|
||||
try {
|
||||
rulesPersistenceService.getRules(dossierTemplate.getId(), RuleFileType.COMPONENT);
|
||||
} catch (NotFoundException e) {
|
||||
return DossierTemplateStatus.INCOMPLETE;
|
||||
}
|
||||
}
|
||||
|
||||
var now = OffsetDateTime.now();
|
||||
boolean isNotInRange = !now.isAfter(dossierTemplate.getValidFrom() != null ? dossierTemplate.getValidFrom() : OffsetDateTime.MIN) || !now.isBefore(dossierTemplate.getValidTo() != null ? dossierTemplate.getValidTo() : OffsetDateTime.MAX);
|
||||
|
||||
@ -104,6 +104,7 @@ public class FileStatusPersistenceService {
|
||||
int numberOfPages,
|
||||
long dictionaryVersion,
|
||||
long rulesVersion,
|
||||
long componentRulesVersion,
|
||||
long legalBasisVersion,
|
||||
long duration,
|
||||
long dossierDictionaryVersion,
|
||||
@ -118,6 +119,7 @@ public class FileStatusPersistenceService {
|
||||
ProcessingStatus.PROCESSED,
|
||||
dictionaryVersion,
|
||||
rulesVersion,
|
||||
componentRulesVersion,
|
||||
legalBasisVersion,
|
||||
duration,
|
||||
dossierDictionaryVersion,
|
||||
|
||||
@ -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 jakarta.transaction.Transactional;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Service
|
||||
@ -100,37 +101,26 @@ public class RulesPersistenceService {
|
||||
end
|
||||
// --------------------------------------- Your rules below this line --------------------------------------------------
|
||||
""";
|
||||
|
||||
|
||||
private final RuleSetRepository ruleSetRepository;
|
||||
|
||||
|
||||
@Transactional
|
||||
@Transactional(Transactional.TxType.REQUIRES_NEW)
|
||||
public RuleSetEntity getRules(String dossierTemplateId, RuleFileType ruleFileType) {
|
||||
|
||||
if (ruleFileType.equals(RuleFileType.ENTITY)) {
|
||||
|
||||
return ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name())
|
||||
.orElseGet(() -> createAndGetDefaultRuleSet(dossierTemplateId, ruleFileType));
|
||||
}
|
||||
return ruleSetRepository.findByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name())
|
||||
.orElseThrow(() -> new NotFoundException(String.format("No rule file of type %s found for dossierTemplateId %s", ruleFileType, dossierTemplateId)));
|
||||
}
|
||||
|
||||
|
||||
private RuleSetEntity createAndGetDefaultRuleSet(String dossierTemplateId, RuleFileType ruleFileType) {
|
||||
public long getVersion(String dossierTemplateId, RuleFileType ruleFileType) {
|
||||
|
||||
RuleSetEntity ruleSet = new RuleSetEntity();
|
||||
ruleSet.setDossierTemplateId(dossierTemplateId);
|
||||
ruleSet.setRuleFileType(ruleFileType.name());
|
||||
ruleSet.setValue(DEFAULT_RULES);
|
||||
ruleSet.setVersion(1);
|
||||
ruleSet.setTimeoutDetected(false);
|
||||
return ruleSetRepository.save(ruleSet);
|
||||
return ruleSetRepository.findVersionByDossierTemplateIdAndRuleFileType(dossierTemplateId, ruleFileType.name()).orElse(-1L);
|
||||
}
|
||||
|
||||
|
||||
@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 -> {
|
||||
ruleSet.setDossierTemplateId(dossierTemplateId);
|
||||
|
||||
@ -84,4 +84,10 @@ public class LegalBasisChangePersistenceService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void markAsProcessed(String annotationId, String fileId) {
|
||||
|
||||
legalBasisChangeRepository.markAsProcessed(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
@ -16,6 +14,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
|
||||
boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since);
|
||||
@ -40,12 +40,13 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId")
|
||||
@Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.componentRulesVersion = :componentRulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " + "f.lastProcessed = :lastProcessed, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId")
|
||||
void updateProcessingStatus(String fileId,
|
||||
int numberOfPages,
|
||||
ProcessingStatus processingStatus,
|
||||
long dictionaryVersion,
|
||||
long rulesVersion,
|
||||
long componentRulesVersion,
|
||||
long legalBasisVersion,
|
||||
long analysisDuration,
|
||||
long dossierDictionaryVersion,
|
||||
@ -80,6 +81,7 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
@Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.processingErrorCounter = :processingErrorCounter " + "where f.id = :fileId")
|
||||
void updateProcessingStatus(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, int processingErrorCounter);
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp where f.id = :fileId")
|
||||
void updateStatusErrorInfo(String fileId, String cause, String queue, String service, OffsetDateTime timestamp);
|
||||
@ -183,10 +185,7 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
void setLastManualChangeDate(String fileId, OffsetDateTime lastManualChangeDate, OffsetDateTime lastUpdated);
|
||||
|
||||
|
||||
@Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false "
|
||||
+ " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )"
|
||||
+ " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null "
|
||||
+ " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries")
|
||||
@Query("select f from FileEntity f join DossierEntity d on d.id = f.dossierId where f.excluded = false and f.workflowStatus <> 'APPROVED' and f.excludedFromAutomaticAnalysis = false " + " and ( f.processingStatus = 'PROCESSED' or f.processingStatus = 'ERROR' )" + " and d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null " + " and f.deleted is null and f.hardDeletedTime is null and f.processingErrorCounter <= :maxRetries")
|
||||
List<FileEntity> getAllRelevantStatusesForReanalysisScheduler(int maxRetries);
|
||||
|
||||
|
||||
|
||||
@ -18,4 +18,8 @@ public interface RuleSetRepository extends JpaRepository<RuleSetEntity, RuleSetE
|
||||
|
||||
Optional<RuleSetEntity> findByDossierTemplateIdAndRuleFileType(String dossierTemplateId, String ruleFileType);
|
||||
|
||||
|
||||
@Query("select r.version from RuleSetEntity r where r.dossierTemplateId = :dossierTemplateId and r.ruleFileType = :ruleFileType")
|
||||
Optional<Long> findVersionByDossierTemplateIdAndRuleFileType(String dossierTemplateId, String ruleFileType);
|
||||
|
||||
}
|
||||
|
||||
@ -31,4 +31,9 @@ public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBas
|
||||
@Query("select mlbc from ManualLegalBasisChangeEntity mlbc where mlbc.id.fileId = :fileId and (:includeDeletions = true or mlbc.softDeletedTime is null)")
|
||||
List<ManualLegalBasisChangeEntity> findByFileIdIncludeDeletions(String fileId, boolean includeDeletions);
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualLegalBasisChangeEntity mlbc set mlbc.processedDate = :processedDate where mlbc.id = :annotationEntityId")
|
||||
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
|
||||
|
||||
}
|
||||
|
||||
@ -160,4 +160,6 @@ databaseChangeLog:
|
||||
- include:
|
||||
file: db/changelog/tenant/109-add-rules-timeout-detected-column.yaml
|
||||
- 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
|
||||
@ -0,0 +1,8 @@
|
||||
databaseChangeLog:
|
||||
- changeSet:
|
||||
id: make-rule-values-non-nullable
|
||||
author: kilian
|
||||
changes:
|
||||
- addNotNullConstraint:
|
||||
columnName: value
|
||||
tableName: rule_set
|
||||
@ -15,10 +15,11 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||
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.configuration.Colors;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis;
|
||||
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;
|
||||
|
||||
@Service
|
||||
public class DossierTemplateTesterAndProvider {
|
||||
@ -78,7 +79,7 @@ public class DossierTemplateTesterAndProvider {
|
||||
|
||||
assertThat(loadedTemplate).isEqualTo(result);
|
||||
|
||||
rulesClient.upload(new RulesUploadRequest("ABCD", loadedTemplate.getDossierTemplateId()));
|
||||
rulesClient.upload(new RulesUploadRequestModel("ABCD", loadedTemplate.getDossierTemplateId(), RuleFileType.ENTITY));
|
||||
legalBasisClient.setLegalBasisMapping(List.of(new LegalBasis("name", "description", "reason")), loadedTemplate.getDossierTemplateId());
|
||||
|
||||
loadedTemplate = dossierTemplateClient.getDossierTemplate(result.getDossierTemplateId());
|
||||
|
||||
@ -286,20 +286,20 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe
|
||||
for (int k = 0; k < 6; k++) {
|
||||
var fileId = fileTesterAndProvider.testAndProvideFileQuick(dossier, "file: " + k);
|
||||
|
||||
if (k == 1){
|
||||
fileStatusPersistenceService.updateProcessingStatus(fileId, k, 0L, 0L, 0L, 0L, 0L, 1, 1);
|
||||
if (k == 1) {
|
||||
fileStatusPersistenceService.updateProcessingStatus(fileId, k, 0L, 0L, 0L, 0L, 0L, 0L, 1, 1);
|
||||
reanalysisClient.excludePages(dossier.getId(), fileId, new PageExclusionRequest(List.of(new PageRange(k, k))));
|
||||
}
|
||||
if (k ==2) {
|
||||
if (k == 2) {
|
||||
fileManagementClient.deleteFile(dossier.getId(), fileId);
|
||||
}
|
||||
if (k == 3){
|
||||
if (k == 3) {
|
||||
fileManagementClient.hardDeleteFiles(dossier.getId(), Set.of(fileId));
|
||||
}
|
||||
if (k == 4){
|
||||
if (k == 4) {
|
||||
fileClient.setStatusUnderReview(dossier.getId(), fileId, userId);
|
||||
}
|
||||
if (k == 5){
|
||||
if (k == 5) {
|
||||
fileClient.setStatusUnderApproval(dossier.getId(), fileId, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,18 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.VersionClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules.RulesUploadRequest;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
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.RulesUploadRequestModel;
|
||||
|
||||
public class RulesTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
@ -29,13 +31,13 @@ public class RulesTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
|
||||
rulesClient.upload(new RulesUploadRequest("lorem ipsum", dossierTemplate.getId()));
|
||||
rulesClient.upload(new RulesUploadRequestModel("lorem ipsum", dossierTemplate.getId(), RuleFileType.ENTITY));
|
||||
assertThat(versionClient.getVersions(List.of(dossierTemplate.getId()))
|
||||
.get(dossierTemplate.getId())
|
||||
.getRulesVersion()).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), damit es ACTIVE ist
|
||||
assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum");
|
||||
|
||||
rulesClient.upload(new RulesUploadRequest("lorem ipsum dolor sit amet", dossierTemplate.getId()));
|
||||
rulesClient.upload(new RulesUploadRequestModel("lorem ipsum dolor sit amet", dossierTemplate.getId(), RuleFileType.ENTITY));
|
||||
assertThat(versionClient.getVersions(List.of(dossierTemplate.getId())).get(dossierTemplate.getId()).getRulesVersion()).isEqualTo(4);
|
||||
assertThat(rulesClient.download(dossierTemplate.getId()).getRules()).isEqualTo("lorem ipsum dolor sit amet");
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ public class AnalyzeResult {
|
||||
private long dictionaryVersion;
|
||||
private long dossierDictionaryVersion;
|
||||
private long rulesVersion;
|
||||
private long componentRulesVersion;
|
||||
private long legalBasisVersion;
|
||||
|
||||
private boolean wasReanalyzed;
|
||||
|
||||
@ -2,32 +2,34 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertem
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.FieldDefaults;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Object containing a string of Drools rules.")
|
||||
@FieldDefaults(level = AccessLevel.PRIVATE)
|
||||
public class RulesUploadRequest {
|
||||
|
||||
public RulesUploadRequest(String rules, String dossierTemplateId) {
|
||||
public static RulesUploadRequest fromModel(RulesUploadRequestModel rulesUploadRequestModel) {
|
||||
|
||||
this.rules = rules;
|
||||
this.dossierTemplateId = dossierTemplateId;
|
||||
this.ruleFileType = RuleFileType.ENTITY;
|
||||
return RulesUploadRequest.builder()
|
||||
.rules(rulesUploadRequestModel.getRules())
|
||||
.dossierTemplateId(rulesUploadRequestModel.getDossierTemplateId())
|
||||
.ruleFileType(rulesUploadRequestModel.getRuleFileType() != null ? rulesUploadRequestModel.getRuleFileType() : RuleFileType.ENTITY)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@Schema(description = "The actual string of rules.")
|
||||
private String rules;
|
||||
String rules;
|
||||
|
||||
@Schema(description = "The DossierTemplate Id for these rules")
|
||||
private String dossierTemplateId;
|
||||
String dossierTemplateId;
|
||||
|
||||
@Schema(description = "The Rule file type of these rules", allowableValues = {"ENTITY", "COMPONENT"})
|
||||
private RuleFileType ruleFileType;
|
||||
RuleFileType ruleFileType;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.rules;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(description = "Object containing a string of Drools rules.")
|
||||
public class RulesUploadRequestModel {
|
||||
|
||||
@NonNull
|
||||
@Schema(description = "The actual string of rules.")
|
||||
private String rules;
|
||||
|
||||
@NonNull
|
||||
@Schema(description = "The DossierTemplate Id for these rules")
|
||||
private String dossierTemplateId;
|
||||
|
||||
@Schema(description = "The Rule file type of these rules", allowableValues = {"ENTITY", "COMPONENT"})
|
||||
private RuleFileType ruleFileType = RuleFileType.ENTITY;
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user