From 16e3c562f58edb00d9ecaa51518138b0115b11d0 Mon Sep 17 00:00:00 2001 From: devplant Date: Fri, 16 Sep 2022 14:21:41 +0300 Subject: [PATCH] RED-2200 - Dossier Template export and import - return the dossier template as result of the import --- .../resources/DossierTemplateResource.java | 7 +- .../controller/DossierTemplateController.java | 4 +- .../service/DossierTemplateImportService.java | 46 ++++++----- .../tests/DossierTemplateTest.java | 78 +++++++++++++++++++ 4 files changed, 110 insertions(+), 25 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java index 5ef3c9ca7..7852a5cd0 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java @@ -55,10 +55,11 @@ public interface DossierTemplateResource { @PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/prepare", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) JSONPrimitive prepareExportDownload(@RequestBody ExportDownloadRequest request); - @PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/create", consumes = MediaType.APPLICATION_JSON_VALUE) void createExportDownload(@RequestParam String userId, @RequestParam String storageId); - @PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) - void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request); + @ResponseBody + @PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java index a233c9a35..3be865da2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java @@ -71,8 +71,8 @@ public class DossierTemplateController implements DossierTemplateResource { dossierTemplateExportService.createDownloadArchive(DownloadJob.builder().userId(userId).storageId(storageId).build()); } - public void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { - dossierTemplateImportService.importDossierTemplate(request); + public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { + return dossierTemplateImportService.importDossierTemplate(request); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java index ec0c26c00..5abb5536a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java @@ -8,7 +8,6 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur 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.DossierAttributeConfigEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; 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.exception.BadRequestException; @@ -41,6 +40,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; +import javax.transaction.Transactional; import java.io.*; import java.nio.file.Files; import java.nio.file.attribute.FileAttribute; @@ -77,26 +77,28 @@ public class DossierTemplateImportService { private final DictionaryService dictionaryService; private final ObjectMapper objectMapper = new ObjectMapper(); - public void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { + public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { ImportTemplateResult result = this.handleArchive(request); - if (result == null) { - throw new BadRequestException("Error while reading the archive"); - } - importDossierTemplate(result); + return importDossierTemplate(result); } - public void importDossierTemplate(ImportTemplateResult request) { + @Transactional + public DossierTemplate importDossierTemplate(ImportTemplateResult request) { String dossierTemplateId; var dossierTemplateMeta = request.getDossierTemplate(); - var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId()); - if (dossierTemplate.isPresent() && request.isUpdateExistingTemplate()) { - dossierTemplateId = dossierTemplate.get().getId(); + DossierTemplateEntity existingDossierTemplate = null; + if (request.getDossierTemplateId() != null && request.isUpdateExistingTemplate()) { + var dossierTemplateOptional = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId()); + existingDossierTemplate = dossierTemplateOptional.orElse(null); + } + if (existingDossierTemplate != null) { + dossierTemplateId = existingDossierTemplate.getId(); // override the existing dossier template - updateDossierTemplateMeta(dossierTemplate.get(), dossierTemplateMeta, request.getUserId()); + updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId()); // set rules rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId); - dossierTemplate.get().setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(dossierTemplate.get()).name())); + existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate).name())); // set colors this.setColors(dossierTemplateId, request.getColors()); @@ -202,11 +204,15 @@ public class DossierTemplateImportService { if (CollectionUtils.isNotEmpty(request.getTypes())) { for (var type : request.getTypes()) { type.setDossierTemplateId(dossierTemplateId); - var returnedType = dictionaryService.addType(type); + try { + var returnedType = dictionaryService.addType(type); - this.addEntries(request.getEntries(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.ENTRY); - this.addEntries(request.getFalsePositives(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_POSITIVE); - this.addEntries(request.getFalseRecommendations(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_RECOMMENDATION); + this.addEntries(request.getEntries(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.ENTRY); + this.addEntries(request.getFalsePositives(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_POSITIVE); + this.addEntries(request.getFalseRecommendations(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_RECOMMENDATION); + } catch (ConflictException e) { + log.debug("conflict while creating the types", e); + } } } @@ -242,6 +248,7 @@ public class DossierTemplateImportService { reportTemplateService.uploadTemplate(reportRequest); }); } + return convert(dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId), DossierTemplate.class); } private void addEntries(Map> entries, String typeId, String typeType, DictionaryEntryType dictionaryType) { @@ -427,7 +434,7 @@ public class DossierTemplateImportService { .fileName(report.getFileName()) .activeByDefault(report.isActiveByDefault()) .multiFileReport(report.isMultiFileReport()) - .dossierTemplateId(request.getDossierTemplateId()) + .dossierTemplateId(request.getDossierTemplateId() != null ? request.getDossierTemplateId() : "") .template(reportZe.getValue().toByteArray()) .build()); @@ -444,11 +451,10 @@ public class DossierTemplateImportService { } } } catch (IOException e) { - log.debug("exception: ", e); + throw new BadRequestException(e.getMessage(), e); } catch (BadRequestException e) { - log.debug("exception: ", e); + throw new BadRequestException(e.getMessage(), e); } - return null; } private List readEntries(byte[] bytes ) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index c38361d4f..13713ab44 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -376,6 +376,84 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test + @SneakyThrows + public void testImportDossierTemplateNewTemplateWithNullDossierTemplateId() { + 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); + + // update + CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); + cru.setDossierTemplateId(dossierTemplate.getId()); + BeanUtils.copyProperties(dossierTemplate, cru); + cru.setName("Template 1 Update"); + + var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru); + assertThat(updated.getName()).isEqualTo(cru.getName()); + + ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder() + .dossierTemplateId(null) + .updateExistingDossierTemplate(true) + .userId("1") + .archive(storageService.getObject(storageId).getInputStream().readAllBytes()) + .build(); + + var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1); + var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates(); + assertThat(allDossierTemplates.size()).isEqualTo(1); //should be 2 + + } + + @Test + @SneakyThrows + public void testImportDossierTemplateNewTemplate() { + 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); + + // update + CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); + cru.setDossierTemplateId(dossierTemplate.getId()); + BeanUtils.copyProperties(dossierTemplate, cru); + cru.setName("Template 1 Update"); + + var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru); + assertThat(updated.getName()).isEqualTo(cru.getName()); + + ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder() + .dossierTemplateId("sds") + .updateExistingDossierTemplate(true) + .userId("1") + .archive(storageService.getObject(storageId).getInputStream().readAllBytes()) + .build(); + + var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1); + var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates(); + assertThat(allDossierTemplates.size()).isEqualTo(1); // should be 2 + + } + private void setupDossierTemplate(DossierTemplate dossierTemplate) { Type type = Type.builder() .type("t")