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:
commit
b9df862ebf
@ -29,5 +29,5 @@ public class DossierTemplate {
|
||||
private OffsetDateTime validTo;
|
||||
private boolean deleted;
|
||||
private Set<DownloadFileType> downloadFileTypes = new HashSet<>();
|
||||
|
||||
private DossierTemplateStatus dossierTemplateStatus;
|
||||
}
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate;
|
||||
|
||||
public enum DossierTemplateStatus {
|
||||
INCOMPLETE, INACTIVE, ACTIVE
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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.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.DossierChange;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
@ -26,12 +27,12 @@ public interface DossierResource {
|
||||
|
||||
String INCLUDE_DELETED_PARAM = "includeDeleted";
|
||||
|
||||
String CHANGES_PATH = "/has-changes";
|
||||
String CHANGES_PATH = "/changes";
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@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)
|
||||
Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest);
|
||||
|
||||
@ -1,20 +1,30 @@
|
||||
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.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
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
|
||||
@Entity
|
||||
@ -73,4 +83,8 @@ public class DossierTemplateEntity {
|
||||
@JsonIgnore
|
||||
@OneToMany(mappedBy = "dossierTemplate")
|
||||
private List<FileAttributeConfigEntity> fileAttributeConfigs = new ArrayList<>();
|
||||
|
||||
@Transient
|
||||
private DossierTemplateStatus dossierTemplateStatus;
|
||||
|
||||
}
|
||||
|
||||
@ -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.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.DossierChange;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -16,7 +17,9 @@ import org.springframework.stereotype.Service;
|
||||
import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
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())));
|
||||
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);
|
||||
});
|
||||
|
||||
@ -110,7 +117,23 @@ public class DossierPersistenceService {
|
||||
dossierRepository.markDossierAsDeleted(dossierId, DossierStatus.DELETED, softDeletedTime, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
public boolean hasChangesSince(OffsetDateTime since) {
|
||||
return dossierRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS)) || fileRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS));
|
||||
public Set<DossierChange> hasChangesSince(OffsetDateTime since) {
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.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.DossierTemplate;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
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.";
|
||||
|
||||
private final DossierTemplateRepository dossierTemplateRepository;
|
||||
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
||||
private final RulesPersistenceService rulesPersistenceService;
|
||||
|
||||
|
||||
@Transactional
|
||||
@ -41,6 +46,7 @@ public class DossierTemplatePersistenceService {
|
||||
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
|
||||
dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser());
|
||||
dossierTemplate.get().setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate.get()));
|
||||
return dossierTemplate.get();
|
||||
} else {
|
||||
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
|
||||
@ -53,11 +59,37 @@ public class DossierTemplatePersistenceService {
|
||||
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate);
|
||||
dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
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){
|
||||
getAllDossierTemplates().forEach(existing -> {
|
||||
if(existing.getName().equals(templateName)){
|
||||
@ -67,11 +99,18 @@ public class DossierTemplatePersistenceService {
|
||||
}
|
||||
|
||||
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) {
|
||||
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
|
||||
|
||||
@ -53,14 +53,14 @@ public class FileStatusPersistenceService {
|
||||
@Transactional
|
||||
public void updateWorkflowStatus(String fileId, int numberOfPages, long dictionaryVersion, long rulesVersion,
|
||||
long legalBasisVersion, long duration, long dossierDictionaryVersion,
|
||||
int analysisVersion) {
|
||||
int analysisVersion, int analysisNumber) {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateWorkflowStatus(fileId, numberOfPages, ProcessingStatus.PROCESSED,
|
||||
dictionaryVersion, rulesVersion, legalBasisVersion, duration, dossierDictionaryVersion,
|
||||
analysisVersion, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), analysisNumber);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ import javax.transaction.Transactional;
|
||||
@SuppressWarnings("PMD.TooManyStaticImports")
|
||||
public class RulesPersistenceService {
|
||||
|
||||
private final static String DEFAULT_RULES = "" +
|
||||
public final static String DEFAULT_RULES = "" +
|
||||
"package drools\n" +
|
||||
"\n" +
|
||||
"import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" +
|
||||
|
||||
@ -1,15 +1,20 @@
|
||||
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.service.v1.api.model.dossiertemplate.dossier.DossierChange;
|
||||
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.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
public interface DossierRepository extends JpaRepository<DossierEntity, String> {
|
||||
|
||||
@Query("select d.id from DossierEntity d where d.lastUpdated > :since")
|
||||
List<String> findDossierChangeByLastUpdatedIsAfter(OffsetDateTime since);
|
||||
|
||||
@Modifying
|
||||
@Query("update DossierEntity d set d.status = :dossierStatus, d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated," +
|
||||
" 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")
|
||||
void markDossierAsDeleted(String dossierId, DossierStatus dossierStatus, OffsetDateTime softDeletedTime, OffsetDateTime lastUpdated);
|
||||
|
||||
boolean existsByLastUpdatedIsAfter(OffsetDateTime since);
|
||||
|
||||
}
|
||||
|
||||
@ -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.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.WorkflowStatus;
|
||||
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 existsByLastUpdatedIsAfter(OffsetDateTime since);
|
||||
|
||||
List<FileEntity> findByDossierId(String dossierId);
|
||||
|
||||
@Modifying
|
||||
@ -39,12 +38,12 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
@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 = f.numberOfAnalyses + 1, f.lastUpdated = :lastUpdated, " +
|
||||
"f.analysisVersion = :analysisVersion, f.numberOfAnalyses = :analysisNumber, f.lastUpdated = :lastUpdated, " +
|
||||
"f.lastProcessed = :lastProcessed " +
|
||||
"where f.id = :fileId")
|
||||
void updateWorkflowStatus(String fileId, int numberOfPages, ProcessingStatus processingStatus, long dictionaryVersion,
|
||||
long rulesVersion, long legalBasisVersion, long analysisDuration, long dossierDictionaryVersion,
|
||||
int analysisVersion, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed);
|
||||
int analysisVersion, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed, int analysisNumber);
|
||||
|
||||
@Modifying
|
||||
@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, " +
|
||||
"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.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.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " +
|
||||
"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")
|
||||
int countSoftDeletedFiles(String dossierId);
|
||||
|
||||
@Query("select distinct f.dossierId from FileEntity f where f.lastUpdated > :since")
|
||||
List<String> findDossierChangeByLastUpdatedIsAfter(OffsetDateTime since);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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.exception.DossierNotFoundException;
|
||||
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.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.model.dossiertemplate.dossier.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource;
|
||||
import feign.Param;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -39,9 +36,9 @@ public class DossierController implements DossierResource {
|
||||
|
||||
|
||||
@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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,127 +1,42 @@
|
||||
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.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
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.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.migration.model.*;
|
||||
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.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
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.annotations.*;
|
||||
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.DictionaryEntryEntity;
|
||||
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.configuration.*;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.*;
|
||||
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.exception.BadRequestException;
|
||||
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.repository.AuditRepository;
|
||||
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.management.v1.processor.service.persistence.repository.*;
|
||||
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.ProcessingStatus;
|
||||
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.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.service.redaction.v1.model.*;
|
||||
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
||||
import com.iqser.red.storage.commons.service.StorageService;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
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")
|
||||
@Slf4j
|
||||
@ -264,41 +179,42 @@ public class MigrationService {
|
||||
|
||||
List<FileEntity> files = fileRepository.findAll();
|
||||
files.stream().filter(file -> file.getHardDeletedTime() == null).forEach(file -> {
|
||||
migrateRedactionLog(file.getDossierId(), file.getId(), file.getLastProcessed());
|
||||
migrateRedactionLog(file);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
private void migrateRedactionLog(String dossierId, String fileId, OffsetDateTime lastProcessed) {
|
||||
private void migrateRedactionLog(FileEntity file) {
|
||||
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
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()
|
||||
.map(r -> convertRedactionLogEntry(r, fileId, lastProcessed))
|
||||
.map(r -> convertRedactionLogEntry(r, file.getId(), file.getLastProcessed(),file.getNumberOfAnalyses()))
|
||||
.collect(toList()), oldRedactionLog.getLegalBasis(), oldRedactionLog.getDictionaryVersion(), oldRedactionLog
|
||||
.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));
|
||||
storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.REDACTION_LOG), objectMapper
|
||||
storageService.storeObject(StorageIdUtils.getStorageId(file.getDossierId(), file.getId(), FileType.REDACTION_LOG), objectMapper
|
||||
.writeValueAsBytes(redactionLog));
|
||||
} 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,
|
||||
OffsetDateTime lastProcessed) {
|
||||
OffsetDateTime lastProcessed, int analysisNumber) {
|
||||
|
||||
return RedactionLogEntry.builder()
|
||||
.id(oldRedactionLogEntry.getId())
|
||||
@ -335,7 +251,7 @@ public class MigrationService {
|
||||
.excluded(oldRedactionLogEntry.isExcluded())
|
||||
.recategorizationType(oldRedactionLogEntry.getRecategorizationType())
|
||||
.legalBasisChangeValue(oldRedactionLogEntry.getLegalBasisChangeValue())
|
||||
.changes(List.of(new Change(ChangeType.ADDED, lastProcessed)))
|
||||
.changes(List.of(new Change(analysisNumber, ChangeType.ADDED, lastProcessed)))
|
||||
.engines(getEngine(oldRedactionLogEntry))
|
||||
.reference(null)
|
||||
.rectangle(oldRedactionLogEntry.isRectangle())
|
||||
@ -346,7 +262,7 @@ public class MigrationService {
|
||||
private Set<Engine> getEngine(MigrationRedactionLogEntry oldRedactionLogEntry) {
|
||||
|
||||
if (oldRedactionLogEntry.isManual()) {
|
||||
return new HashSet<Engine>();
|
||||
return new HashSet<>();
|
||||
}
|
||||
if (oldRedactionLogEntry.isDictionaryEntry() || oldRedactionLogEntry.isDossierDictionaryEntry()) {
|
||||
return Set.of(Engine.DICTIONARY);
|
||||
|
||||
@ -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.ConflictException;
|
||||
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.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.DossierChange;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Provides the internal interface between dossier request and the actual persistence.
|
||||
@ -25,6 +29,8 @@ public class DossierService {
|
||||
|
||||
private final FileStatusPersistenceService fileStatusPersistenceService;
|
||||
|
||||
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||
|
||||
|
||||
public DossierEntity addDossier(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
|
||||
|
||||
@ -35,6 +41,10 @@ public class DossierService {
|
||||
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);
|
||||
|
||||
@ -43,7 +53,13 @@ public class DossierService {
|
||||
|
||||
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);
|
||||
|
||||
if (dossier.getDossierName()
|
||||
.equals(dossierRequest.getDossierName()) || dossierPersistenceService.findAllDossiers()
|
||||
.stream()
|
||||
@ -94,7 +110,7 @@ public class DossierService {
|
||||
return dossierPersistenceService.findAllDossiers();
|
||||
}
|
||||
|
||||
public boolean hasChangesSince(OffsetDateTime since) {
|
||||
public Set<DossierChange> changesSince(OffsetDateTime since) {
|
||||
return dossierPersistenceService.hasChangesSince(since);
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,7 +98,11 @@ public class FileStatusService {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -268,6 +272,7 @@ public class FileStatusService {
|
||||
var analyseRequest = AnalyzeRequest.builder()
|
||||
.messageType(reanalyse ? MessageType.REANALYSE : MessageType.FULL_ANALYSE)
|
||||
.dossierId(dossierId)
|
||||
.analysisNumber(fileStatus.getNumberOfAnalyses()+1)
|
||||
.sectionsToReanalyse(sectionsToReanalyse)
|
||||
.fileId(fileId)
|
||||
.manualRedactions(manualRedactionProviderService.getManualRedactions(fileId))
|
||||
|
||||
@ -2,14 +2,20 @@ package com.iqser.red.service.peristence.v1.server.integration.service;
|
||||
|
||||
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.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.DossierTemplate;
|
||||
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.stereotype.Service;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
|
||||
@ -19,6 +25,12 @@ public class DossierTemplateTesterAndProvider {
|
||||
@Autowired
|
||||
private DossierTemplateClient dossierTemplateClient;
|
||||
|
||||
@Autowired
|
||||
private RulesClient rulesClient;
|
||||
|
||||
@Autowired
|
||||
private LegalBasisClient legalBasisClient;
|
||||
|
||||
public DossierTemplate provideTestTemplate() {
|
||||
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
|
||||
cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL));
|
||||
@ -26,7 +38,7 @@ public class DossierTemplateTesterAndProvider {
|
||||
cru.setDescription("Template 1");
|
||||
cru.setRequestingUser("1");
|
||||
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);
|
||||
|
||||
@ -36,6 +48,11 @@ public class DossierTemplateTesterAndProvider {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -58,7 +58,8 @@ public class FileTesterAndProvider {
|
||||
|
||||
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)));
|
||||
fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.SECTION_GRID, objectMapper.writeValueAsBytes(new SectionGrid()));
|
||||
|
||||
|
||||
@ -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.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.DossierTesterAndProvider;
|
||||
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.DossierTemplateStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
|
||||
|
||||
import feign.FeignException;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@ -53,11 +60,10 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
assertThat(loadedTemplate).isEqualTo(updated);
|
||||
|
||||
dossierTemplateClient.getAllDossierTemplates().forEach(template -> dossierTemplateClient.deleteDossierTemplate(template.getId(), "1"));
|
||||
|
||||
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
|
||||
assertThat(loadedTemplate.getDossierTemplateStatus()).isEqualTo(DossierTemplateStatus.ACTIVE);
|
||||
|
||||
updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
|
||||
|
||||
assertThat(updated.getName()).isEqualTo("Template 1 Update");
|
||||
|
||||
var testDossier = dossierTesterAndProvider.provideTestDossier(updated);
|
||||
|
||||
@ -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.assertThatThrownBy;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -35,12 +37,17 @@ public class DossierTest extends AbstractPersistenceServerServiceTest {
|
||||
@Test
|
||||
public void testDossier() {
|
||||
|
||||
var start = OffsetDateTime.now();
|
||||
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
|
||||
var allDossiers = dossierClient.getAllDossiers();
|
||||
assertThat(allDossiers.size()).isEqualTo(1);
|
||||
assertThat(allDossiers.get(0)).isEqualTo(dossier);
|
||||
|
||||
var changes = dossierClient.changesSince(JSONPrimitive.of(start));
|
||||
assertThat(changes).isNotEmpty();
|
||||
|
||||
// update
|
||||
CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest();
|
||||
cru.setDossierTemplateId(dossier.getId());
|
||||
|
||||
@ -1,7 +1,18 @@
|
||||
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.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.ManualRedactionClient;
|
||||
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.TypeProvider;
|
||||
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.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.WorkflowStatus;
|
||||
|
||||
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 {
|
||||
|
||||
@ -94,6 +102,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
@Test
|
||||
public void testFile() {
|
||||
var start = OffsetDateTime.now();
|
||||
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
// update
|
||||
@ -104,6 +113,11 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
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);
|
||||
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
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 {
|
||||
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 2").description("test 2").reason("test 2").build());
|
||||
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());
|
||||
@ -72,7 +72,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList());
|
||||
assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty();
|
||||
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(6);
|
||||
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(7);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,11 +24,11 @@ public class RulesTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
|
||||
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"));
|
||||
|
||||
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"));
|
||||
|
||||
|
||||
|
||||
@ -129,7 +129,8 @@ public abstract class AbstractPersistenceServerServiceTest {
|
||||
|
||||
when(redactionClient.annotate(Mockito.any())).thenReturn(new AnnotateResponse("document".getBytes()));
|
||||
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
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.iqser.red</groupId>
|
||||
<artifactId>platform-dependency</artifactId>
|
||||
<version>1.5.0</version>
|
||||
<version>1.6.0</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
</modules>
|
||||
|
||||
<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>
|
||||
<pdftron-redaction-service.version>3.17.0</pdftron-redaction-service.version>
|
||||
<redaction-report-service.version>3.19.0</redaction-report-service.version>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user