Pull request #176: RED-2805: Incomplete dossier templates must not be used for dossiers
Merge in RED/persistence-service from RED-2805-ps1 to master * commit '3cdd7fc15ad0b9d547b2720d8ff157075b9e15a6':
This commit is contained in:
commit
fbedd88304
@ -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
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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" +
|
||||
|
||||
@ -4,7 +4,9 @@ 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 lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -25,6 +27,8 @@ public class DossierService {
|
||||
|
||||
private final FileStatusPersistenceService fileStatusPersistenceService;
|
||||
|
||||
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||
|
||||
|
||||
public DossierEntity addDossier(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
|
||||
|
||||
@ -35,6 +39,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 +51,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()
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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"));
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user