Merge branch 'master' into feature/RED-2896

# Conflicts:
#	persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java
#	persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java
#	persistence-service-v1/pom.xml
This commit is contained in:
Philipp Schramm 2022-01-13 16:26:47 +01:00
commit b9df862ebf
24 changed files with 254 additions and 172 deletions

View File

@ -29,5 +29,5 @@ public class DossierTemplate {
private OffsetDateTime validTo; private OffsetDateTime validTo;
private boolean deleted; private boolean deleted;
private Set<DownloadFileType> downloadFileTypes = new HashSet<>(); private Set<DownloadFileType> downloadFileTypes = new HashSet<>();
private DossierTemplateStatus dossierTemplateStatus;
} }

View File

@ -0,0 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate;
public enum DossierTemplateStatus {
INCOMPLETE, INACTIVE, ACTIVE
}

View File

@ -0,0 +1,15 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier;
import lombok.*;
@Data
@Builder
@EqualsAndHashCode(of="dossierId")
@NoArgsConstructor
@AllArgsConstructor
public class DossierChange {
private String dossierId;
private boolean dossierChanges;
private boolean fileChanges;
}

View File

@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.service.v1.api.resources;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -26,12 +27,12 @@ public interface DossierResource {
String INCLUDE_DELETED_PARAM = "includeDeleted"; String INCLUDE_DELETED_PARAM = "includeDeleted";
String CHANGES_PATH = "/has-changes"; String CHANGES_PATH = "/changes";
@ResponseBody @ResponseBody
@ResponseStatus(value = HttpStatus.OK) @ResponseStatus(value = HttpStatus.OK)
@PostMapping(value = REST_PATH + CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = REST_PATH + CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
JSONPrimitive<Boolean> hasChangesSince(@RequestBody JSONPrimitive<OffsetDateTime> since); Set<DossierChange> changesSince(@RequestBody JSONPrimitive<OffsetDateTime> since);
@PostMapping(value = REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest); Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest);

View File

@ -1,20 +1,30 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@Entity @Entity
@ -73,4 +83,8 @@ public class DossierTemplateEntity {
@JsonIgnore @JsonIgnore
@OneToMany(mappedBy = "dossierTemplate") @OneToMany(mappedBy = "dossierTemplate")
private List<FileAttributeConfigEntity> fileAttributeConfigs = new ArrayList<>(); private List<FileAttributeConfigEntity> fileAttributeConfigs = new ArrayList<>();
@Transient
private DossierTemplateStatus dossierTemplateStatus;
} }

View File

@ -8,6 +8,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -16,7 +17,9 @@ import org.springframework.stereotype.Service;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -62,7 +65,11 @@ public class DossierPersistenceService {
dossier.getReportTemplates().forEach(t -> t.getDossiers().removeIf(d -> d.getId().equals(dossierId) && !createOrUpdateDossierRequest.getReportTemplateIds().contains(t.getTemplateId()))); dossier.getReportTemplates().forEach(t -> t.getDossiers().removeIf(d -> d.getId().equals(dossierId) && !createOrUpdateDossierRequest.getReportTemplateIds().contains(t.getTemplateId())));
var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds());
reportTemplates.forEach(r -> {if (!r.getDossiers().stream().map(DossierEntity::getId).collect(Collectors.toSet()).contains(dossierId)) {r.getDossiers().add(dossier);}}); reportTemplates.forEach(r -> {
if (!r.getDossiers().stream().map(DossierEntity::getId).collect(Collectors.toSet()).contains(dossierId)) {
r.getDossiers().add(dossier);
}
});
dossier.setReportTemplates(reportTemplates); dossier.setReportTemplates(reportTemplates);
}); });
@ -110,7 +117,23 @@ public class DossierPersistenceService {
dossierRepository.markDossierAsDeleted(dossierId, DossierStatus.DELETED, softDeletedTime, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierRepository.markDossierAsDeleted(dossierId, DossierStatus.DELETED, softDeletedTime, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
} }
public boolean hasChangesSince(OffsetDateTime since) { public Set<DossierChange> hasChangesSince(OffsetDateTime since) {
return dossierRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS)) || fileRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS));
var dossiersWithChanges = dossierRepository.findDossierChangeByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS));
var dossiersWithChangedFiles = fileRepository.findDossierChangeByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS));
Set<DossierChange> dossierChanges = new HashSet<>();
for (var dossierId : dossiersWithChanges) {
var dossierChange = new DossierChange(dossierId, true, dossiersWithChangedFiles.contains(dossierId));
dossierChanges.add(dossierChange);
}
for (var dossierId : dossiersWithChangedFiles) {
var dossierChange = new DossierChange(dossierId, dossiersWithChanges.contains(dossierId), true);
dossierChanges.add(dossierChange);
}
return dossierChanges;
} }
} }

View File

@ -6,6 +6,9 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -25,6 +28,8 @@ public class DossierTemplatePersistenceService {
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;
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
private final RulesPersistenceService rulesPersistenceService;
@Transactional @Transactional
@ -41,6 +46,7 @@ public class DossierTemplatePersistenceService {
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get()); BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser()); dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser());
dossierTemplate.get().setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate.get()));
return dossierTemplate.get(); return dossierTemplate.get();
} else { } else {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId())); throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
@ -53,11 +59,37 @@ public class DossierTemplatePersistenceService {
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate); BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate);
dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser());
return dossierTemplateRepository.save(dossierTemplate); rulesPersistenceService.setRules(RulesPersistenceService.DEFAULT_RULES, dossierTemplate.getId());
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplate);
loadedDossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(loadedDossierTemplate));
return loadedDossierTemplate;
} }
} }
private DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) {
var legalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId());
if (legalBasis==null || legalBasis.isEmpty()) {
return DossierTemplateStatus.INCOMPLETE;
}
var rules = rulesPersistenceService.getRules(dossierTemplate.getId());
if (rules==null || rules.getVersion()==1) {
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);
if(isNotInRange) {
return DossierTemplateStatus.INACTIVE;
}
return DossierTemplateStatus.ACTIVE;
}
public void validateDossierTemplateNameIsUnique(String templateName){ public void validateDossierTemplateNameIsUnique(String templateName){
getAllDossierTemplates().forEach(existing -> { getAllDossierTemplates().forEach(existing -> {
if(existing.getName().equals(templateName)){ if(existing.getName().equals(templateName)){
@ -67,11 +99,18 @@ public class DossierTemplatePersistenceService {
} }
public List<DossierTemplateEntity> getAllDossierTemplates() { public List<DossierTemplateEntity> getAllDossierTemplates() {
return dossierTemplateRepository.findAllWhereDeletedIsFalse();
var allDossierTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse();
allDossierTemplates.forEach(dossierTemplateEntity -> dossierTemplateEntity.setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplateEntity)));
return allDossierTemplates;
} }
public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) { public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) {
return dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId))); var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
dossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate));
return dossierTemplate;
} }
@Transactional @Transactional

View File

@ -53,14 +53,14 @@ public class FileStatusPersistenceService {
@Transactional @Transactional
public void updateWorkflowStatus(String fileId, int numberOfPages, long dictionaryVersion, long rulesVersion, public void updateWorkflowStatus(String fileId, int numberOfPages, long dictionaryVersion, long rulesVersion,
long legalBasisVersion, long duration, long dossierDictionaryVersion, long legalBasisVersion, long duration, long dossierDictionaryVersion,
int analysisVersion) { int analysisVersion, int analysisNumber) {
if (isFileDeleted(fileId)) { if (isFileDeleted(fileId)) {
return; return;
} }
fileRepository.updateWorkflowStatus(fileId, numberOfPages, ProcessingStatus.PROCESSED, fileRepository.updateWorkflowStatus(fileId, numberOfPages, ProcessingStatus.PROCESSED,
dictionaryVersion, rulesVersion, legalBasisVersion, duration, dossierDictionaryVersion, dictionaryVersion, rulesVersion, legalBasisVersion, duration, dossierDictionaryVersion,
analysisVersion, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), analysisVersion, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), analysisNumber);
} }

View File

@ -12,7 +12,7 @@ import javax.transaction.Transactional;
@SuppressWarnings("PMD.TooManyStaticImports") @SuppressWarnings("PMD.TooManyStaticImports")
public class RulesPersistenceService { public class RulesPersistenceService {
private final static String DEFAULT_RULES = "" + public final static String DEFAULT_RULES = "" +
"package drools\n" + "package drools\n" +
"\n" + "\n" +
"import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" + "import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" +

View File

@ -1,15 +1,20 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.List;
public interface DossierRepository extends JpaRepository<DossierEntity, String> { public interface DossierRepository extends JpaRepository<DossierEntity, String> {
@Query("select d.id from DossierEntity d where d.lastUpdated > :since")
List<String> findDossierChangeByLastUpdatedIsAfter(OffsetDateTime since);
@Modifying @Modifying
@Query("update DossierEntity d set d.status = :dossierStatus, d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated," + @Query("update DossierEntity d set d.status = :dossierStatus, d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated," +
" d.softDeletedTime = " + " d.softDeletedTime = " +
@ -29,6 +34,5 @@ public interface DossierRepository extends JpaRepository<DossierEntity, String>
@Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = :softDeletedTime, d.lastUpdated = :lastUpdated where d.id = :dossierId") @Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = :softDeletedTime, d.lastUpdated = :lastUpdated where d.id = :dossierId")
void markDossierAsDeleted(String dossierId, DossierStatus dossierStatus, OffsetDateTime softDeletedTime, OffsetDateTime lastUpdated); void markDossierAsDeleted(String dossierId, DossierStatus dossierStatus, OffsetDateTime softDeletedTime, OffsetDateTime lastUpdated);
boolean existsByLastUpdatedIsAfter(OffsetDateTime since);
} }

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
@ -16,8 +17,6 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since); boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since);
boolean existsByLastUpdatedIsAfter(OffsetDateTime since);
List<FileEntity> findByDossierId(String dossierId); List<FileEntity> findByDossierId(String dossierId);
@Modifying @Modifying
@ -39,12 +38,12 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " + @Query("update FileEntity f set f.numberOfPages = :numberOfPages, f.processingStatus = :processingStatus, " +
"f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.legalBasisVersion = :legalBasisVersion, " + "f.dictionaryVersion = :dictionaryVersion, f.rulesVersion = :rulesVersion, f.legalBasisVersion = :legalBasisVersion, " +
"f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " + "f.analysisDuration = :analysisDuration, f.dossierDictionaryVersion = :dossierDictionaryVersion, " +
"f.analysisVersion = :analysisVersion, f.numberOfAnalyses = f.numberOfAnalyses + 1, f.lastUpdated = :lastUpdated, " + "f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " +
"f.lastProcessed = :lastProcessed " + "f.lastProcessed = :lastProcessed " +
"where f.id = :fileId") "where f.id = :fileId")
void updateWorkflowStatus(String fileId, int numberOfPages, ProcessingStatus processingStatus, long dictionaryVersion, void updateWorkflowStatus(String fileId, int numberOfPages, ProcessingStatus processingStatus, long dictionaryVersion,
long rulesVersion, long legalBasisVersion, long analysisDuration, long dossierDictionaryVersion, long rulesVersion, long legalBasisVersion, long analysisDuration, long dossierDictionaryVersion,
int analysisVersion, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed); int analysisVersion, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed, int analysisNumber);
@Modifying @Modifying
@Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate " + @Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate " +
@ -110,7 +109,7 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " +
"f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " +
"f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " +
"f.assignee = null, f.approvalDate = null, f.lastManualRedaction = null, " + "f.assignee = null, f.approvalDate = null, f.lastManualRedaction = null, f.numberOfAnalyses = 0, " +
"f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " +
"f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " +
"f.deleted = null, f.hardDeletedTime = null " + "f.deleted = null, f.hardDeletedTime = null " +
@ -121,6 +120,8 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Query("select count(f) from FileEntity f where f.dossierId = :dossierId and f.deleted is not null and f.hardDeletedTime is null") @Query("select count(f) from FileEntity f where f.dossierId = :dossierId and f.deleted is not null and f.hardDeletedTime is null")
int countSoftDeletedFiles(String dossierId); int countSoftDeletedFiles(String dossierId);
@Query("select distinct f.dossierId from FileEntity f where f.lastUpdated > :since")
List<String> findDossierChangeByLastUpdatedIsAfter(OffsetDateTime since);
} }

View File

@ -8,10 +8,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.*;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource; import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource;
import feign.Param; import feign.Param;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -39,9 +36,9 @@ public class DossierController implements DossierResource {
@Override @Override
public JSONPrimitive<Boolean> hasChangesSince(@RequestBody JSONPrimitive<OffsetDateTime> since) { public Set<DossierChange> changesSince(@RequestBody JSONPrimitive<OffsetDateTime> since) {
return JSONPrimitive.of(dossierService.hasChangesSince(since.getValue())); return dossierService.changesSince(since.getValue());
} }

View File

@ -1,127 +1,42 @@
package com.iqser.red.service.peristence.v1.server.migration; package com.iqser.red.service.peristence.v1.server.migration;
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
import static java.util.stream.Collectors.toList;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.exception.MigrationException; import com.iqser.red.service.peristence.v1.server.exception.MigrationException;
import com.iqser.red.service.peristence.v1.server.migration.model.CommentRow; import com.iqser.red.service.peristence.v1.server.migration.model.*;
import com.iqser.red.service.peristence.v1.server.migration.model.ConfigurationRow;
import com.iqser.red.service.peristence.v1.server.migration.model.DigitalSignatureModel;
import com.iqser.red.service.peristence.v1.server.migration.model.DossierAttributeRow;
import com.iqser.red.service.peristence.v1.server.migration.model.DossierAttributesConfig;
import com.iqser.red.service.peristence.v1.server.migration.model.EntryRow;
import com.iqser.red.service.peristence.v1.server.migration.model.FileAttributesConfig;
import com.iqser.red.service.peristence.v1.server.migration.model.IdRemovalRow;
import com.iqser.red.service.peristence.v1.server.migration.model.ManualForceRedactionRow;
import com.iqser.red.service.peristence.v1.server.migration.model.ManualImageRecategorizationRow;
import com.iqser.red.service.peristence.v1.server.migration.model.ManualLegalBasisChangeRow;
import com.iqser.red.service.peristence.v1.server.migration.model.ManualRedactionEntryRow;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationAuditModel;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationComment;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationDossier;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationDossierTemplate;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationDownloadStatus;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationFileStatus;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationNotification;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationRedactionLog;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationRedactionLogEntry;
import com.iqser.red.service.peristence.v1.server.migration.model.MigrationViewedPage;
import com.iqser.red.service.peristence.v1.server.migration.model.NewIdForDossierTemplate;
import com.iqser.red.service.peristence.v1.server.migration.model.Status;
import com.iqser.red.service.peristence.v1.server.migration.model.VersionRow;
import com.iqser.red.service.peristence.v1.server.migration.model.VersionType;
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService; import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils; import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.*;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.IdRemovalEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualForceRedactionEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualImageRecategorizationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.audit.AuditEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.audit.AuditEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.*;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.*;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisMappingEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.RuleSetEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.CommentRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadStatusRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.EntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributeConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesGeneralConfigurationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ForceRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImageRecategorizationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisChangeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ManualRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RemoveRedactionRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ViewedPagesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.Comment; import com.iqser.red.service.persistence.service.v1.api.model.annotations.Comment;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.redaction.v1.model.Change; import com.iqser.red.service.redaction.v1.model.*;
import com.iqser.red.service.redaction.v1.model.ChangeType;
import com.iqser.red.service.redaction.v1.model.Engine;
import com.iqser.red.service.redaction.v1.model.Rectangle;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
import static java.util.stream.Collectors.toList;
@SuppressWarnings("PMD") @SuppressWarnings("PMD")
@Slf4j @Slf4j
@ -264,41 +179,42 @@ public class MigrationService {
List<FileEntity> files = fileRepository.findAll(); List<FileEntity> files = fileRepository.findAll();
files.stream().filter(file -> file.getHardDeletedTime() == null).forEach(file -> { files.stream().filter(file -> file.getHardDeletedTime() == null).forEach(file -> {
migrateRedactionLog(file.getDossierId(), file.getId(), file.getLastProcessed()); migrateRedactionLog(file);
}); });
} }
@SneakyThrows @SneakyThrows
private void migrateRedactionLog(String dossierId, String fileId, OffsetDateTime lastProcessed) { private void migrateRedactionLog(FileEntity file) {
try { try {
byte[] oldRedactionLogBytes = fileManagementStorageService.getStoredObjectBytes(StorageIdUtils.getStorageId(dossierId, fileId, FileType.REDACTION_LOG)); byte[] oldRedactionLogBytes = fileManagementStorageService.getStoredObjectBytes(StorageIdUtils.getStorageId(file.getDossierId(), file.getId(), FileType.REDACTION_LOG));
if (oldRedactionLogBytes == null) { if (oldRedactionLogBytes == null) {
log.warn("Not redactionLog found to convert for dossierId {} and fileId {}", dossierId, fileId); log.warn("Not redactionLog found to convert for dossierId {} and fileId {}", file.getDossierId(), file.getId());
return; return;
} }
var oldRedactionLog = objectMapper.readValue(oldRedactionLogBytes, MigrationRedactionLog.class); var oldRedactionLog = objectMapper.readValue(oldRedactionLogBytes, MigrationRedactionLog.class);
RedactionLog redactionLog = new RedactionLog(oldRedactionLog.getAnalysisVersion(), oldRedactionLog.getRedactionLogEntry() RedactionLog redactionLog = new RedactionLog(oldRedactionLog.getAnalysisVersion(),
file.getNumberOfAnalyses(), oldRedactionLog.getRedactionLogEntry()
.stream() .stream()
.map(r -> convertRedactionLogEntry(r, fileId, lastProcessed)) .map(r -> convertRedactionLogEntry(r, file.getId(), file.getLastProcessed(),file.getNumberOfAnalyses()))
.collect(toList()), oldRedactionLog.getLegalBasis(), oldRedactionLog.getDictionaryVersion(), oldRedactionLog .collect(toList()), oldRedactionLog.getLegalBasis(), oldRedactionLog.getDictionaryVersion(), oldRedactionLog
.getDossierDictionaryVersion(), oldRedactionLog.getRulesVersion(), oldRedactionLog.getLegalBasisVersion()); .getDossierDictionaryVersion(), oldRedactionLog.getRulesVersion(), oldRedactionLog.getLegalBasisVersion());
storageService.storeObject("backup/" + StorageIdUtils.getStorageId(dossierId, fileId, FileType.REDACTION_LOG), objectMapper storageService.storeObject("backup/" + StorageIdUtils.getStorageId(file.getDossierId(), file.getId(), FileType.REDACTION_LOG), objectMapper
.writeValueAsBytes(oldRedactionLogBytes)); .writeValueAsBytes(oldRedactionLogBytes));
storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.REDACTION_LOG), objectMapper storageService.storeObject(StorageIdUtils.getStorageId(file.getDossierId(), file.getId(), FileType.REDACTION_LOG), objectMapper
.writeValueAsBytes(redactionLog)); .writeValueAsBytes(redactionLog));
} catch (StorageObjectDoesNotExist e) { } catch (StorageObjectDoesNotExist e) {
log.warn("Not redactionLog found to convert for dossierId {} and fileId {}", dossierId, fileId); log.warn("Not redactionLog found to convert for dossierId {} and fileId {}", file.getDossierId(), file.getId());
} }
} }
private RedactionLogEntry convertRedactionLogEntry(MigrationRedactionLogEntry oldRedactionLogEntry, String fileId, private RedactionLogEntry convertRedactionLogEntry(MigrationRedactionLogEntry oldRedactionLogEntry, String fileId,
OffsetDateTime lastProcessed) { OffsetDateTime lastProcessed, int analysisNumber) {
return RedactionLogEntry.builder() return RedactionLogEntry.builder()
.id(oldRedactionLogEntry.getId()) .id(oldRedactionLogEntry.getId())
@ -335,7 +251,7 @@ public class MigrationService {
.excluded(oldRedactionLogEntry.isExcluded()) .excluded(oldRedactionLogEntry.isExcluded())
.recategorizationType(oldRedactionLogEntry.getRecategorizationType()) .recategorizationType(oldRedactionLogEntry.getRecategorizationType())
.legalBasisChangeValue(oldRedactionLogEntry.getLegalBasisChangeValue()) .legalBasisChangeValue(oldRedactionLogEntry.getLegalBasisChangeValue())
.changes(List.of(new Change(ChangeType.ADDED, lastProcessed))) .changes(List.of(new Change(analysisNumber, ChangeType.ADDED, lastProcessed)))
.engines(getEngine(oldRedactionLogEntry)) .engines(getEngine(oldRedactionLogEntry))
.reference(null) .reference(null)
.rectangle(oldRedactionLogEntry.isRectangle()) .rectangle(oldRedactionLogEntry.isRectangle())
@ -346,7 +262,7 @@ public class MigrationService {
private Set<Engine> getEngine(MigrationRedactionLogEntry oldRedactionLogEntry) { private Set<Engine> getEngine(MigrationRedactionLogEntry oldRedactionLogEntry) {
if (oldRedactionLogEntry.isManual()) { if (oldRedactionLogEntry.isManual()) {
return new HashSet<Engine>(); return new HashSet<>();
} }
if (oldRedactionLogEntry.isDictionaryEntry() || oldRedactionLogEntry.isDossierDictionaryEntry()) { if (oldRedactionLogEntry.isDictionaryEntry() || oldRedactionLogEntry.isDossierDictionaryEntry()) {
return Set.of(Engine.DICTIONARY); return Set.of(Engine.DICTIONARY);

View File

@ -4,14 +4,18 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* Provides the internal interface between dossier request and the actual persistence. * Provides the internal interface between dossier request and the actual persistence.
@ -25,6 +29,8 @@ public class DossierService {
private final FileStatusPersistenceService fileStatusPersistenceService; private final FileStatusPersistenceService fileStatusPersistenceService;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
public DossierEntity addDossier(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) { public DossierEntity addDossier(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
@ -35,6 +41,10 @@ public class DossierService {
throw new ConflictException("Dossier with this name already exists"); throw new ConflictException("Dossier with this name already exists");
} }
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(createOrUpdateDossierRequest.getDossierTemplateId());
if(!dossierTemplate.getDossierTemplateStatus().equals(DossierTemplateStatus.ACTIVE)) {
throw new BadRequestException("Dossier template is not active.");
}
return dossierPersistenceService.insert(createOrUpdateDossierRequest); return dossierPersistenceService.insert(createOrUpdateDossierRequest);
@ -43,7 +53,13 @@ public class DossierService {
public DossierEntity updateDossier(CreateOrUpdateDossierRequest dossierRequest, String dossierId) { public DossierEntity updateDossier(CreateOrUpdateDossierRequest dossierRequest, String dossierId) {
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(dossierRequest.getDossierTemplateId());
if(!dossierTemplate.getDossierTemplateStatus().equals(DossierTemplateStatus.ACTIVE)) {
throw new BadRequestException("Dossier template is not active.");
}
DossierEntity dossier = dossierPersistenceService.findByDossierId(dossierId); DossierEntity dossier = dossierPersistenceService.findByDossierId(dossierId);
if (dossier.getDossierName() if (dossier.getDossierName()
.equals(dossierRequest.getDossierName()) || dossierPersistenceService.findAllDossiers() .equals(dossierRequest.getDossierName()) || dossierPersistenceService.findAllDossiers()
.stream() .stream()
@ -94,7 +110,7 @@ public class DossierService {
return dossierPersistenceService.findAllDossiers(); return dossierPersistenceService.findAllDossiers();
} }
public boolean hasChangesSince(OffsetDateTime since) { public Set<DossierChange> changesSince(OffsetDateTime since) {
return dossierPersistenceService.hasChangesSince(since); return dossierPersistenceService.hasChangesSince(since);
} }
} }

View File

@ -98,7 +98,11 @@ public class FileStatusService {
public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) { public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
fileStatusPersistenceService.updateWorkflowStatus(fileId, analyzeResult.getNumberOfPages(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); fileStatusPersistenceService.updateWorkflowStatus(fileId, analyzeResult.getNumberOfPages(),
analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(),
analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(),
analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion(),
analyzeResult.getAnalysisNumber());
indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2); indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2);
} }
@ -268,6 +272,7 @@ public class FileStatusService {
var analyseRequest = AnalyzeRequest.builder() var analyseRequest = AnalyzeRequest.builder()
.messageType(reanalyse ? MessageType.REANALYSE : MessageType.FULL_ANALYSE) .messageType(reanalyse ? MessageType.REANALYSE : MessageType.FULL_ANALYSE)
.dossierId(dossierId) .dossierId(dossierId)
.analysisNumber(fileStatus.getNumberOfAnalyses()+1)
.sectionsToReanalyse(sectionsToReanalyse) .sectionsToReanalyse(sectionsToReanalyse)
.fileId(fileId) .fileId(fileId)
.manualRedactions(manualRedactionProviderService.getManualRedactions(fileId)) .manualRedactions(manualRedactionProviderService.getManualRedactions(fileId))

View File

@ -2,14 +2,20 @@ package com.iqser.red.service.peristence.v1.server.integration.service;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
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.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.List;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@ -19,6 +25,12 @@ public class DossierTemplateTesterAndProvider {
@Autowired @Autowired
private DossierTemplateClient dossierTemplateClient; private DossierTemplateClient dossierTemplateClient;
@Autowired
private RulesClient rulesClient;
@Autowired
private LegalBasisClient legalBasisClient;
public DossierTemplate provideTestTemplate() { public DossierTemplate provideTestTemplate() {
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL));
@ -26,7 +38,7 @@ public class DossierTemplateTesterAndProvider {
cru.setDescription("Template 1"); cru.setDescription("Template 1");
cru.setRequestingUser("1"); cru.setRequestingUser("1");
cru.setValidFrom(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setValidFrom(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
cru.setValidTo(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setValidTo(OffsetDateTime.now().plusHours(1).truncatedTo(ChronoUnit.MILLIS));
DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru); DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
@ -36,6 +48,11 @@ public class DossierTemplateTesterAndProvider {
assertThat(loadedTemplate).isEqualTo(result); assertThat(loadedTemplate).isEqualTo(result);
rulesClient.setRules(loadedTemplate.getId(), JSONPrimitive.of("ABCD"));
legalBasisClient.setLegalBasisMapping(loadedTemplate.getId(), List.of(new LegalBasis("name", "description", "reason")));
loadedTemplate = dossierTemplateClient.getDossierTemplate(result.getId());
return loadedTemplate; return loadedTemplate;
} }

View File

@ -58,7 +58,8 @@ public class FileTesterAndProvider {
assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isGreaterThanOrEqualTo(1); assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isGreaterThanOrEqualTo(1);
fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, List.of(RedactionLogEntry.builder().id("annotationId").type("manual").value("value entry").build()), fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, 1,
List.of(RedactionLogEntry.builder().id("annotationId").type("manual").value("value entry").build()),
null, 0, 0, 0, 0))); null, 0, 0, 0, 0)));
fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.SECTION_GRID, objectMapper.writeValueAsBytes(new SectionGrid())); fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.SECTION_GRID, objectMapper.writeValueAsBytes(new SectionGrid()));

View File

@ -2,16 +2,23 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
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.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import feign.FeignException; import feign.FeignException;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -53,11 +60,10 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate).isEqualTo(updated);
dossierTemplateClient.getAllDossierTemplates().forEach(template -> dossierTemplateClient.deleteDossierTemplate(template.getId(), "1")); assertThat(loadedTemplate.getDossierTemplateStatus()).isEqualTo(DossierTemplateStatus.ACTIVE);
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru); updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo("Template 1 Update"); assertThat(updated.getName()).isEqualTo("Template 1 Update");
var testDossier = dossierTesterAndProvider.provideTestDossier(updated); var testDossier = dossierTesterAndProvider.provideTestDossier(updated);

View File

@ -3,8 +3,10 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -35,12 +37,17 @@ public class DossierTest extends AbstractPersistenceServerServiceTest {
@Test @Test
public void testDossier() { public void testDossier() {
var start = OffsetDateTime.now();
var dossier = dossierTesterAndProvider.provideTestDossier(); var dossier = dossierTesterAndProvider.provideTestDossier();
var allDossiers = dossierClient.getAllDossiers(); var allDossiers = dossierClient.getAllDossiers();
assertThat(allDossiers.size()).isEqualTo(1); assertThat(allDossiers.size()).isEqualTo(1);
assertThat(allDossiers.get(0)).isEqualTo(dossier); assertThat(allDossiers.get(0)).isEqualTo(dossier);
var changes = dossierClient.changesSince(JSONPrimitive.of(start));
assertThat(changes).isNotEmpty();
// update // update
CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest();
cru.setDossierTemplateId(dossier.getId()); cru.setDossierTemplateId(dossier.getId());

View File

@ -1,7 +1,18 @@
package com.iqser.red.service.peristence.v1.server.integration.tests; package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.google.common.collect.Sets; import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.util.Collections;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
import com.iqser.red.service.peristence.v1.server.integration.client.ManualRedactionClient; import com.iqser.red.service.peristence.v1.server.integration.client.ManualRedactionClient;
import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient;
@ -10,20 +21,17 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ForceRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImageRecategorizationRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.LegalBasisChangeRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import feign.FeignException; import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import static org.assertj.core.api.Assertions.assertThat;
public class FileTest extends AbstractPersistenceServerServiceTest { public class FileTest extends AbstractPersistenceServerServiceTest {
@ -94,6 +102,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Test @Test
public void testFile() { public void testFile() {
var start = OffsetDateTime.now();
var dossier = dossierTesterAndProvider.provideTestDossier(); var dossier = dossierTesterAndProvider.provideTestDossier();
// update // update
@ -104,6 +113,11 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var file = fileTesterAndProvider.testAndProvideFile(dossier); var file = fileTesterAndProvider.testAndProvideFile(dossier);
var changes = dossierClient.changesSince(JSONPrimitive.of(start));
assertThat(changes).isNotEmpty();
assertThat(changes.iterator().next().isFileChanges()).isTrue();
assertThat(changes.iterator().next().isDossierChanges()).isTrue();
assertThat(fileClient.getAllStatuses().size()).isEqualTo(1); assertThat(fileClient.getAllStatuses().size()).isEqualTo(1);
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());

View File

@ -27,7 +27,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(0); assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2); //1. beim Aufrufen von getLegalBasisMapping(); 2. bei provideTestTemplate(), damit es ACTIVE ist
try { try {
legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
@ -40,7 +40,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
mappings.add(LegalBasis.builder().name("test 1").description("test 1").reason("test 1").build()); mappings.add(LegalBasis.builder().name("test 1").description("test 1").reason("test 1").build());
mappings.add(LegalBasis.builder().name("test 2").description("test 2").reason("test 2").build()); mappings.add(LegalBasis.builder().name("test 2").description("test 2").reason("test 2").build());
legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), mappings); legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), mappings);
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2); assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(3);
var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
@ -72,7 +72,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList()); legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList());
assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty(); assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty();
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(6); assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(7);
} }
} }

View File

@ -24,11 +24,11 @@ public class RulesTest extends AbstractPersistenceServerServiceTest {
rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum")); rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum"));
assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(1); assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(3); //1. beim Anlegen des DossierTemplates; 2. bei provideTestTemplate(), damit es ACTIVE ist
assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum")); assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum"));
rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum dolor sit amet")); rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum dolor sit amet"));
assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(2); assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(4);
assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum dolor sit amet")); assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum dolor sit amet"));

View File

@ -129,7 +129,8 @@ public abstract class AbstractPersistenceServerServiceTest {
when(redactionClient.annotate(Mockito.any())).thenReturn(new AnnotateResponse("document".getBytes())); when(redactionClient.annotate(Mockito.any())).thenReturn(new AnnotateResponse("document".getBytes()));
when(redactionClient.sections(Mockito.any())).thenReturn(new RedactionResult()); when(redactionClient.sections(Mockito.any())).thenReturn(new RedactionResult());
when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, Lists.newArrayList(), null, 0, 0, 0, 0)); when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, 1,
Lists.newArrayList(), null, 0, 0, 0, 0));
} }
@After @After

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.iqser.red</groupId> <groupId>com.iqser.red</groupId>
<artifactId>platform-dependency</artifactId> <artifactId>platform-dependency</artifactId>
<version>1.5.0</version> <version>1.6.0</version>
<relativePath /> <relativePath />
</parent> </parent>
@ -25,7 +25,7 @@
</modules> </modules>
<properties> <properties>
<redaction-service.version>3.43.0</redaction-service.version> <redaction-service.version>3.56.0</redaction-service.version>
<search-service.version>2.18.0</search-service.version> <search-service.version>2.18.0</search-service.version>
<pdftron-redaction-service.version>3.17.0</pdftron-redaction-service.version> <pdftron-redaction-service.version>3.17.0</pdftron-redaction-service.version>
<redaction-report-service.version>3.19.0</redaction-report-service.version> <redaction-report-service.version>3.19.0</redaction-report-service.version>