Merge branch 'RED-9255' into 'master'

RED-9255: return imported dossier template id

Closes RED-9255

See merge request redactmanager/persistence-service!602
This commit is contained in:
Kilian Schüttler 2024-07-16 15:43:48 +02:00
commit a8ead5bea4
5 changed files with 30 additions and 10 deletions

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)

View File

@ -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;
}