From a7c4bf866c0f247f938caf76c1f4660e35e2939d Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Thu, 8 Feb 2024 18:21:36 +0200 Subject: [PATCH] RED-8361 - Returned error status codes should be checked - add some view/access permissions for some endpoints - modify messages so in case dossier is not found to not include the id Signed-off-by: Corina Olariu --- .../impl/controller/EntityLogController.java | 4 ++-- .../impl/controller/ReanalysisController.java | 8 +++++++- .../api/impl/controller/StatusController.java | 1 + .../resource/ComponentLogResource.java | 4 ++-- .../external/resource/DictionaryResource.java | 10 +++++----- .../resource/DossierAttributesResource.java | 6 +++--- .../external/resource/DossierResource.java | 4 ++-- .../resource/FileManagementResource.java | 4 ++-- .../external/resource/HighlightsResource.java | 6 +++--- .../resource/ManualRedactionResource.java | 20 +++++++++---------- .../external/resource/ReanalysisResource.java | 16 +++++++-------- .../api/external/resource/StatusResource.java | 20 +++++++++---------- .../api/external/resource/UploadResource.java | 4 ++-- .../exception/DossierNotFoundException.java | 2 +- .../service/AccessControlService.java | 5 +++-- .../service/DossierManagementService.java | 8 ++++---- .../service/DossierStatsService.java | 2 +- .../v1/processor/service/FileService.java | 6 +++--- .../DossierPersistenceService.java | 6 +++--- 19 files changed, 72 insertions(+), 64 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/EntityLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java index 3756c8b93..c92ef3673 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java @@ -32,7 +32,7 @@ public class EntityLogController implements EntityLogResource { @RequestParam(value = "excludedType", required = false) List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed) { - accessControlService.checkAccessPermissionsToDossier(dossierId); + accessControlService.checkViewPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); return entityLogService.getEntityLog(dossierId, fileId, excludedTypes, includeUnprocessed); } @@ -43,7 +43,7 @@ public class EntityLogController implements EntityLogResource { @PathVariable(FILE_ID) String fileId, @RequestBody FilteredEntityLogRequest filteredEntityLogRequest) { - accessControlService.checkAccessPermissionsToDossier(dossierId); + accessControlService.checkViewPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); return entityLogService.getFilteredEntityLog(dossierId, fileId, filteredEntityLogRequest); } 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/ReanalysisController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java index d343d0a31..f7bf38f13 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReanalysisController.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -62,6 +61,7 @@ public class ReanalysisController implements ReanalysisResource { @PathVariable(FILE_ID) String fileId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); reanalysisService.reanalyzeFiles(dossierId, Sets.newHashSet(fileId), force); auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) @@ -79,6 +79,7 @@ public class ReanalysisController implements ReanalysisResource { @RequestBody List fileIds, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); reanalysisService.reanalyzeFiles(dossierId, new HashSet<>(fileIds), force); auditPersistenceService.audit(AuditRequest.builder() @@ -116,6 +117,7 @@ public class ReanalysisController implements ReanalysisResource { @PathVariable(FILE_ID) String fileId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); validateOCR(dossierId, fileId); reanalysisService.ocrFile(dossierId, fileId, force); auditPersistenceService.audit(AuditRequest.builder() @@ -133,6 +135,7 @@ public class ReanalysisController implements ReanalysisResource { @PreAuthorize("hasAuthority('" + REANALYZE_FILE + "')") public void ocrFiles(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody Set fileIds) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); fileIds.forEach(fileId -> validateOCR(dossierId, fileId)); reanalysisService.ocrFiles(dossierId, fileIds); auditPersistenceService.audit(AuditRequest.builder() @@ -150,6 +153,7 @@ public class ReanalysisController implements ReanalysisResource { @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excludedFromAutomaticAnalysis) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); accessControlService.verifyUserIsReviewer(dossierId, fileId); fileStatusManagementService.toggleAutomaticAnalysis(dossierId, fileId, excludedFromAutomaticAnalysis); @@ -169,6 +173,7 @@ public class ReanalysisController implements ReanalysisResource { @PathVariable(FILE_ID) String fileId, @RequestParam(name = EXCLUDED_STATUS_PARAM, required = false, defaultValue = "false") boolean excluded) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); var status = fileStatusManagementService.getFileStatus(fileId); if (!(status.getAssignee() == null && status.isExcluded())) { // Needed to include documents after 3.0 migration. accessControlService.verifyUserIsReviewer(dossierId, fileId); @@ -273,6 +278,7 @@ public class ReanalysisController implements ReanalysisResource { @RequestParam(value = "dropIndex", required = false, defaultValue = FALSE) boolean dropIndex, @RequestBody List fileIds) { + accessControlService.checkDossierExistenceAndAccessPermissionsToDossier(dossierId); reanalysisService.reindex(dossierId, dropIndex, new HashSet<>(fileIds)); auditPersistenceService.audit(AuditRequest.builder() 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/StatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java index 274c7518e..51673e378 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/StatusController.java @@ -397,6 +397,7 @@ public class StatusController implements StatusResource { @PreAuthorize("hasAuthority('" + SET_STATUS_APPROVED + "')") public void setStatusApprovedForList(String dossierId, List fileIds) { + accessControlService.checkAccessPermissionsToDossier(dossierId); accessControlService.verifyUserIsApprover(dossierId); dossierManagementService.getDossierById(dossierId, false, false); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ComponentLogResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ComponentLogResource.java index 4dc21ce73..d51f9853d 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ComponentLogResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ComponentLogResource.java @@ -45,7 +45,7 @@ public interface ComponentLogResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = COMPONENT_LOG_PATH + OVERRIDE_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Adds overrides for components", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void addOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody ComponentsOverrides componentsOverrides); @@ -61,7 +61,7 @@ public interface ComponentLogResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = COMPONENT_LOG_PATH + OVERRIDE_PATH + "/revert" + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Reverts overrides for components", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void revertOverrides(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody RevertOverrideRequest revertOverrideRequest); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java index 7f9e9837b..1f8ba386b 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java @@ -64,7 +64,7 @@ public interface DictionaryResource { @ResponseStatus(HttpStatus.NO_CONTENT) @PostMapping(value = DICTIONARY_REST_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Add dictionary entries with entry type.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully added the dictionary entries."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully added the dictionary entries."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found."), @ApiResponse(responseCode = "403", description = "Forbidden")}) void addEntry(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List entries, @@ -76,7 +76,7 @@ public interface DictionaryResource { @ResponseStatus(HttpStatus.NO_CONTENT) @PostMapping(value = DICTIONARY_REST_PATH + DELETE + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Delete dictionary entries with entry type.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dictionary entries."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dictionary entries."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found."), @ApiResponse(responseCode = "403", description = "Forbidden")}) void deleteEntries(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List entries, @@ -87,7 +87,7 @@ public interface DictionaryResource { @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping(value = DICTIONARY_REST_PATH + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE + ENTRY_PATH_VARIABLE) @Operation(summary = "Delete dictionary entry with entry type.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dictionary entry."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dictionary entry."), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The " + "entry type is not found."), @ApiResponse(responseCode = "403", description = "Forbidden")}) void deleteEntry(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @PathVariable(ENTRY_PARAMETER_NAME) String entry, @@ -152,7 +152,7 @@ public interface DictionaryResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = DICTIONARY_REST_PATH + UPLOAD + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Operation(summary = "Upload a text-file with 1 entry per line and add each line as an entry to a dictionary for a specific type") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Dictionary upload successful."), @ApiResponse(responseCode = "400", description = "Dictionary could not be uploaded.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Dictionary upload successful."), @ApiResponse(responseCode = "400", description = "Dictionary could not be uploaded."), @ApiResponse(responseCode = "404", description = "The dossier is not found."), @ApiResponse(responseCode = "403", description = "Forbidden")}) void uploadDictionary(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file", required = false) MultipartFile file, @PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @@ -167,7 +167,7 @@ public interface DictionaryResource { */ @ResponseBody @Operation(summary = "Returns file containing the the dictionary entries for given type..") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "The dossier is not found.")}) @GetMapping(value = DICTIONARY_REST_PATH + DOWNLOAD + TYPE_PATH_VARIABLE + DOSSIER_TEMPLATE_PATH_VARIABLE) ResponseEntity downloadDictionary(@PathVariable(TYPE_PARAMETER_NAME) String type, @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java index b0d3ece93..2909d1f7b 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierAttributesResource.java @@ -85,7 +85,7 @@ public interface DossierAttributesResource { @Operation(summary = "Set dossier attributes to an existing dossier", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + SET_PATH + DOSSIER_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierAttributes setDossierAttributes(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody DossierAttributes dossierAttributes); @@ -94,7 +94,7 @@ public interface DossierAttributesResource { @ResponseBody @ResponseStatus(HttpStatus.OK) @Operation(summary = "Add or update a dossier attribute in existing dossier.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + UPDATE_PATH + DOSSIER_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierAttributes addOrUpdateDossierAttribute(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody DossierAttribute dossierAttribute); @@ -111,7 +111,7 @@ public interface DossierAttributesResource { @ResponseBody @ResponseStatus(HttpStatus.NO_CONTENT) @Operation(summary = "Delete a specific dossier attribute.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "NO_CONTENT"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "NO_CONTENT"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @DeleteMapping(value = DOSSIER_ATTRIBUTES_PATH + SET_PATH + DOSSIER_ID_PATH_VARIABLE + DOSSIER_ATTRIBUTE_ID_PATH) void deleteDossierAttribute(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(DOSSIER_ATTRIBUTE_ID) String dossierAttributeId); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierResource.java index da0e5f853..dc53419f0 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DossierResource.java @@ -66,14 +66,14 @@ public interface DossierResource { @ResponseBody @PostMapping(value = DOSSIER_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Creates or updates a dossier.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Successfully saved the dossier."), @ApiResponse(responseCode = "400", description = "Incorrect dossier ID provided or attempted to change dossier-template for a dossier with files."), @ApiResponse(responseCode = "409", description = "Duplicate")}) + @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Successfully saved the dossier."), @ApiResponse(responseCode = "400", description = "Incorrect dossier ID provided or attempted to change dossier-template for a dossier with files."), @ApiResponse(responseCode = "409", description = "Duplicate"), @ApiResponse(responseCode = "403", description = "Forbidden")}) ResponseEntity createDossierOrUpdateDossier(@RequestBody DossierRequest dossier); @ResponseStatus(value = HttpStatus.NO_CONTENT) @DeleteMapping(value = DOSSIER_REST_PATH + DOSSIER_ID_PATH_PARAM) @Operation(summary = "Deletes an existing dossier.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dossier."), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully deleted the dossier."), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void deleteDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileManagementResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileManagementResource.java index be338d82a..61e1078d0 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileManagementResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/FileManagementResource.java @@ -50,7 +50,7 @@ public interface FileManagementResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = DELETE_PATH + DOSSIER_ID_PATH_VARIABLE) @Operation(summary = "Deletes a a list of files for a given dossierId", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void deleteFiles(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds); @@ -77,7 +77,7 @@ public interface FileManagementResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @DeleteMapping(value = HARD_DELETE_PATH + DOSSIER_ID_PATH_VARIABLE) @Operation(summary = "Hard deletes an uploaded file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully hard deleted the file."), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Successfully hard deleted the file."), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void hardDeleteFiles(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(FILE_IDS) Set fileIds); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java index 1a041221c..9e098e2e5 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/HighlightsResource.java @@ -41,21 +41,21 @@ public interface HighlightsResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @Operation(summary = "Converts highlights to imported redactions", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + HIGHLIGHTS_PATH + CONVERT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void convertHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody AnnotationIds annotationIds); @ResponseStatus(value = HttpStatus.NO_CONTENT) @Operation(summary = "Removed highlights from the file", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + HIGHLIGHTS_PATH + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void deleteHighlights(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody AnnotationIds annotationIds); @ResponseStatus(value = HttpStatus.NO_CONTENT) @Operation(summary = "Deletes wrong imported redactions for a file", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = DOSSIERS_PATH + DOSSIER_ID_PATH_VARIABLE + FILES_PATH + FILE_ID_PATH_VARIABLE + IMPORTED_REDACTIONS_PATH + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void deleteImportedRedactions(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody AnnotationIds annotationIds); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java index 19c01a5b9..e2cfd488c 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java @@ -61,7 +61,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/comment/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Adds a comment to a redaction/redaction request", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) CommentResponse addComment(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId, @@ -71,7 +71,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @DeleteMapping(value = MANUAL_REDACTION_REST_PATH + "/comment/undo" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE + COMMENT_ID_PATH_VARIABLE) @Operation(summary = "Undo a comment", description = "Can only be done be the user who added" + " the comment.") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void undoComment(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId, @@ -81,7 +81,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Adds a manual redaction", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List addRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set addRedactionRequest); @@ -90,7 +90,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Removes the redactions list", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List removeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set removeRedactionRequests, @@ -100,7 +100,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Forces the redactions list", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List forceRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set forceRedactionRequests); @@ -109,7 +109,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/legalBasisChange" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Changes the legal basis reasons list", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List legalBasisChangeBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set legalBasisChangeRequests); @@ -118,7 +118,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Recategorizes the list of redaction log entries", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List recategorizeBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set recategorizationRequests, @@ -128,7 +128,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Resizes the redactions list", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) List resizeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set resizeRedactionRequests, @@ -138,7 +138,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = MANUAL_REDACTION_REST_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Returns the manual redactions", description = "If the unprocessed flag is true then only the unprocessed manual redactions are returned. If the flag is false" + "all manual redactions are returned. Default value for the flag is false.") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found")}) ManualRedactions getManualRedactions(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = "unprocessed", required = false, defaultValue = FALSE) boolean unprocessed); @@ -147,7 +147,7 @@ public interface ManualRedactionResource { @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = MANUAL_REDACTION_REST_PATH + "/comments" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Returns the comments for a specific annotation in a specific file", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found")}) AnnotationComments getComments(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId); } diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReanalysisResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReanalysisResource.java index 88e4b1611..62ed4ae56 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReanalysisResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ReanalysisResource.java @@ -42,13 +42,13 @@ public interface ReanalysisResource { @PostMapping(value = REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE) @Operation(summary = "Reanalyze all files of the dossier.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void reanalyzeDossier(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force); @PostMapping(value = REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) @Operation(summary = "Reanalyze a file", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void reanalyzeFile(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force); @@ -56,7 +56,7 @@ public interface ReanalysisResource { @PostMapping(value = REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH) @Operation(summary = "Reanalyze multiple files for a dossier", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void reanalyzeFilesForDossier(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force); @@ -64,13 +64,13 @@ public interface ReanalysisResource { @Operation(summary = "Ocr and reanalyze a dossier", description = "None") @PostMapping(value = OCR_REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE) - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void ocrDossier(@PathVariable(DOSSIER_ID) String dossierId); @Operation(summary = "Ocr and reanalyze a file", description = "None") @PostMapping(value = OCR_REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "409", description = "Conflict"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "409", description = "Conflict"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden"), @ApiResponse(responseCode = "400", description = "Cannot OCR approved file")}) void ocrFile(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = FORCE_PARAM, required = false, defaultValue = FALSE) boolean force); @@ -78,12 +78,12 @@ public interface ReanalysisResource { @Operation(summary = "Ocr and reanalyze multiple files for a dossier", description = "None") @PostMapping(value = OCR_REANALYSIS_REST_PATH + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH) - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void ocrFiles(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody Set fileIds); @Operation(summary = "Exclude or re-include a file to the automatic analysis", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) @PostMapping(value = TOGGLE_AUTOMATIC_ANALYSIS_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -132,7 +132,7 @@ public interface ReanalysisResource { @PostMapping(value = REINDEX_REST_PATH) @Operation(summary = "Reindex a dossier, files of a dossier or all", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void reindex(@RequestParam(value = "dossierId", required = false) String dossierId, @RequestParam(value = "dropIndex", required = false, defaultValue = FALSE) boolean dropIndex, @RequestBody List fileIds); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/StatusResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/StatusResource.java index 8ff0e9bbe..fb5372bc9 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/StatusResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/StatusResource.java @@ -74,14 +74,14 @@ public interface StatusResource { @ResponseBody @GetMapping(value = STATUS_REST_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Gets the status for a file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) FileStatus getFileStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId); @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + ASSIGNEE_REST_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) @Operation(summary = "Assigns a user to a a file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully assigned new owner to dossier."), @ApiResponse(responseCode = "404", description = "Not found")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully assigned new owner to dossier."), @ApiResponse(responseCode = "404", description = "Not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setCurrentFileAssignee(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId); @@ -90,7 +90,7 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/under-review" + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) @Operation(summary = "Sets the status UNDER_REVIEW for a file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusUnderReview(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId); @@ -99,7 +99,7 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/under-approval" + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) @Operation(summary = "Sets the status UNDER_APPROVAL for a file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusUnderApproval(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId); @@ -108,13 +108,13 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/approved" + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE) @Operation(summary = "Sets the status APPROVED for a file.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusApproved(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId); @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/set-assignee" + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Assign a a user for a list of files.", description = "None") + @Operation(summary = "Assigns a user for a list of files.", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully assigned new owner to dossier."), @ApiResponse(responseCode = "404", description = "Not found")}) void setAssigneeForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId, @@ -124,7 +124,7 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/under-review" + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Sets the status UNDER_REVIEW for a list of files.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusUnderReviewForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId); @@ -133,7 +133,7 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/under-approval" + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Sets the status UNDER_APPROVAL for a list of files.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusUnderApprovalForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds, @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId); @@ -142,14 +142,14 @@ public interface StatusResource { @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/approved" + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Sets the status APPROVED for a list of files.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusApprovedForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds); @ResponseStatus(value = HttpStatus.NO_CONTENT) @PostMapping(value = STATUS_REST_PATH + "/new" + DOSSIER_ID_PATH_VARIABLE + BULK_REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Sets the status NEW for a list of files.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK")}) + @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "OK"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void setStatusNewForList(@PathVariable(DOSSIER_ID) String dossierId, @RequestBody List fileIds); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java index ad4f8dbe1..0abe45d7e 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/UploadResource.java @@ -33,7 +33,7 @@ public interface UploadResource { @ResponseStatus(value = HttpStatus.CREATED) @PostMapping(value = UPLOAD_PATH + DOSSIER_ID_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Receives an uploaded file and returns its fileId.", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "File upload succeeded. Return the fileId of the " + "uploaded file.")}) + @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "File upload succeeded. Return the fileId of the " + "uploaded file."), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) FileUploadResult upload(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, @PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = "keepManualRedactions", required = false, defaultValue = "false") boolean keepManualRedactions); @@ -43,7 +43,7 @@ public interface UploadResource { @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = IMPORT_REDACTIONS_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Operation(summary = "Imports redactions from a redacted file to a existing file", description = "None") - @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok"), @ApiResponse(responseCode = "404", description = "Dossier not found"), @ApiResponse(responseCode = "403", description = "Forbidden")}) void importRedactions(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file, @PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/DossierNotFoundException.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/DossierNotFoundException.java index 264a03278..9912e3975 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/DossierNotFoundException.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/DossierNotFoundException.java @@ -2,7 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.exception; public class DossierNotFoundException extends RuntimeException { - public static final String DOSSIER_NOT_FOUND_MESSAGE = "Dossier with DossierId %s not found in the database."; + public static final String DOSSIER_NOT_FOUND_MESSAGE = "Dossier not found."; public DossierNotFoundException(String message) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java index 8f439fdfd..147c8a1a1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/AccessControlService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; @@ -156,7 +157,7 @@ public class AccessControlService { //verifies that user has view permissions to the dossier and responds with 404 if it doesn't public void checkViewPermissionsToDossier(String dossierId) { if (!hasUserViewPermissionsForDossier(dossierId)) { - throw new NotFoundException("Object not found"); + throw new DossierNotFoundException(DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE); } } @@ -181,7 +182,7 @@ public class AccessControlService { public void validateFileResourceExistence(String fileId) { var status = fileStatusManagementService.getFileStatus(fileId); if(status.isSoftOrHardDeleted()) { - throw new NotFoundException("Object not found"); + throw new NotFoundException("File not found"); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java index 99f93df0e..2c1e8f280 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java @@ -55,7 +55,7 @@ public class DossierManagementService { DossierEntity dossier = dossierService.getDossierById(dossierId); if (dossier.getSoftDeletedTime() != null /*|| dossier.getHardDeletedTime() != null*/) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } List fileStatuses = fileStatusService.getDossierStatus(dossierId); @@ -141,13 +141,13 @@ public class DossierManagementService { DossierEntity dossier = dossierService.getDossierById(dossierId); if (dossier.getHardDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } if (dossier.getArchivedTime() != null && !includeArchived) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } if (dossier.getSoftDeletedTime() != null && !includeDeleted) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } return MagicConverter.convert(dossier, Dossier.class, new DossierMapper()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java index 710cc81eb..4d9f76c11 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierStatsService.java @@ -57,7 +57,7 @@ public class DossierStatsService { DossierStats dossierStats = new DossierStats(); if (dossierEntity.getHardDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } dossierStats.setDossierId(dossierId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java index 5930f9d33..9657cf064 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileService.java @@ -101,7 +101,7 @@ public class FileService { var dossier = dossierService.getDossierById(dossierId); if (dossier.getSoftDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } OffsetDateTime softDeleteTime = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); @@ -157,7 +157,7 @@ public class FileService { var dossier = dossierService.getDossierById(dossierId); if (dossier.getSoftDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } for (String fileId : fileIds) { @@ -216,7 +216,7 @@ public class FileService { var dossier = dossierService.getDossierById(dossierId); if (dossier.getSoftDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } for (String fileId : fileIds) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 863fb173c..84ca37a67 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -142,7 +142,7 @@ public class DossierPersistenceService { var dossier = findByDossierId(dossierId); if (dossier == null || dossier.getHardDeletedTime() != null || dossier.getSoftDeletedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } return dossier; @@ -151,7 +151,7 @@ public class DossierPersistenceService { public DossierEntity findByDossierId(String dossierId) { - return dossierRepository.findById(dossierId).orElseThrow(() -> new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId))); + return dossierRepository.findById(dossierId).orElseThrow(() -> new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE)); } @@ -159,7 +159,7 @@ public class DossierPersistenceService { // check whether the dossierId exists and is not deleted var dossier = findByDossierId(dossierId); if (dossier == null || dossier.getSoftDeletedTime() != null || dossier.getHardDeletedTime() != null || dossier.getArchivedTime() != null) { - throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + throw new DossierNotFoundException(DOSSIER_NOT_FOUND_MESSAGE); } return dossier;