From abd311a2e0fd9e3db26d8f273e92c3bf0492217c Mon Sep 17 00:00:00 2001 From: deiflaender Date: Wed, 26 Jan 2022 13:01:50 +0100 Subject: [PATCH 1/3] RED-3243: Read redaction annotation from preview documents --- .../annotations/ImportedAnnotationStatus.java | 8 ++ .../annotations/ImportedAnnotationEntity.java | 54 ++++++++++++ .../ImportedAnnotationPersistenceService.java | 86 +++++++++++++++++++ .../ImportedAnnotationRepository.java | 24 ++++++ .../v1/server/service/FileService.java | 7 +- persistence-service-v1/pom.xml | 2 +- 6 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotationStatus.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ImportedAnnotationEntity.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImportedAnnotationRepository.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotationStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotationStatus.java new file mode 100644 index 000000000..8d52b1eea --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotationStatus.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +public enum ImportedAnnotationStatus { + NEW, + APPROVED, + DECLINED, + ADDED +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ImportedAnnotationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ImportedAnnotationEntity.java new file mode 100644 index 000000000..6734a86df --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ImportedAnnotationEntity.java @@ -0,0 +1,54 @@ +package com.iqser.red.service.persistence.management.v1.processor.entity.annotations; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Entity +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "imported_annotation") +public class ImportedAnnotationEntity { + + @EmbeddedId + private AnnotationEntityId id; + + @Column(name = "user_id") + private String user; + + @Column + @Enumerated(EnumType.STRING) + private ImportedAnnotationStatus status; + + @Column + private OffsetDateTime processedDate; + + @ElementCollection + private List positions = new ArrayList<>(); + + @ManyToOne + private FileEntity fileStatus; + + @Column + private String comment; + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java new file mode 100644 index 000000000..348692af9 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java @@ -0,0 +1,86 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; + +import javax.transaction.Transactional; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.pdftron.redaction.v1.api.model.Annotation; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImportedAnnotationRepository; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus; +import com.iqser.red.service.redaction.v1.model.Rectangle; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ImportedAnnotationPersistenceService { + + private final ImportedAnnotationRepository importedAnnotationRepository; + + + @Transactional + public void insert(String fileId, List annotations) { + + annotations.forEach(annotation -> insert(fileId, annotation, ImportedAnnotationStatus.NEW, null, null)); + } + + + @Transactional + public void insert(String fileId, Annotation annotation, ImportedAnnotationStatus status, String userId, String comment) { + + ImportedAnnotationEntity importedAnnotationEntity = new ImportedAnnotationEntity(); + importedAnnotationEntity.setId(new AnnotationEntityId(annotation.getId(), fileId)); + importedAnnotationEntity.setStatus(status); + importedAnnotationEntity.setProcessedDate(status == ImportedAnnotationStatus.ADDED ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); + importedAnnotationEntity.setUser(userId); + importedAnnotationEntity.setComment(comment); + importedAnnotationEntity.setPositions(convert(annotation.getPositions())); + importedAnnotationRepository.save(importedAnnotationEntity); + } + + + @Transactional + public void updateStatus(String fileId, String annotationId, ImportedAnnotationStatus annotationStatus, + String comment, String userId) { + + importedAnnotationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now() + .truncatedTo(ChronoUnit.MILLIS), annotationStatus, comment, userId); + } + + + @Transactional + public void delete(String fileId, String annotationId){ + importedAnnotationRepository.deleteById(new AnnotationEntityId(annotationId, fileId)); + } + + + public List findImportedAnnotations(String fileId) { + + return importedAnnotationRepository.findByIdFileId(fileId); + } + + + private List convert(List positions) { + + List rectangleEntities = new ArrayList<>(); + positions.forEach(p -> { + RectangleEntity re = new RectangleEntity(); + re.setTopLeftX(p.getTopLeft().getX()); + re.setTopLeftY(p.getTopLeft().getY()); + re.setWidth(p.getWidth()); + re.setHeight(p.getHeight()); + re.setPage(p.getPage()); + rectangleEntities.add(re); + }); + return rectangleEntities; + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImportedAnnotationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImportedAnnotationRepository.java new file mode 100644 index 000000000..f845109f0 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImportedAnnotationRepository.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import java.time.OffsetDateTime; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus; + +public interface ImportedAnnotationRepository extends JpaRepository { + + List findByIdFileId(String fileId); + + + @Modifying + @Query("update ImportedAnnotationEntity m set m.processedDate = :processedDate, m.status = :annotationStatus, m.comment = :comment, m.user = :userId where m.id = :id") + void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, ImportedAnnotationStatus annotationStatus, + String comment, String userId); + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java index a30817066..925538735 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java @@ -2,6 +2,8 @@ package com.iqser.red.service.peristence.v1.server.service; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; +import com.iqser.red.service.pdftron.redaction.v1.api.model.AnnotationExtractionResponse; +import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest; import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeRequest; import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; @@ -47,6 +49,7 @@ public class FileService { private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; private final ResizeRedactionPersistenceService resizeRedactionPersistenceService; private final IndexingService indexingService; + private final ImportedAnnotationPersistenceService importedAnnotationPersistenceService; public JSONPrimitive upload(BinaryFileRequest request) { @@ -68,7 +71,9 @@ public class FileService { } try { - PdfTronOptimizeResponse optimized = pdfTronRedactionClient.optimize(new PdfTronOptimizeRequest(request.getData())); + AnnotationExtractionResponse optimized = pdfTronRedactionClient.optimizeGetAndRemoveAnnotations(new DocumentRequest(request.getData())); + importedAnnotationPersistenceService.insert(fileId, optimized.getAnnotations()); + if (optimized.getNumberOfPages() == 0) { throw new BadRequestException("Empty document"); } diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index 3df65b12a..798af4cdf 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -27,7 +27,7 @@ 3.56.0 2.18.0 - 3.17.0 + 3.28.0 3.19.0 From 9043f5904e9d157537d439c7b87a878140b96c31 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Wed, 26 Jan 2022 16:09:28 +0100 Subject: [PATCH 2/3] RED-3243 Added db and api for ImportedAnnotations (either finished nor working) --- .../AddImportedAnnotationRequest.java | 25 ++++++++ .../model/annotations/ImportedAnnotation.java | 26 +++++++++ ...UpdateImportedAnnotationStatusRequest.java | 18 ++++++ .../resources/ImportedAnnotationResource.java | 46 +++++++++++++++ .../ImportedAnnotationPersistenceService.java | 24 +++++++- .../ImportedAnnotationController.java | 57 +++++++++++++++++++ .../5-imported-annotation.changelog.yaml | 40 +++++++++++++ .../db/changelog/db.changelog-master.yaml | 2 + 8 files changed, 235 insertions(+), 3 deletions(-) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddImportedAnnotationRequest.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotation.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateImportedAnnotationStatusRequest.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddImportedAnnotationRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddImportedAnnotationRequest.java new file mode 100644 index 000000000..3406dd4db --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddImportedAnnotationRequest.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +import com.iqser.red.service.redaction.v1.model.Rectangle; + +import java.util.ArrayList; +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AddImportedAnnotationRequest { + + private String annotationId; + private List positions = new ArrayList<>(); + private ImportedAnnotationStatus status; + private String userId; + private String comment; + +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotation.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotation.java new file mode 100644 index 000000000..43ae298e2 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImportedAnnotation.java @@ -0,0 +1,26 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ImportedAnnotation { + + private String annotationId; + private String fileId; + private List positions = new ArrayList<>(); + private ImportedAnnotationStatus status; + private String user; + private String comment; + private OffsetDateTime processedDate; + +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateImportedAnnotationStatusRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateImportedAnnotationStatusRequest.java new file mode 100644 index 000000000..d4a0ea3a3 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/UpdateImportedAnnotationStatusRequest.java @@ -0,0 +1,18 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UpdateImportedAnnotationStatusRequest { + + private ImportedAnnotationStatus status; + private String user; + private String comment; + +} 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 new file mode 100644 index 000000000..19444ccf7 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ImportedAnnotationResource.java @@ -0,0 +1,46 @@ +package com.iqser.red.service.persistence.service.v1.api.resources; + +import java.util.List; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddImportedAnnotationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotation; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.UpdateImportedAnnotationStatusRequest; + +public interface ImportedAnnotationResource { + + String IMPORTED_ANNOTATION_PATH = "/imported-annotation"; + + String FILE_ID_PARAM = "fileId"; + String FILE_ID_PATH_PARAM = "/{" + FILE_ID_PARAM + "}"; + + String ANNOTATION_ID_PARAM = "fileId"; + String ANNOTATION_ID_PATH_PARAM = "/{" + ANNOTATION_ID_PARAM + "}"; + + + @GetMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) + List getByFileId(@PathVariable(FILE_ID_PARAM) String fileId); + + + @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); + + + @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM) + void insert(@PathVariable(FILE_ID_PARAM) String fileId, + @RequestBody AddImportedAnnotationRequest annotation); + + + @PostMapping(value = IMPORTED_ANNOTATION_PATH + FILE_ID_PATH_PARAM + ANNOTATION_ID_PATH_PARAM) + void updateStatus(@PathVariable(FILE_ID_PARAM) String fileId, + @PathVariable(ANNOTATION_ID_PATH_PARAM) String annotationId, + @RequestBody UpdateImportedAnnotationStatusRequest UpdateImportedAnnotationRequest); + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java index 348692af9..e3788c01d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImportedAnnotationPersistenceService.java @@ -14,6 +14,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.annotati import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImportedAnnotationRepository; +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.Rectangle; @@ -26,6 +27,20 @@ public class ImportedAnnotationPersistenceService { private final ImportedAnnotationRepository importedAnnotationRepository; + @Transactional + public void insert(String fileId, AddImportedAnnotationRequest annotation) { + + ImportedAnnotationEntity importedAnnotationEntity = new ImportedAnnotationEntity(); + importedAnnotationEntity.setId(new AnnotationEntityId(annotation.getAnnotationId(), fileId)); + importedAnnotationEntity.setStatus(annotation.getStatus() != null ? annotation.getStatus() : ImportedAnnotationStatus.NEW); + importedAnnotationEntity.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + importedAnnotationEntity.setPositions(convert(annotation.getPositions())); + importedAnnotationEntity.setUser(annotation.getUserId()); + importedAnnotationEntity.setComment(annotation.getComment()); + importedAnnotationRepository.save(importedAnnotationEntity); + } + + @Transactional public void insert(String fileId, List annotations) { @@ -34,12 +49,14 @@ public class ImportedAnnotationPersistenceService { @Transactional - public void insert(String fileId, Annotation annotation, ImportedAnnotationStatus status, String userId, String comment) { + public void insert(String fileId, Annotation annotation, ImportedAnnotationStatus status, String userId, + String comment) { ImportedAnnotationEntity importedAnnotationEntity = new ImportedAnnotationEntity(); importedAnnotationEntity.setId(new AnnotationEntityId(annotation.getId(), fileId)); importedAnnotationEntity.setStatus(status); - importedAnnotationEntity.setProcessedDate(status == ImportedAnnotationStatus.ADDED ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); + importedAnnotationEntity.setProcessedDate(status == ImportedAnnotationStatus.ADDED ? OffsetDateTime.now() + .truncatedTo(ChronoUnit.MILLIS) : null); importedAnnotationEntity.setUser(userId); importedAnnotationEntity.setComment(comment); importedAnnotationEntity.setPositions(convert(annotation.getPositions())); @@ -57,7 +74,8 @@ public class ImportedAnnotationPersistenceService { @Transactional - public void delete(String fileId, String annotationId){ + public void delete(String fileId, String annotationId) { + importedAnnotationRepository.deleteById(new AnnotationEntityId(annotationId, fileId)); } 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 new file mode 100644 index 000000000..46eee0555 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ImportedAnnotationController.java @@ -0,0 +1,57 @@ +package com.iqser.red.service.peristence.v1.server.controller; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import java.util.List; + +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.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; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.UpdateImportedAnnotationStatusRequest; +import com.iqser.red.service.persistence.service.v1.api.resources.ImportedAnnotationResource; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +public class ImportedAnnotationController implements ImportedAnnotationResource { + + private final ImportedAnnotationPersistenceService importedAnnotationPersistenceService; + + + @Override + public List getByFileId(@PathVariable(FILE_ID_PARAM) String fileId) { + + return convert(importedAnnotationPersistenceService.findImportedAnnotations(fileId), ImportedAnnotation.class); + } + + + @Override + public void insert(@PathVariable(FILE_ID_PARAM) String fileId, + @RequestBody AddImportedAnnotationRequest annotation) { + + importedAnnotationPersistenceService.insert(fileId, annotation); + } + + + @Override + public void updateStatus(@PathVariable(FILE_ID_PARAM) String fileId, + @PathVariable(ANNOTATION_ID_PATH_PARAM) String annotationId, + @RequestBody UpdateImportedAnnotationStatusRequest updateImportedAnnotationStatusRequest) { + + importedAnnotationPersistenceService.updateStatus(fileId, annotationId, updateImportedAnnotationStatusRequest.getStatus(), updateImportedAnnotationStatusRequest.getComment(), updateImportedAnnotationStatusRequest.getUser()); + } + + + @Override + public void delete(@PathVariable(FILE_ID_PARAM) String fileId, + @PathVariable(ANNOTATION_ID_PATH_PARAM) String annotationId) { + + importedAnnotationPersistenceService.delete(fileId, annotationId); + } + +} 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 new file mode 100644 index 000000000..1a74d7884 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-imported-annotation.changelog.yaml @@ -0,0 +1,40 @@ +databaseChangeLog: + - changeSet: + id: imported-annotation + author: philipp + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + primaryKey: true + primaryKeyName: imported_annotation_pkey + name: annotation_id + type: VARCHAR(255) + - column: + constraints: + nullable: false + primaryKey: true + primaryKeyName: imported_annotation_pkey + name: file_id + type: VARCHAR(255) + - column: + name: user_id + type: VARCHAR(255) + - column: + name: status + type: VARCHAR(255) + - column: + name: processed_date + type: TIMESTAMP WITHOUT TIME ZONE + - column: + name: TODO-positions + type: TIMESTAMP WITHOUT TIME ZONE + - column: + name: TODO-file_status_id + type: VARCHAR(255) + - column: + name: comment + type: VARCHAR(255) + tableName: imported_annotation diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml index c8f2287f7..889dce98c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml @@ -7,3 +7,5 @@ databaseChangeLog: file: db/changelog/3-added-annotation-modification-date.changelog.yaml - include: file: db/changelog/4-archived-dossier.changelog.yaml + - include: + file: db/changelog/5-imported-annotation.changelog.yaml From d8d9b1c2a7b4ff6db0727e89931280b861ac7305 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Thu, 27 Jan 2022 09:20:26 +0100 Subject: [PATCH 3/3] RED-3243: Fixed not working tests --- .../utils/AbstractPersistenceServerServiceTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index ce7aa679a..4dd8cd27f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -36,6 +36,7 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; +import java.util.List; import java.util.TimeZone; @RunWith(SpringRunner.class) @@ -114,10 +115,11 @@ public abstract class AbstractPersistenceServerServiceTest { doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null); - when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> { - PdfTronOptimizeRequest request = (PdfTronOptimizeRequest) args.getArguments()[0]; + + when(pdfTronRedactionClient.optimizeGetAndRemoveAnnotations(Mockito.any())).thenAnswer((args) -> { + DocumentRequest request = (DocumentRequest) args.getArguments()[0]; int numberOfPages = (request.getDocument().length == 0? 0: 10); - return new PdfTronOptimizeResponse(request.getDocument(), numberOfPages); + return new AnnotationExtractionResponse(request.getDocument(), numberOfPages, List.of()); }); when(pdfTronRedactionClient.redact(Mockito.any())).thenAnswer((args) -> new PdfTronRedactionResult(((PdfTronRedactionRequest) args.getArguments()[0]).getDocument()));