From 27d2208a72736da67f83498c3b13c71775a6e43d Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Mon, 17 Jun 2024 16:21:56 +0200 Subject: [PATCH] RED-9255: give reanalysis endpoint a request model --- .../api/impl/controller/SupportController.java | 6 ++++-- .../v1/api/external/resource/SupportResource.java | 3 ++- .../src/main/resources/api/documine.yaml | 2 +- .../v1/processor/service/ReanalysisService.java | 15 +++++++++++++-- 4 files changed, 20 insertions(+), 6 deletions(-) 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 80bbdc251..bf6dd6756 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,7 @@ 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.external.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; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus; @@ -47,9 +48,10 @@ public class SupportController implements SupportResource { @Override - public void reanalyzeFiles(String dossierTemplateId, boolean repeatStructureAnalysis) { + public void reanalyzeFiles(String dossierTemplateId, ReAnalysisSettings reAnalysisSettings) { - reanalysisService.reanalyzeTemplate(dossierTemplateId, repeatStructureAnalysis); + log.info("Scheduling reanalysis for all files in Dossier Tempalte {} with settings {}", dossierTemplateId, reAnalysisSettings); + reanalysisService.reanalyzeTemplate(dossierTemplateId, reAnalysisSettings); } 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 1a8b4f61f..0a27536bb 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,6 +13,7 @@ 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.external.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.FileStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatusFilter; @@ -54,7 +55,7 @@ public interface SupportResource { @Operation(summary = "Reanalyze all files in dossier template", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void reanalyzeFiles(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @RequestParam(value = FULL_REANALYSIS_PARAM, required = false, defaultValue = FALSE) boolean repeatStructureAnalysis); + @RequestBody ReAnalysisSettings reAnalysisSettings); @PostMapping(value = ERROR_REANALYSIS_REST_PATH) diff --git a/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/documine.yaml b/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/documine.yaml index ab41b3627..765dd7e1f 100644 --- a/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/documine.yaml +++ b/persistence-service-v1/persistence-service-external-api-v2/src/main/resources/api/documine.yaml @@ -594,7 +594,7 @@ paths: - Component Definitions summary: Create new component definitions description: | - Create new component definitions for a given dossier template. The component will have a technical name which is automatically converted to snake case + Create new component definitions for a given dossier template. The component will have a technical name which is automatically converted to snake case that can't be updated after the creation. The rank is used to determine the order in which the components are displayed. The component's rank will automatically be appended at the end based on the current number of components of this dossier template. parameters: diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java index 4e956f861..2edbef718 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisService.java @@ -9,6 +9,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.external.model.ReAnalysisSettings; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.DeleteImportedRedactionsRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; @@ -265,13 +266,23 @@ public class ReanalysisService { } - public void reanalyzeTemplate(String dossierTemplateId, boolean repeatStructureAnalysis) { + public void reanalyzeTemplate(String dossierTemplateId, ReAnalysisSettings reAnalysisSettings) { fileStatusService.getDossierTemplateStatus(dossierTemplateId) .stream() .filter(file -> !file.isSoftOrHardDeleted()) - .forEach(file -> fileStatusService.setStatusFullReprocess(file.getDossierId(), file.getId(), false, repeatStructureAnalysis)); + .filter(file -> isInList(file, reAnalysisSettings)) + .filter(file -> file.getProcessingStatus().equals(ProcessingStatus.ERROR) || !reAnalysisSettings.onlyErrorFiles()) + .peek(file -> log.info("Reanalyzing file {}", file.getId())) + .forEach(file -> fileStatusService.setStatusFullReprocess(file.getDossierId(), file.getId(), false, reAnalysisSettings.repeatStructureAnalysis())); } + + private boolean isInList(FileModel file, ReAnalysisSettings reAnalysisSettings) { + + return (reAnalysisSettings.fileIds().isEmpty() || reAnalysisSettings.fileIds().contains(file.getId())) // + && (reAnalysisSettings.dossierIds().isEmpty() || reAnalysisSettings.dossierIds().contains(file.getDossierId())); + } + }