From d9aa5c4efe12afe4247ee24551e0896a995559d6 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Thu, 27 Jan 2022 11:14:28 +0100 Subject: [PATCH] RED-3239: Fixed persistence for imported redactions --- .../resources/ImportedAnnotationResource.java | 8 +- .../ImportedAnnotationController.java | 3 +- .../server/utils/ImportedRedactionMapper.java | 20 +++++ .../5-imported-annotation.changelog.yaml | 77 ++++++++++++++++++- .../client/ImportedRedactionClient.java | 10 +++ .../tests/ImportedRedactionTest.java | 56 ++++++++++++++ 6 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ImportedRedactionMapper.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ImportedRedactionClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ImportedRedactionTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java index 19444ccf7..216db3a50 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java @@ -30,17 +30,17 @@ public interface ImportedAnnotationResource { @DeleteMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM + ANNOTATION_ID_PATH_PARAM) void delete(@PathVariable(FILE_ID_PARAM) String fileId, - @PathVariable(ANNOTATION_ID_PATH_PARAM) String annotationId); + @PathVariable(ANNOTATION_ID_PARAM) String annotationId); - @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM) + @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM, consumes = MediaType.APPLICATION_JSON_VALUE) void insert(@PathVariable(FILE_ID_PARAM) String fileId, @RequestBody AddImportedAnnotationRequest annotation); - @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM + ANNOTATION_ID_PATH_PARAM) + @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM + ANNOTATION_ID_PATH_PARAM, consumes = MediaType.APPLICATION_JSON_VALUE) void updateStatus(@PathVariable(FILE_ID_PARAM) String fileId, - @PathVariable(ANNOTATION_ID_PATH_PARAM) String annotationId, + @PathVariable(ANNOTATION_ID_PARAM) String annotationId, @RequestBody UpdateImportedAnnotationStatusRequest UpdateImportedAnnotationRequest); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java index 46eee0555..251e4dd97 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import com.iqser.red.service.peristence.v1.server.utils.ImportedRedactionMapper; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ImportedAnnotationPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddImportedAnnotationRequest; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotation; @@ -26,7 +27,7 @@ public class ImportedAnnotationController implements ImportedAnnotationResource @Override public List getByFileId(@PathVariable(FILE_ID_PARAM) String fileId) { - return convert(importedAnnotationPersistenceService.findImportedAnnotations(fileId), ImportedAnnotation.class); + return convert(importedAnnotationPersistenceService.findImportedAnnotations(fileId), ImportedAnnotation.class, new ImportedRedactionMapper()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ImportedRedactionMapper.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ImportedRedactionMapper.java new file mode 100644 index 000000000..bcadac3b5 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ImportedRedactionMapper.java @@ -0,0 +1,20 @@ +package com.iqser.red.service.peristence.v1.server.utils; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import java.util.function.BiConsumer; + +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotation; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; + +public class ImportedRedactionMapper implements BiConsumer { + + @Override + public void accept(ImportedAnnotationEntity manualRedactionEntryEntity, ImportedAnnotation manualRedactionEntry) { + manualRedactionEntry.setPositions(convert(manualRedactionEntryEntity.getPositions(), Rectangle.class)); + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml index 1a74d7884..672c88e0f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml @@ -29,12 +29,81 @@ databaseChangeLog: name: processed_date type: TIMESTAMP WITHOUT TIME ZONE - column: - name: TODO-positions - type: TIMESTAMP WITHOUT TIME ZONE - - column: - name: TODO-file_status_id + name: file_status_id type: VARCHAR(255) - column: name: comment type: VARCHAR(255) tableName: imported_annotation + - changeSet: + id: imported-annotation_positions + author: generated + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + name: imported_annotation_entity_annotation_id + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: imported_annotation_entity_file_id + type: VARCHAR(255) + - column: + constraints: + nullable: false + name: height + type: FLOAT4 + - column: + constraints: + nullable: false + name: page + type: INTEGER + - column: + constraints: + nullable: false + name: top_leftx + type: FLOAT4 + - column: + constraints: + nullable: false + name: top_lefty + type: FLOAT4 + - column: + constraints: + nullable: false + name: width + type: FLOAT4 + tableName: imported_annotation_entity_positions + - changeSet: + id: imported-annotation-file-fk + author: dom + changes: + - addForeignKeyConstraint: + baseColumnNames: file_status_id + baseTableName: imported_annotation + constraintName: fkeur9q7l2tp5n12c2t9dfp3a10 + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: file + validate: true + - changeSet: + id: imported-annotation-file-positions + author: dom + changes: + - addForeignKeyConstraint: + baseColumnNames: imported_annotation_entity_annotation_id,imported_annotation_entity_file_id + baseTableName: imported_annotation_entity_positions + constraintName: fkol1r7vwjc1uvu36p5ju7cj28j + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: annotation_id,file_id + referencedTableName: imported_annotation + validate: true \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ImportedRedactionClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ImportedRedactionClient.java new file mode 100644 index 000000000..73328a740 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ImportedRedactionClient.java @@ -0,0 +1,10 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import org.springframework.cloud.openfeign.FeignClient; + +import com.iqser.red.service.persistence.service.v1.api.resources.ImportedAnnotationResource; + +@FeignClient(name = "ImportedRedactionClient", url = "http://localhost:${server.port}") +public interface ImportedRedactionClient extends ImportedAnnotationResource { + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ImportedRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ImportedRedactionTest.java new file mode 100644 index 000000000..b845eceba --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ImportedRedactionTest.java @@ -0,0 +1,56 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.iqser.red.service.peristence.v1.server.integration.client.ImportedRedactionClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddImportedAnnotationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus; +import com.iqser.red.service.redaction.v1.model.Point; +import com.iqser.red.service.redaction.v1.model.Rectangle; + +public class ImportedRedactionTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private ImportedRedactionClient importedRedactionClient; + + + @Test + public void testManualRedaction() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + importedRedactionClient.insert(file.getId(), AddImportedAnnotationRequest.builder() + .positions(List.of(new Rectangle(new Point(1, 1), 1, 1, 1))) + .annotationId("annotationId") + .status(ImportedAnnotationStatus.NEW) + .userId("userId") + .comment("comment") + .build()); + var loadedImportedRedaction = importedRedactionClient.getByFileId(file.getId()); + assertThat(loadedImportedRedaction.get(0).getPositions().size()).isEqualTo(1); + + } + +}