From cecd7fb6d53424e209d8b60d79b2844f21ad73cf Mon Sep 17 00:00:00 2001 From: devplant Date: Fri, 25 Feb 2022 14:44:40 +0200 Subject: [PATCH] RED-3382 - Manual redaction controller needs to support bulk requests - refactoring the apis to support bulk operations (without addRedaction and addComment) - update junit tests --- .../annotations/UpdateRedactionRequest.java | 17 + .../resources/ManualRedactionResource.java | 85 ++- .../controller/ManualRedactionController.java | 91 ++- .../service/ManualRedactionService.java | 558 +++++++++--------- .../v1/server/integration/tests/FileTest.java | 23 +- .../tests/ManualRedactionTest.java | 180 ++++-- 6 files changed, 498 insertions(+), 456 deletions(-) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateRedactionRequest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateRedactionRequest.java new file mode 100644 index 000000000..329abfe46 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateRedactionRequest.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UpdateRedactionRequest { + private List annotationIds; + private AnnotationStatus annotationStatus; +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java index 2e41a24fe..f6b8f3bd5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java @@ -2,11 +2,12 @@ package com.iqser.red.service.persistence.service.v1.api.resources; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.*; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.util.List; + @ResponseStatus(value = HttpStatus.OK) public interface ManualRedactionResource { @@ -24,6 +25,8 @@ public interface ManualRedactionResource { String COMMENT_ID = "commentId"; String COMMENT_ID_PATH_VARIABLE = "/{" + COMMENT_ID + "}"; + String DELETE_PATH = "/delete"; + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) ManualAddResponse addAddRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -31,27 +34,27 @@ public interface ManualRedactionResource { @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ManualAddResponse addRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestBody RemoveRedactionRequest removeRedactionRequest); + List addRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, + @PathVariable(FILE_ID) String fileId, + @RequestBody List removeRedactionRequest); @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ManualAddResponse addForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, + List addForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ForceRedactionRequest forceRedactionRequest); + @RequestBody List forceRedactionRequests); @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/legalBasis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ManualAddResponse addLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, + List addLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody LegalBasisChangeRequest legalBasisChangeRequest); + @RequestBody List legalBasisChangeRequests); @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ManualAddResponse addImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, + List addImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ImageRecategorizationRequest imageRecategorizationRequest); + @RequestBody List imageRecategorizationRequests); @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/comment" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -60,9 +63,9 @@ public interface ManualRedactionResource { @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - ManualAddResponse addResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, + List addResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ResizeRedactionRequest resizeRedactionRequest); + @RequestBody List resizeRedactionRequests); @GetMapping(value = MANUAL_REDACTION_REST_PATH + "/add" + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -99,74 +102,68 @@ public interface ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteAddRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/legalBasis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/legalBasis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/comment" + FILE_ID_PATH_VARIABLE + COMMENT_ID_PATH_VARIABLE) - void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId); + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/comment" + FILE_ID_PATH_VARIABLE) + void deleteComment(@PathVariable(FILE_ID) String fileId, @RequestBody List commentIds); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + @PostMapping(MANUAL_REDACTION_REST_PATH + DELETE_PATH + "/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) void deleteResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId); + @RequestBody List annotationIds); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateAddRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/remove" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateRemoveRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/force" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateForceRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/legalBasis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/legalBasis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateLegalBasisChangeStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateImageRecategorizationStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); - @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void updateResizeRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest); + @RequestBody UpdateRedactionRequest updateStatusRequest); @GetMapping(value = MANUAL_REDACTION_REST_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ManualRedactionController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ManualRedactionController.java index a9626baed..7ed73ea1c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ManualRedactionController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ManualRedactionController.java @@ -6,13 +6,14 @@ import com.iqser.red.service.peristence.v1.server.utils.ManualRedactionMapper; import com.iqser.red.service.peristence.v1.server.utils.ManualResizeRedactionMapper; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.*; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.resources.ManualRedactionResource; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; @RestController @@ -32,38 +33,38 @@ public class ManualRedactionController implements ManualRedactionResource { @Override - public ManualAddResponse addRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, + public List addRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody RemoveRedactionRequest removeRedactionRequest) { + @RequestBody List removeRedactionRequests) { - return manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequest); + return manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequests); } @Override - public ManualAddResponse addForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, + public List addForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ForceRedactionRequest forceRedactionRequest) { + @RequestBody List forceRedactionRequests) { - return manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequest); + return manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequests); } @Override - public ManualAddResponse addLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, + public List addLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody LegalBasisChangeRequest legalBasisChangeRequest) { + @RequestBody List legalBasisChangeRequests) { - return manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequest); + return manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests); } @Override - public ManualAddResponse addImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, + public List addImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ImageRecategorizationRequest imageRecategorizationRequest) { + @RequestBody List imageRecategorizationRequests) { - return manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequest); + return manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequests); } @@ -77,11 +78,11 @@ public class ManualRedactionController implements ManualRedactionResource { @Override - public ManualAddResponse addResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, + public List addResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody ResizeRedactionRequest resizeRedactionRequest) { + @RequestBody List resizeRedactionRequests) { - return manualRedactionService.addResizeRedaction(dossierId, fileId, resizeRedactionRequest); + return manualRedactionService.addResizeRedaction(dossierId, fileId, resizeRedactionRequests); } @@ -139,116 +140,110 @@ public class ManualRedactionController implements ManualRedactionResource { @Override public void deleteAddRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteAddRedaction(dossierId, fileId, annotationId); + manualRedactionService.deleteAddRedaction(dossierId, fileId, annotationIds); } @Override public void deleteRemoveRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteRemoveRedaction(dossierId, fileId, annotationId); + manualRedactionService.deleteRemoveRedaction(dossierId, fileId, annotationIds); } @Override public void deleteForceRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteForceRedaction(dossierId, fileId, annotationId); + manualRedactionService.deleteForceRedaction(dossierId, fileId, annotationIds); } @Override public void deleteLegalBasisChange(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteLegalBasisChange(dossierId, fileId, annotationId); + manualRedactionService.deleteLegalBasisChange(dossierId, fileId, annotationIds); } @Override public void deleteImageRecategorization(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteImageRecategorization(dossierId, fileId, annotationId); + manualRedactionService.deleteImageRecategorization(dossierId, fileId, annotationIds); } @Override - public void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId) { + public void deleteComment(@PathVariable(FILE_ID) String fileId, @RequestBody List commentIds) { - manualRedactionService.deleteComment(fileId, commentId); + manualRedactionService.deleteComment(fileId, commentIds); } @Override public void deleteResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId) { + @RequestBody List annotationIds) { - manualRedactionService.deleteResizeRedaction(dossierId, fileId, annotationId); + manualRedactionService.deleteResizeRedaction(dossierId, fileId, annotationIds); } @Override public void updateAddRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateAddRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateAddRedactionStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } @Override public void updateRemoveRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateRemoveRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateRemoveRedactionStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } @Override public void updateForceRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateForceRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateForceRedactionStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } public void updateLegalBasisChangeStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateLegalBasisChangeStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateLegalBasisChangeStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } @Override public void updateImageRecategorizationStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateImageRecategorizationStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateImageRecategorizationStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } @Override public void updateResizeRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody JSONPrimitive updateStatusRequest) { + @RequestBody UpdateRedactionRequest updateStatusRequest) { - manualRedactionService.updateResizeRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + manualRedactionService.updateResizeRedactionStatus(dossierId, fileId, updateStatusRequest.getAnnotationIds(), updateStatusRequest.getAnnotationStatus()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java index 7370f73af..92e7438d5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java @@ -102,11 +102,9 @@ public class ManualRedactionService { if (addRedactionRequest.isAddToDictionary() || addRedactionRequest.isAddToDossierDictionary()) { try { - if (!addRedactionRequest.isForceAddToDictionary() && stopwordService.isStopword(addRedactionRequest.getValue())) { throw new ConflictException("The entry you are trying to add is a stopword"); } - dictionaryController.getDictionaryForType(addRedactionRequest.getTypeId()); } catch (NotFoundException e) { throw new BadRequestException("Invalid type: " + addRedactionRequest.getTypeId()); @@ -114,146 +112,139 @@ public class ManualRedactionService { } String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString(); - OffsetDateTime now = OffsetDateTime.now(); - addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest); Long commentId = null; if (addRedactionRequest.getComment() != null) { - commentId = addComment(fileId, annotationId, addRedactionRequest.getComment(), addRedactionRequest.getUser()).getId(); } - handleAddToDictionary(fileId, annotationId, addRedactionRequest.getTypeId(), addRedactionRequest.getValue(), addRedactionRequest.getStatus(), addRedactionRequest.isAddToDictionary(), addRedactionRequest.isAddToDossierDictionary(), false, dossierId); + var actionPerformed = handleAddToDictionary(fileId, annotationId, addRedactionRequest.getTypeId(), addRedactionRequest.getValue(), addRedactionRequest.getStatus(), addRedactionRequest.isAddToDictionary(), addRedactionRequest.isAddToDossierDictionary(), false, dossierId); - if (addRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); + if(actionPerformed){ + // in case of add to dict, there is no need to process surrounding text + reprocess(dossierId,fileId); + }else{ + if (!addRedactionRequest.isAddToDictionary() && !addRedactionRequest.isAddToDossierDictionary() && !addRedactionRequest.isRectangle()) { + var loaded = convert(getAddRedaction(fileId, annotationId), ManualRedactionEntry.class, new ManualRedactionMapper()); + ManualRedactions manualRedactions = ManualRedactions.builder().entriesToAdd(Set.of(loaded)).build(); + addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions); + } } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - if (!addRedactionRequest.isAddToDictionary() && !addRedactionRequest.isAddToDossierDictionary() && !addRedactionRequest.isRectangle()) { - var loaded = convert(getAddRedaction(fileId, annotationId), ManualRedactionEntry.class, new ManualRedactionMapper()); - ManualRedactions manualRedactions = ManualRedactions.builder().entriesToAdd(Set.of(loaded)).build(); - addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions); - } - return ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build(); } - public ManualAddResponse addRemoveRedaction(String dossierId, String fileId, RemoveRedactionRequest removeRedactionRequest) { + public List addRemoveRedaction(String dossierId, String fileId, List removeRedactionRequests) { - dossierPersistenceService.getAndValidateDossier(dossierId); + var response = new ArrayList(); + var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); + var actionPerformed = false; + var redactionLog = fileManagementStorageService.getRedactionLog(dossier.getId(), fileId); - OffsetDateTime now = OffsetDateTime.now(); - removeRedactionPersistenceService.insert(fileId, removeRedactionRequest); + for(var removeRedactionRequest : removeRedactionRequests ){ - Long commentId = null; - if (removeRedactionRequest.getComment() != null) { + removeRedactionPersistenceService.insert(fileId, removeRedactionRequest); - commentId = addComment(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getComment(), removeRedactionRequest.getUser()).getId(); + Long commentId = null; + if (removeRedactionRequest.getComment() != null) { + commentId = addComment(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getComment(), removeRedactionRequest.getUser()).getId(); + } + + actionPerformed = actionPerformed || handleRemoveFromDictionary(redactionLog, dossier, fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), removeRedactionRequest.isRemoveFromDictionary(), false); + + response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build()); } - handleRemoveFromDictionary(dossierId, fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), removeRedactionRequest.isRemoveFromDictionary(), false); - - if (removeRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); - } - - if (!removeRedactionRequest.isRemoveFromDictionary()) { - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - } - - if (removeRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED)) { - reprocess(dossierId, fileId); - } - - return ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build(); - } - - - public ManualAddResponse addForceRedaction(String dossierId, String fileId, ForceRedactionRequest forceRedactionRequest) { - - dossierPersistenceService.getAndValidateDossier(dossierId); - - OffsetDateTime now = OffsetDateTime.now(); - forceRedactionPersistenceService.insert(fileId, forceRedactionRequest); - - Long commentId = null; - if (forceRedactionRequest.getComment() != null) { - - commentId = addComment(fileId, forceRedactionRequest.getAnnotationId(), forceRedactionRequest.getComment(), forceRedactionRequest.getUser()).getId(); - } - - if (forceRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); - } - - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - - if (forceRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED)) { - reprocess(dossierId, fileId); - } - - return ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId).build(); - } - - - public ManualAddResponse addLegalBasisChange(String dossierId, String fileId, LegalBasisChangeRequest legalBasisChangeRequest) { - - dossierPersistenceService.getAndValidateDossier(dossierId); - - OffsetDateTime now = OffsetDateTime.now(); - legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest); - - Long commentId = null; - if (legalBasisChangeRequest.getComment() != null) { - - commentId = addComment(fileId, legalBasisChangeRequest.getAnnotationId(), legalBasisChangeRequest.getComment(), legalBasisChangeRequest.getUser()).getId(); - } - - if (legalBasisChangeRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); - } - - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - - return ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId).build(); - } - - - public ManualAddResponse addImageRecategorization(String dossierId, String fileId, ImageRecategorizationRequest imageRecategorizationRequest) { - - dossierPersistenceService.getAndValidateDossier(dossierId); - - OffsetDateTime now = OffsetDateTime.now(); - recategorizationPersistenceService.insert(fileId, imageRecategorizationRequest); - - Long commentId = null; - if (imageRecategorizationRequest.getComment() != null) { - - commentId = addComment(fileId, imageRecategorizationRequest.getAnnotationId(), imageRecategorizationRequest.getComment(), imageRecategorizationRequest.getUser()).getId(); - } - - if (imageRecategorizationRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); + if(actionPerformed){ reprocess(dossierId, fileId); } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return ManualAddResponse.builder().annotationId(imageRecategorizationRequest.getAnnotationId()).commentId(commentId).build(); + return response; + } + + + public List addForceRedaction(String dossierId, String fileId, List forceRedactionRequests) { + + var response = new ArrayList(); + dossierPersistenceService.getAndValidateDossier(dossierId); + var actionPerformed = false; + + for(var forceRedactionRequest : forceRedactionRequests ) { + forceRedactionPersistenceService.insert(fileId, forceRedactionRequest); + + Long commentId = null; + if (forceRedactionRequest.getComment() != null) { + + commentId = addComment(fileId, forceRedactionRequest.getAnnotationId(), forceRedactionRequest.getComment(), forceRedactionRequest.getUser()).getId(); + } + actionPerformed = actionPerformed || AnnotationStatus.APPROVED.equals(forceRedactionRequest.getStatus()); + response.add(ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId).build()); + } + + if (actionPerformed) { + reprocess(dossierId, fileId); + } + + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + + return response; + } + + + public List addLegalBasisChange(String dossierId, String fileId, List legalBasisChangeRequests) { + + var response = new ArrayList(); + dossierPersistenceService.getAndValidateDossier(dossierId); + + for(var legalBasisChangeRequest : legalBasisChangeRequests) { + legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest); + + Long commentId = null; + if (legalBasisChangeRequest.getComment() != null) { + + commentId = addComment(fileId, legalBasisChangeRequest.getAnnotationId(), legalBasisChangeRequest.getComment(), legalBasisChangeRequest.getUser()).getId(); + } + + response.add(ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId).build()); + } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + + return response; + } + + + public List addImageRecategorization(String dossierId, String fileId, List imageRecategorizationRequests) { + + var response = new ArrayList(); + var actionPerformed = false; + dossierPersistenceService.getAndValidateDossier(dossierId); + + for(var imageRecategorizationRequest : imageRecategorizationRequests) { + recategorizationPersistenceService.insert(fileId, imageRecategorizationRequest); + + Long commentId = null; + if (imageRecategorizationRequest.getComment() != null) { + + commentId = addComment(fileId, imageRecategorizationRequest.getAnnotationId(), imageRecategorizationRequest.getComment(), imageRecategorizationRequest.getUser()).getId(); + } + + actionPerformed = actionPerformed || !AnnotationStatus.REQUESTED.equals(imageRecategorizationRequest.getStatus()); + + response.add(ManualAddResponse.builder().annotationId(imageRecategorizationRequest.getAnnotationId()).commentId(commentId).build()); + } + if (actionPerformed) { + reprocess(dossierId, fileId); + } + + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + + return response; } @@ -310,198 +301,185 @@ public class ManualRedactionService { } - public void deleteAddRedaction(String dossierId, String fileId, String annotationId) { + public void deleteAddRedaction(String dossierId, String fileId, List annotationIds) { - var addRedaction = getAddRedaction(fileId, annotationId); var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); + var actionPerformed = false; - handleAddToDictionary(fileId, annotationId, addRedaction.getTypeId(), addRedaction.getValue(), addRedaction.getStatus(), addRedaction.isAddToDictionary(), addRedaction.isAddToDossierDictionary(), true, dossier.getId()); - - addRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); - - if (addRedaction.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + for(var annotationId : annotationIds) { + var addRedaction = getAddRedaction(fileId, annotationId); + actionPerformed = actionPerformed || handleAddToDictionary(fileId, annotationId, addRedaction.getTypeId(), addRedaction.getValue(), addRedaction.getStatus(), addRedaction.isAddToDictionary(), addRedaction.isAddToDossierDictionary(), true, dossier.getId()); + addRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - - } - - - public void deleteRemoveRedaction(String dossierId, String fileId, String annotationId) { - - dossierPersistenceService.getAndValidateDossier(dossierId); - - var removeRedaction = getRemoveRedaction(fileId, annotationId); - - handleRemoveFromDictionary(dossierId, fileId, annotationId, removeRedaction.getStatus(), removeRedaction.isRemoveFromDictionary(), true); - removeRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); - - if (removeRedaction.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + if (actionPerformed) { + reprocess(dossierId, fileId); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void deleteForceRedaction(String dossierId, String fileId, String annotationId) { + public void deleteRemoveRedaction(String dossierId, String fileId, List annotationIds) { - var forceRedaction = getForceRedaction(fileId, annotationId); + var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); + var actionPerformed = false; + var redactionLog = fileManagementStorageService.getRedactionLog(dossier.getId(), fileId); - forceRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); + for(var annotationId : annotationIds) { - if (forceRedaction.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + var removeRedaction = getRemoveRedaction(fileId, annotationId); + + actionPerformed = actionPerformed || handleRemoveFromDictionary(redactionLog , dossier, fileId, annotationId, removeRedaction.getStatus(), removeRedaction.isRemoveFromDictionary(), true); + removeRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); } + + if(actionPerformed) { + reprocess(dossierId, fileId); + } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void deleteLegalBasisChange(String dossierId, String fileId, String annotationId) { + public void deleteForceRedaction(String dossierId, String fileId, List annotationIds) { - var legalBasisChange = getLegalBasisChange(fileId, annotationId); + var now = OffsetDateTime.now(); - legalBasisChangePersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); - if (legalBasisChange.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + for(var annotationId : annotationIds ) { + forceRedactionPersistenceService.softDelete(fileId, annotationId, now); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void deleteImageRecategorization(String dossierId, String fileId, String annotationId) { + public void deleteLegalBasisChange(String dossierId, String fileId, List annotationIds) { - var imageRecategorization = getImageRecategorization(fileId, annotationId); + for(var annotationId : annotationIds) { + legalBasisChangePersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); + } - recategorizationPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + } - if (imageRecategorization.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + + public void deleteImageRecategorization(String dossierId, String fileId, List annotationIds) { + + var actionPerformed = false; + for(var annotationId : annotationIds) { + var imageRecategorization = getImageRecategorization(fileId, annotationId); + + recategorizationPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); + + actionPerformed = actionPerformed || !AnnotationStatus.REQUESTED.equals(imageRecategorization.getStatus()); + } + + if (actionPerformed) { reprocess(dossierId, fileId); } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void deleteComment(String fileId, long commentId) { - + public void deleteComment(String fileId, List commentIds) { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); - commentPersistenceService.softDelete(commentId, OffsetDateTime.now()); - + for(var commentId : commentIds) { + commentPersistenceService.softDelete(commentId, OffsetDateTime.now()); + } // update indicator fileStatusPersistenceService.updateHasComments(fileId, commentPersistenceService.fileHasComments(fileId)); - } - public void deleteResizeRedaction(String dossierId, String fileId, String annotationId) { - - var resizeRedaction = getResizeRedaction(fileId, annotationId); - - resizeRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); - - if (resizeRedaction.getStatus().equals(AnnotationStatus.REQUESTED)) { - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); - } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - } - - - public ManualAddResponse addResizeRedaction(String dossierId, String fileId, ResizeRedactionRequest resizeRedactionRequest) { - - dossierPersistenceService.getAndValidateDossier(dossierId); + public void deleteResizeRedaction(String dossierId, String fileId, List annotationIds) { OffsetDateTime now = OffsetDateTime.now(); - resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest); - - Long commentId = null; - if (resizeRedactionRequest.getComment() != null) { - - commentId = addComment(fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getComment(), resizeRedactionRequest.getUser()).getId(); + for(var annotationId : annotationIds ) { + resizeRedactionPersistenceService.softDelete(fileId, annotationId, now); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + } - if (resizeRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); - } else { - fileStatusPersistenceService.updateLastManualRedaction(fileId, now); + + public List addResizeRedaction(String dossierId, String fileId, List resizeRedactionRequests) { + + var response = new ArrayList(); + dossierPersistenceService.getAndValidateDossier(dossierId); + + for(var resizeRedactionRequest : resizeRedactionRequests ) { + resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest); + + Long commentId = null; + if (resizeRedactionRequest.getComment() != null) { + + commentId = addComment(fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getComment(), resizeRedactionRequest.getUser()).getId(); + } + var loaded = convert(getResizeRedaction(fileId, resizeRedactionRequest.getAnnotationId()), ManualResizeRedaction.class, new ManualResizeRedactionMapper()); + ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(Set.of(loaded)).build(); + addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions); + + response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build()); } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - var loaded = convert(getResizeRedaction(fileId, resizeRedactionRequest.getAnnotationId()), ManualResizeRedaction.class, new ManualResizeRedactionMapper()); - ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(Set.of(loaded)).build(); - addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions); - - return ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build(); + return response; } @SuppressWarnings("PMD") - public void updateRemoveRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateRemoveRedactionStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); + RedactionLog redactionLog = fileManagementStorageService.getRedactionLog(dossierId, fileId); - IdRemovalEntity idRemoval = removeRedactionPersistenceService.findRemoveRedaction(fileId, annotationId); - if (idRemoval.isRemoveFromDictionary()) { + for(var annotationId : annotationIds) { + IdRemovalEntity idRemoval = removeRedactionPersistenceService.findRemoveRedaction(fileId, annotationId); + if (idRemoval.isRemoveFromDictionary()) { - RedactionLog redactionLog = fileManagementStorageService.getRedactionLog(dossierId, fileId); - Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() - .stream() - .filter(entry -> entry.getId().equals(idRemoval.getId().getAnnotationId())) - .findFirst(); - if (redactionLogEntryOptional.isEmpty()) { - throw new NotFoundException("Annotation does not exist in redaction log."); - } + Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() + .stream() + .filter(entry -> entry.getId().equals(idRemoval.getId().getAnnotationId())) + .findFirst(); - var redactionLogEntry = redactionLogEntryOptional.get(); + if (redactionLogEntryOptional.isEmpty()) { + throw new NotFoundException("Annotation does not exist in redaction log."); + } - if (annotationStatus == AnnotationStatus.APPROVED) { - removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); - approveStatusForRedactionsWithSameValue(dossier, false, true, redactionLogEntry.getValue()); + var redactionLogEntry = redactionLogEntryOptional.get(); - } else if (annotationStatus == AnnotationStatus.DECLINED) { + if (annotationStatus == AnnotationStatus.APPROVED) { + removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); + approveStatusForRedactionsWithSameValue(dossier, false, true, redactionLogEntry.getValue()); - // if it was previously approved, revert the delete - if (idRemoval.getStatus() == AnnotationStatus.APPROVED) { - addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); + } else if (annotationStatus == AnnotationStatus.DECLINED) { + + // if it was previously approved, revert the delete + if (idRemoval.getStatus() == AnnotationStatus.APPROVED) { + addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); + } } } + + removeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); + +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); } - - removeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); - - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void updateForceRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateForceRedactionStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { dossierPersistenceService.getAndValidateDossier(dossierId); - forceRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + for(var annotationId : annotationIds) { + forceRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -513,34 +491,38 @@ public class ManualRedactionService { @Transactional - public void updateLegalBasisChangeStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateLegalBasisChangeStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { dossierPersistenceService.getAndValidateDossier(dossierId); - legalBasisChangePersistenceService.updateStatus(fileId, annotationId, annotationStatus); - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + for(var annotationId : annotationIds) { + legalBasisChangePersistenceService.updateStatus(fileId, annotationId, annotationStatus); +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } - public void updateImageRecategorizationStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateImageRecategorizationStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { - ManualImageRecategorizationEntity imageRecategorization = recategorizationPersistenceService.findRecategorization(fileId, annotationId); + var actionPerformed = false; + dossierPersistenceService.getAndValidateDossier(dossierId); - if (annotationStatus.equals(AnnotationStatus.DECLINED)) { + for(var annotationId : annotationIds) { + ManualImageRecategorizationEntity imageRecategorization = recategorizationPersistenceService.findRecategorization(fileId, annotationId); - // if it was previously approved, revert the delete - if (imageRecategorization.getStatus() == AnnotationStatus.APPROVED) { - reprocess(dossierId, fileId); - } - } else if (annotationStatus.equals(AnnotationStatus.APPROVED)) { + actionPerformed = actionPerformed || + (AnnotationStatus.DECLINED.equals(annotationStatus) + && AnnotationStatus.APPROVED.equals(imageRecategorization.getStatus())); + actionPerformed = actionPerformed || AnnotationStatus.APPROVED.equals(annotationStatus); + + recategorizationPersistenceService.updateStatus(fileId, annotationId, annotationStatus); +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + } + if (actionPerformed) { reprocess(dossierId, fileId); } - - dossierPersistenceService.getAndValidateDossier(dossierId); - recategorizationPersistenceService.updateStatus(fileId, annotationId, annotationStatus); - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -556,41 +538,43 @@ public class ManualRedactionService { } - public void updateResizeRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateResizeRedactionStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { dossierPersistenceService.getAndValidateDossier(dossierId); - resizeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + for (var annotationId : annotationIds) { + resizeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @SuppressWarnings("PMD") - public void updateAddRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + public void updateAddRedactionStatus(String dossierId, String fileId, List annotationIds, AnnotationStatus annotationStatus) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); + for(var annotationId : annotationIds) { + ManualRedactionEntryEntity manualRedactionEntry = addRedactionPersistenceService.findAddRedaction(fileId, annotationId); + if (manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary()) { + if (annotationStatus == AnnotationStatus.APPROVED) { + addToDictionary(manualRedactionEntry.getTypeId(), manualRedactionEntry.getValue(), dossierId, fileId); - ManualRedactionEntryEntity manualRedactionEntry = addRedactionPersistenceService.findAddRedaction(fileId, annotationId); - if (manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary()) { - if (annotationStatus == AnnotationStatus.APPROVED) { - addToDictionary(manualRedactionEntry.getTypeId(), manualRedactionEntry.getValue(), dossierId, fileId); + approveStatusForRedactionsWithSameValue(dossier, manualRedactionEntry.isAddToDictionary(), manualRedactionEntry.isAddToDossierDictionary(), manualRedactionEntry.getValue()); - approveStatusForRedactionsWithSameValue(dossier, manualRedactionEntry.isAddToDictionary(), manualRedactionEntry.isAddToDossierDictionary(), manualRedactionEntry.getValue()); - - } else if (annotationStatus == AnnotationStatus.DECLINED) { - // if it was previously approved, revert the add - if (manualRedactionEntry.getStatus() == AnnotationStatus.APPROVED) { - removeFromDictionary(manualRedactionEntry.getTypeId(), manualRedactionEntry.getValue(), dossierId, fileId); + } else if (annotationStatus == AnnotationStatus.DECLINED) { + // if it was previously approved, revert the add + if (manualRedactionEntry.getStatus() == AnnotationStatus.APPROVED) { + removeFromDictionary(manualRedactionEntry.getTypeId(), manualRedactionEntry.getValue(), dossierId, fileId); + } } } + + addRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + +// boolean hasSuggestions = calculateHasSuggestions(fileId); +// fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasSuggestions); } - - addRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - - boolean hasSuggestions = calculateHasSuggestions(fileId); - fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasSuggestions); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -662,15 +646,13 @@ public class ManualRedactionService { } - private void handleRemoveFromDictionary(String dossierId, String fileId, String annotationId, AnnotationStatus status, boolean removeFromDictionary, boolean revert) { + private boolean handleRemoveFromDictionary(RedactionLog redactionLog, DossierEntity dossier, String fileId, String annotationId, AnnotationStatus status, boolean removeFromDictionary, boolean revert) { if (status == AnnotationStatus.APPROVED) { if (removeFromDictionary) { - var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - RedactionLog redactionLog = fileManagementStorageService.getRedactionLog(dossierId, fileId); Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() .stream() .filter(entry -> entry.getId().equals(annotationId)) @@ -683,13 +665,16 @@ public class ManualRedactionService { var redactionLogEntry = redactionLogEntryOptional.get(); if (revert) { - addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); + addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossier.getId(), fileId); } else { - removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); + removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossier.getId(), fileId); } + + return true; } removeRedactionPersistenceService.updateStatus(fileId, annotationId, status, removeFromDictionary); } + return false; } @@ -698,8 +683,6 @@ public class ManualRedactionService { try { log.debug("Adding entry: {} to {} for {} / {}", value, typeId, dossierId, fileId); dictionaryController.addEntries(typeId, List.of(value), false, false); - - reprocess(dossierId, fileId); } catch (Exception e) { throw new BadRequestException(e.getMessage()); } @@ -711,7 +694,6 @@ public class ManualRedactionService { try { log.debug("Deleting entries to {} for {} / {}", typeId, dossierId, fileId); dictionaryController.deleteEntries(typeId, List.of(value)); - reprocess(dossierId, fileId); } catch (FeignException e) { throw new BadRequestException(e.getMessage()); } @@ -720,17 +702,13 @@ public class ManualRedactionService { private CommentEntity addComment(String fileId, String annotationId, String comment, String user) { - var createdComment = commentPersistenceService.insert(CommentEntity.builder() + return commentPersistenceService.insert(CommentEntity.builder() .text(comment) .fileId(fileId) .annotationId(annotationId) .user(user) .date(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)) .build()); - - fileStatusPersistenceService.updateHasComments(fileId, true); - - return createdComment; } @@ -771,7 +749,7 @@ public class ManualRedactionService { } - private void handleAddToDictionary(String fileId, String annotationId, String typeId, String value, AnnotationStatus status, boolean addToDictionary, + private boolean handleAddToDictionary(String fileId, String annotationId, String typeId, String value, AnnotationStatus status, boolean addToDictionary, boolean addToDossierDictionary, boolean revert, String dossierId) { if (status == AnnotationStatus.APPROVED) { @@ -783,9 +761,11 @@ public class ManualRedactionService { } else { addToDictionary(typeId, value, dossierId, fileId); } + return true; } } + return false; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 72bc48b32..cbe6763bc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.nio.charset.StandardCharsets; import java.time.OffsetDateTime; import java.util.Collections; +import java.util.List; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; @@ -257,10 +258,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); - BinaryFileRequest upload = new BinaryFileRequest("test".getBytes(StandardCharsets.UTF_8), "test.pdf", dossier.getId(), "1"); - JSONPrimitive uploadResult = uploadClient.upload(upload); - var secondFile = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue()); - var addRedaction = manualRedactionClient.addAddRedaction(dossierId, fileId, AddRedactionRequest.builder() .addToDictionary(true) .addToDossierDictionary(false) @@ -272,34 +269,34 @@ public class FileTest extends AbstractPersistenceServerServiceTest { .value("test") .legalBasis("1") .build()); - var removeRedaction = manualRedactionClient.addRemoveRedaction(dossierId, fileId, RemoveRedactionRequest.builder() - .annotationId("removeRedactionAnnotation") + var removeRedaction = manualRedactionClient.addRemoveRedaction(dossierId, fileId, List.of(RemoveRedactionRequest.builder() + .annotationId(addRedaction.getAnnotationId()) .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .removeFromDictionary(false) - .build()); - var forceRedaction = manualRedactionClient.addForceRedaction(dossierId, fileId, ForceRedactionRequest.builder() + .build())).get(0); + var forceRedaction = manualRedactionClient.addForceRedaction(dossierId, fileId, List.of(ForceRedactionRequest.builder() .annotationId("forceRedactionAnnotation") .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .legalBasis("1") - .build()); - var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossierId, fileId, LegalBasisChangeRequest.builder() + .build())).get(0); + var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossierId, fileId, List.of(LegalBasisChangeRequest.builder() .annotationId("legalBasisChangeAnnotation") .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .legalBasis("1") - .build()); - var imageRecategorization = manualRedactionClient.addImageRecategorization(dossierId, fileId, ImageRecategorizationRequest.builder() + .build())).get(0); + var imageRecategorization = manualRedactionClient.addImageRecategorization(dossierId, fileId, List.of(ImageRecategorizationRequest.builder() .annotationId("imageRecategorizationAnnotation") .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .typeId("new-type:id") - .build()); + .build())).get(0); var loadedFile = fileClient.getFileStatus(dossierId, fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index 94736dc06..1a3bcbbfa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -3,7 +3,9 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; +import java.util.stream.Collectors; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -14,17 +16,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.CommentRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ForceRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImageRecategorizationRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.LegalBasisChangeRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ResizeRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { @@ -88,11 +79,17 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(loadedAddRedaction.getTextAfter()).isEqualTo("Text After"); assertThat(loadedAddRedaction.getTextBefore()).isEqualTo("Text Before"); - manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), addRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(addRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedAddRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), addRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(addRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedAddRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); @@ -109,128 +106,170 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .section("section2") .build()); - manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), addRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(addRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); var loadedAddRedaction2 = manualRedactionClient.getAddRedaction(file.getId(), addRedaction2.getAnnotationId()); assertThat(loadedAddRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); assertThat(loadedAddRedaction2.isAddToDossierDictionary()).isEqualTo(false); assertThat(loadedAddRedaction2.isAddToDictionary()).isEqualTo(true); assertThat(loadedAddRedaction2.getSection()).contains("section2"); - var removeRedaction = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), RemoveRedactionRequest.builder() + var removeRedaction = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), List.of(RemoveRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()) .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .removeFromDictionary(false) - .build()); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + .build())).get(0); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); var loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), removeRedaction.getAnnotationId()); assertThat(loadedRemoveRedaction.isRemoveFromDictionary()).isEqualTo(false); assertThat(loadedRemoveRedaction.getSoftDeletedTime()).isNull(); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedRemoveRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedRemoveRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); - var removeRedaction2 = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), RemoveRedactionRequest.builder() + var removeRedaction2 = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), List.of(RemoveRedactionRequest.builder() .annotationId("annotationId") .comment("comment") .status(AnnotationStatus.APPROVED) .user("test") .removeFromDictionary(true) - .build()); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + .build())).get(0); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); var loadedRemoveRedaction2 = manualRedactionClient.getRemoveRedaction(file.getId(), removeRedaction2.getAnnotationId()); assertThat(loadedRemoveRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); assertThat(dictionaryClient.getDictionaryForType(type.getId()).getEntries().isEmpty()); assertThat(loadedRemoveRedaction2.isRemoveFromDictionary()).isEqualTo(true); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedRemoveRedaction2 = manualRedactionClient.getRemoveRedaction(file.getId(), removeRedaction2.getAnnotationId()); assertThat(loadedRemoveRedaction2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(removeRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); loadedRemoveRedaction2 = manualRedactionClient.getRemoveRedaction(file.getId(), removeRedaction2.getAnnotationId()); assertThat(loadedRemoveRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); - var forceRedaction = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), ForceRedactionRequest.builder() + var forceRedaction = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), List.of(ForceRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()) .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .legalBasis("1") - .build()); + .build())).get(0); var loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction.getAnnotationId()); assertThat(loadedForceRedaction.getLegalBasis()).isEqualTo("1"); assertThat(loadedForceRedaction.getUser()).isEqualTo("test"); assertThat(loadedForceRedaction.getAnnotationId()).isEqualTo(loadedForceRedaction.getAnnotationId()); assertThat(loadedForceRedaction.getFileId()).isEqualTo(loadedForceRedaction.getFileId()); - manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(forceRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedForceRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(forceRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedForceRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); - var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), LegalBasisChangeRequest.builder() + var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), List.of(LegalBasisChangeRequest.builder() .annotationId(addRedaction.getAnnotationId()) .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .legalBasis("1") - .build()); + .build())).get(0); var loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedLegalBasisChange.getAnnotationId()).isEqualTo(legalBasisChange.getAnnotationId()); assertThat(loadedLegalBasisChange.getUser()).isEqualTo("test"); assertThat(loadedLegalBasisChange.getLegalBasis()).isEqualTo("1"); - manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), legalBasisChange.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(legalBasisChange.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedLegalBasisChange.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), legalBasisChange.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(legalBasisChange.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedLegalBasisChange.getStatus()).isEqualTo(AnnotationStatus.DECLINED); - var imageRecategorization = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), ImageRecategorizationRequest.builder() + var imageRecategorization = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), List.of(ImageRecategorizationRequest.builder() .annotationId(addRedaction.getAnnotationId()) .comment("comment") .status(AnnotationStatus.REQUESTED) .user("test") .typeId("new-type:id") - .build()); + .build())).get(0); var loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedImageRecategorization.getAnnotationId()).isEqualTo(imageRecategorization.getAnnotationId()); - manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), imageRecategorization.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(imageRecategorization.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedImageRecategorization.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), imageRecategorization.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(imageRecategorization.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedImageRecategorization.getStatus()).isEqualTo(AnnotationStatus.DECLINED); - var imageRecategorization2 = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), ImageRecategorizationRequest.builder() + var imageRecategorization2 = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), List.of(ImageRecategorizationRequest.builder() .annotationId(addRedaction2.getAnnotationId()) .comment("comment") .status(AnnotationStatus.APPROVED) .user("test") .typeId("new-type:id") - .build()); + .build())).get(0); var loadedImageRecategorization2 = manualRedactionClient.getImageRecategorization(file.getId(), imageRecategorization2.getAnnotationId()); assertThat(loadedImageRecategorization2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), imageRecategorization2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(imageRecategorization2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); loadedImageRecategorization2 = manualRedactionClient.getImageRecategorization(file.getId(), imageRecategorization2.getAnnotationId()); assertThat(loadedImageRecategorization2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); - var resizeRedaction = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() + var resizeRedaction = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), List.of(ResizeRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()) .page(1) .comment("comment") @@ -240,7 +279,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .value("some value") .textAfter("Text After") .textBefore("Text Before") - .build()); + .build())).get(0); var loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); assertThat(loadedResizeRedaction.getUser()).isEqualTo("test"); @@ -249,11 +288,17 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(loadedResizeRedaction.getTextAfter()).isEqualTo("Text After"); assertThat(loadedResizeRedaction.getTextBefore()).isEqualTo("Text Before"); - manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(resizeRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.APPROVED).build()); loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(resizeRedaction.getAnnotationId())) + .annotationStatus(AnnotationStatus.DECLINED).build()); loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); @@ -266,60 +311,68 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(manualRedactions.getComments()).isNotEmpty(); assertThat(manualRedactions.getResizeRedactions()).isNotEmpty(); - manualRedactions.getForceRedactions() - .forEach(e -> manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), e.getAnnotationId())); + List annotationIds = manualRedactions.getForceRedactions().stream().map(f -> f.getAnnotationId()).collect(Collectors.toList()); + manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), annotationIds); +// manualRedactions.getForceRedactions() +// .forEach(e -> manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getLegalBasisChanges() - .forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getEntriesToAdd() - .forEach(e -> manualRedactionClient.deleteAddRedaction(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteAddRedaction(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getIdsToRemove() - .forEach(e -> manualRedactionClient.deleteRemoveRedaction(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteRemoveRedaction(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getImageRecategorization() - .forEach(e -> manualRedactionClient.deleteImageRecategorization(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteImageRecategorization(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getResizeRedactions() - .forEach(e -> manualRedactionClient.deleteResizeRedaction(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteResizeRedaction(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); manualRedactions.getComments() - .forEach((key, value) -> value.forEach(c -> manualRedactionClient.deleteComment(file.getId(), c.getId()))); + .forEach((key, value) -> value.forEach(c -> manualRedactionClient.deleteComment(file.getId(), List.of(c.getId())))); - var forceRedaction2 = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), ForceRedactionRequest.builder() + var forceRedaction2 = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), List.of(ForceRedactionRequest.builder() .annotationId(addRedaction2.getAnnotationId()) .comment("comment") .status(AnnotationStatus.APPROVED) .user("test") .legalBasis("1") - .build()); + .build())).get(0); var loadedForceRedaction2 = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction2.getAnnotationId()); assertThat(loadedForceRedaction2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); assertThat(loadedForceRedaction2.getProcessedDate()).isNull(); - manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(forceRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); loadedForceRedaction2 = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction2.getAnnotationId()); assertThat(loadedForceRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId()); manualRedactions.getForceRedactions() - .forEach(e -> manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); - var legalBasisChange2 = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), LegalBasisChangeRequest.builder() + var legalBasisChange2 = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), List.of(LegalBasisChangeRequest.builder() .annotationId(addRedaction2.getAnnotationId()) .comment("comment") .status(AnnotationStatus.APPROVED) .user("test") .legalBasis("1") - .build()); + .build())).get(0); var loadedLegalBasisChange2 = manualRedactionClient.getLegalBasisChange(file.getId(), legalBasisChange2.getAnnotationId()); assertThat(loadedLegalBasisChange2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); - manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), legalBasisChange2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(legalBasisChange2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); loadedLegalBasisChange2 = manualRedactionClient.getLegalBasisChange(file.getId(), legalBasisChange2.getAnnotationId()); assertThat(loadedLegalBasisChange2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId()); manualRedactions.getLegalBasisChanges() - .forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), e.getAnnotationId())); + .forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), List.of(e.getAnnotationId()))); - var resizeRedaction2 = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() + var resizeRedaction2 = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), List.of(ResizeRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()) .page(1) .comment("comment") @@ -327,14 +380,17 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())) .user("test") .value("some value") - .build()); + .build())).get(0); var loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId()); assertThat(loadedResizeRedaction2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); assertThat(loadedResizeRedaction2.getUser()).isEqualTo("test"); assertThat(loadedResizeRedaction2.getPositions()).isNotEmpty(); assertThat(loadedResizeRedaction2.getValue()).isEqualTo("some value"); - manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), + UpdateRedactionRequest.builder() + .annotationIds(List.of(resizeRedaction2.getAnnotationId())) + .annotationStatus(AnnotationStatus.REQUESTED).build()); loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId()); assertThat(loadedResizeRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED);