From 5f0e4b381cce35145cd88818388a3d2a0591a822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Tue, 16 Jul 2024 15:43:48 +0200 Subject: [PATCH] RED-9255: return imported dossier template id --- .../api/impl/controller/SupportController.java | 6 ++++-- .../api/external/resource/SupportResource.java | 11 ++++++----- .../service/FileExchangeImportService.java | 5 +++-- .../tests/FileExchangeImportExportTest.java | 2 +- .../v1/api/shared/model/ImportResponse.java | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/ImportResponse.java diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java index 1dd6424b7..fa348ede1 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java @@ -23,6 +23,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.FileSta import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusMapper; import com.iqser.red.service.persistence.management.v1.processor.service.ReanalysisService; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.FileExchangeExportService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.ImportResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReanalysisSettings; import com.iqser.red.service.persistence.service.v1.api.external.resource.SupportResource; import com.iqser.red.service.persistence.service.v1.api.shared.model.DownloadResponse; @@ -132,7 +134,7 @@ public class SupportController implements SupportResource { @Override - public void importFiles(MultipartFile file) { + public ImportResponse importFiles(MultipartFile file) { byte[] bytes; try { @@ -140,7 +142,7 @@ public class SupportController implements SupportResource { } catch (IOException e) { throw new BadRequestException("File could not be read and is likely corrupted.", e); } - fileExchangeImportService.importFileExchangeArchive(KeycloakSecurity.getUserId(), bytes); + return fileExchangeImportService.importFileExchangeArchive(KeycloakSecurity.getUserId(), bytes); } } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SupportResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SupportResource.java index 84d1e0079..8424afe2b 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SupportResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/SupportResource.java @@ -13,11 +13,12 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.multipart.MultipartFile; -import com.iqser.red.service.persistence.service.v1.api.shared.model.ReanalysisSettings; import com.iqser.red.service.persistence.service.v1.api.shared.model.DownloadResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.FileExchangeExportRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatusFilter; -import com.iqser.red.service.persistence.service.v1.api.shared.model.FileExchangeExportRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.ImportResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.ReanalysisSettings; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Schema; @@ -140,11 +141,11 @@ public interface SupportResource { DownloadResponse exportFiles(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody FileExchangeExportRequest exportRequest); - @ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseBody + @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = FILE_EXCHANGE_REST_PATH + IMPORT, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Imports a file exchange export zip.", description = "Use this endpoint to import a full export of a given Dossier Template including all its configurations, dossiers, and files.") + @Operation(summary = "Imports a file exchange export zip.", description = "Use this endpoint to import a full export of a given Dossier Template including all its configurations, dossiers, and files. Returns the resulting dossierTemplateId.") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - void importFiles(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); + ImportResponse importFiles(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileExchangeImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileExchangeImportService.java index 9340218ce..bd3ff7bd6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileExchangeImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileExchangeImportService.java @@ -11,6 +11,7 @@ import com.iqser.red.service.persistence.management.v1.processor.dataexchange.mo import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.ImportResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; import io.micrometer.observation.ObservationRegistry; @@ -34,7 +35,7 @@ public class FileExchangeImportService { @Observed(name = "FileExchangeImportService", contextualName = "import-files") - public String importFileExchangeArchive(String userId, byte[] archive) { + public ImportResponse importFileExchangeArchive(String userId, byte[] archive) { long start = System.currentTimeMillis(); log.info("Starting file import for user {}", userId); @@ -49,7 +50,7 @@ public class FileExchangeImportService { enrichObservation(userId, archive, fileExchangeImportModel); - return dossierTemplateId; + return new ImportResponse(dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java index 91b512eac..812bb0a10 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java @@ -91,7 +91,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi Path fileExchangeArchive = new ClassPathResource("files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip").getFile().toPath(); - String importedDossierTemplateId = fileExchangeImportService.importFileExchangeArchive(USER_ID, Files.readAllBytes(fileExchangeArchive)); + String importedDossierTemplateId = fileExchangeImportService.importFileExchangeArchive(USER_ID, Files.readAllBytes(fileExchangeArchive)).getDossierTemplateId(); fileExchangeExportService.createDownloadArchive(ExportDownloadMessage.builder() .dossierTemplateId(importedDossierTemplateId) diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/ImportResponse.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/ImportResponse.java new file mode 100644 index 000000000..0df2cef5c --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/ImportResponse.java @@ -0,0 +1,16 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ImportResponse { + + String dossierTemplateId; + +}