RED-2200 - Dossier Template export and import

- fix problems for reports.
This commit is contained in:
devplant 2022-10-06 16:52:08 +03:00
parent 43e36ddff4
commit 132d8c5a0e
2 changed files with 103 additions and 24 deletions

View File

@ -26,6 +26,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.im
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
import com.iqser.red.storage.commons.service.StorageService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -73,6 +74,8 @@ public class DossierTemplateImportService {
private final ReportTemplateService reportTemplateService;
private final DictionaryService dictionaryService;
private final EntryPersistenceService entryPersistenceService;
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
private final StorageService storageService;
private final ObjectMapper objectMapper = new ObjectMapper();
public String importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
@ -155,6 +158,26 @@ public class DossierTemplateImportService {
this.deleteTypes(currentTypes, new HashSet<>());
}
//set report templates
var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId);
List<String> reportsUpdated = new ArrayList<>();
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
request.getReportTemplateUploadRequests().forEach(reportRequest -> {
reportRequest.setDossierTemplateId(dossierTemplateId);
var report = reportTemplateService.uploadTemplate(reportRequest);
reportsUpdated.add(report.getTemplateId());
});
}
// delete the reports that were not in the import
existingReports.forEach(r -> {
String storageId = r.getStorageId();
if (!reportsUpdated.contains(r.getTemplateId())) {
storageService.deleteObject(storageId);
reportTemplatePersistenceService.delete(r.getTemplateId());
}
});
} else {
// creates new dossier template
if (StringUtils.isEmpty(dossierTemplateMeta.getName())) {
@ -222,6 +245,14 @@ public class DossierTemplateImportService {
}
}
//set report templates
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
request.getReportTemplateUploadRequests().forEach(reportRequest -> {
reportRequest.setDossierTemplateId(dossierTemplateId);
reportTemplateService.uploadTemplate(reportRequest);
});
}
}
// set legal basis
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
@ -234,13 +265,6 @@ public class DossierTemplateImportService {
convert(request.getFileAttributesGeneralConfiguration(), FileAttributesGeneralConfigurationEntity.class));
}
//set report templates
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
request.getReportTemplateUploadRequests().forEach(reportRequest -> {
reportRequest.setDossierTemplateId(dossierTemplateId);
reportTemplateService.uploadTemplate(reportRequest);
});
}
return dossierTemplateId;
}

View File

@ -19,6 +19,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.importexport.ExportDownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
@ -35,6 +36,7 @@ import java.time.OffsetDateTime;
import java.util.*;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import static org.assertj.core.api.Assertions.as;
import static org.assertj.core.api.Assertions.assertThat;
public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@ -81,6 +83,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@Autowired
private StorageService storageService;
@Autowired
private LegalBasisClient legalBasisClient;
@Test
public void testDownload() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
@ -361,6 +366,21 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(statuses).isNotEmpty();
assertThat(statuses.get(0).getStatus()).isEqualTo(DownloadStatusValue.READY);
// add legal basis
legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), new LegalBasis("name2", "description2", "reason2"));
var legalBasis = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
assertThat(legalBasis.size()).isEqualTo(2);
//add report
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
.template("some text2222".getBytes(StandardCharsets.UTF_8))
.dossierTemplateId(dossierTemplate.getId())
.fileName("Report Template 2")
.activeByDefault(true)
.multiFileReport(false)
.build());
var reports = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(reports.size()).isEqualTo(2);
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.updateExistingDossierTemplate(true)
@ -374,6 +394,12 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(updatedDossierTemplate.getDateModified()).isNotNull();
assertThat(watermarkClient.getWatermarksForDossierTemplateId(updatedDossierTemplate.getId()).size()).isEqualTo(1);
reports = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(reports.size()).isEqualTo(1);
legalBasis = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
assertThat(legalBasis.size()).isEqualTo(1);
}
@Test
@ -454,6 +480,46 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
}
@Test
@SneakyThrows
public void testImportDossierTemplateUpdateTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
setupDossierTemplate(dossierTemplate);
// prepare an archive
dossierTemplateClient.prepareExportDownload(ExportDownloadRequest.builder()
.userId("1")
.dossierTemplateId(dossierTemplate.getId())
.build());
String storageId = StorageIdUtils.getStorageId("1", dossierTemplate.getId());
dossierTemplateClient.createExportDownload("1", storageId);
var statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.get(0).getStatus()).isEqualTo(DownloadStatusValue.READY);
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
.dossierTemplateId(dossierTemplate.getId())
.updateExistingDossierTemplate(true)
.userId("1")
.archive(storageService.getObject(storageId).getInputStream().readAllBytes())
.build();
assertThat(dossierTemplate.getDateModified()).isNull();
var fileAttributes = fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId());
assertThat(fileAttributes.get(0).isPrimaryAttribute()).isTrue();
var updatedDossierTemplate = dossierTemplateClient.importDossierTemplate(request1);
var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allDossierTemplates.size()).isEqualTo(1);
assertThat(updatedDossierTemplate.getDateModified()).isNotNull();
assertThat(updatedDossierTemplate.getId()).isEqualTo(dossierTemplate.getId());
var typeIdForT = "t:" + dossierTemplate.getId();
var updatedEntries = dictionaryClient.getEntriesForType("t:" + dossierTemplate.getId(), null, DictionaryEntryType.ENTRY);
assertThat(updatedEntries.size()).isEqualTo(2);
fileAttributes = fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId());
assertThat(fileAttributes.get(0).isPrimaryAttribute()).isTrue();
}
private void setupDossierTemplate(DossierTemplate dossierTemplate) {
Type type = Type.builder()
.type("t")
@ -470,9 +536,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
.label("t.getLabel()")
.dossierId(null)
.version(23)
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t.getType()").build()))
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t.getType()").build()))
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t.getType()").build()))
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
.hasDictionary(true)
.systemManaged(false)
.build();
@ -491,9 +557,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
.label("t2.getLabel()")
.dossierId(null)
.version(23)
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t2.getType()").build()))
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t2.getType()").build()))
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t2.getType()").build()))
.entries(List.of(DictionaryEntry.builder().entryId(1011).value("dictEntry1").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2011).value("dictEntry2").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3011).value("dictEntry3").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
.hasDictionary(true)
.systemManaged(false)
.build();
@ -527,17 +593,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
.type(FileAttributeType.TEXT)
.placeholder("placeholderFile")
.build()));
ReportTemplateEntity rte = ReportTemplateEntity.builder()
.templateId("templateId")
.dossierTemplate(convert(dossierTemplate, DossierTemplateEntity.class))
.dossierTemplateId(dossierTemplate.getId())
.dossiers(null)
.activeByDefault(false)
.fileName("rte")
.multiFileReport(false)
.storageId("storageId")
.uploadDate(OffsetDateTime.now())
.build();
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
.template("some text".getBytes(StandardCharsets.UTF_8))
.dossierTemplateId(dossierTemplate.getId())