From 1ba5d5957d4aceb0b2b4f2d1d03ed54c8d3559cb Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Thu, 30 Sep 2021 13:15:29 +0200 Subject: [PATCH 01/79] RED-2250: updated dependencies --- persistence-service-v1/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index afff442f8..8d7823f77 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -6,7 +6,7 @@ com.iqser.red platform-dependency - 1.1.3 + 1.1.4 4.0.0 @@ -28,7 +28,7 @@ com.iqser.red platform-commons-dependency - 1.3.6 + 1.4.0 import pom From 7f923978fff110616cb01f0e2e5cfd3a8638a82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 30 Sep 2021 13:50:29 +0200 Subject: [PATCH 02/79] RED-2320: Fixed return dictionary entries --- .../v1/server/controller/DictionaryController.java | 5 ++++- .../peristence/v1/server/integration/tests/TypeTest.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index c3fdbd36b..3a34eaaad 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -207,7 +207,10 @@ public class DictionaryController implements DictionaryResource { @Override public Type getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId) { - return convert(dictionaryPersistenceService.getType(typeId), Type.class); + var entity = dictionaryPersistenceService.getType(typeId); + var target = convert(entity, Type.class); + target.setEntries(convert(entity.getEntries(), DictionaryEntry.class)); + return target; } @Override diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java index 552fb35ca..1efa27aaa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -42,6 +42,8 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { var loadedType = dictionaryClient.getDictionaryForType(type.getId()); + assertThat(loadedType.getEntries().size()).isEqualTo(3); + assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion()); List dict = dictionaryClient.getEntriesForType(type.getId()); From a1f8480c99a4dc8a617edcfa3b22752f8123bc2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 30 Sep 2021 15:01:13 +0200 Subject: [PATCH 03/79] RED-2322: Fixed addding manual redactions --- .../v1/processor/entity/annotations/CommentEntity.java | 2 +- .../entity/annotations/ManualForceRedactionEntity.java | 2 +- .../entity/annotations/ManualRedactionEntryEntity.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java index 3c7f1aee9..b579b54a1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java @@ -29,7 +29,7 @@ public class CommentEntity { @Column private OffsetDateTime date; - @Column + @Column(columnDefinition = "text") private String text; @Column(name = "user_id") private String user; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java index 0d1022c4d..b5218cee8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java @@ -24,7 +24,7 @@ public class ManualForceRedactionEntity { private String user; @Column private AnnotationStatus status; - @Column + @Column(columnDefinition = "text") private String legalBasis; @Column private OffsetDateTime requestDate; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index 1d6d479fc..a635a6e61 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -28,7 +28,7 @@ public class ManualRedactionEntryEntity { private String typeId; @Column private String value; - @Column + @Column(columnDefinition = "text") private String reason; @Column private String legalBasis; From 44dc33be02795ebabf93e51d84780e14f665ef04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 30 Sep 2021 15:36:57 +0200 Subject: [PATCH 04/79] RED-2322: Fixed manual redaction are not in redactionLog --- .../persistence-service-api-v1/pom.xml | 5 -- .../annotations/AddRedactionRequest.java | 6 +- .../v1/api/model/annotations/Comment.java | 5 +- .../v1/api/model/annotations/IdRemoval.java | 4 +- .../annotations/ManualForceRedaction.java | 8 +- .../ManualImageRecategorization.java | 8 +- .../annotations/ManualLegalBasisChange.java | 8 +- .../annotations/ManualRedactionEntry.java | 12 +-- .../model/annotations/ManualRedactions.java | 8 +- .../v1/api/model/annotations/Rectangle.java | 9 --- .../v1/api/model/annotations/ViewedPage.java | 4 +- .../model/audit/AddNotificationRequest.java | 6 +- .../v1/api/model/audit/AuditModel.java | 12 +-- .../v1/api/model/audit/AuditRequest.java | 6 +- .../api/model/audit/AuditSearchRequest.java | 4 +- .../service/v1/api/model/common/Page.java | 6 +- .../CreateOrUpdateDossierTemplateRequest.java | 7 +- .../DossierAttributeConfig.java | 4 +- .../dossiertemplate/DossierTemplate.java | 13 ++-- .../dossiertemplate/ImportCsvResponse.java | 6 +- .../model/dossiertemplate/ReportTemplate.java | 4 +- .../ReportTemplateUploadRequest.java | 7 +- .../DigitalSignatureUpdateModel.java | 6 +- .../dossier/CreateOrUpdateDossierRequest.java | 13 ++-- .../dossier/DeletedDossier.java | 4 +- .../dossiertemplate/dossier/Dossier.java | 15 ++-- .../dossier/file/BinaryFileRequest.java | 7 +- .../dossier/file/BinaryFileResult.java | 7 +- .../dossier/file/FileModel.java | 17 ++--- .../legalbasis/LegalBasisMapping.java | 6 +- .../dossiertemplate/type/DictionaryEntry.java | 4 +- .../api/model/dossiertemplate/type/Type.java | 6 +- .../api/model/download/DownloadRequest.java | 8 +- .../v1/api/model/download/DownloadStatus.java | 13 ++-- .../model/download/SetDownloadedRequest.java | 6 +- .../v1/api/model/license/LicenseReport.java | 8 +- .../model/license/LicenseReportRequest.java | 8 +- .../v1/api/model/license/ReportData.java | 4 +- .../api/model/notification/Notification.java | 8 +- .../v1/api/resources/AuditResource.java | 15 ++-- .../v1/api/resources/DictionaryResource.java | 18 +++-- .../resources/DigitalSignatureResource.java | 10 ++- .../DossierAttributesConfigResource.java | 14 +++- .../resources/DossierAttributesResource.java | 13 +++- .../v1/api/resources/DossierResource.java | 18 +++-- .../resources/DossierTemplateResource.java | 18 +++-- .../v1/api/resources/DownloadResource.java | 15 ++-- .../FileAttributesConfigResource.java | 18 +++-- .../api/resources/FileAttributesResource.java | 7 +- .../FileStatusProcessingUpdateResource.java | 3 +- .../resources/LegalBasisMappingResource.java | 12 ++- .../api/resources/LicenseReportResource.java | 11 ++- .../resources/ManualRedactionResource.java | 26 ++++++- .../api/resources/NotificationResource.java | 18 +++-- .../v1/api/resources/ReanalysisResource.java | 10 ++- .../api/resources/RedactionLogResource.java | 5 +- .../api/resources/ReportTemplateResource.java | 13 +++- .../v1/api/resources/RulesResource.java | 10 ++- .../resources/SMTPConfigurationResource.java | 11 ++- .../v1/api/resources/StatusResource.java | 19 +++-- .../v1/api/resources/UploadResource.java | 15 ++-- .../api/resources/UserPreferenceResource.java | 11 ++- .../v1/api/resources/ViewedPagesResource.java | 12 ++- .../v1/api/resources/WatermarkResource.java | 10 ++- .../ManualRedactionEntryEntity.java | 2 +- .../entity/annotations/RectangleEntity.java | 14 +--- .../processor/entity/audit/AuditEntity.java | 2 +- .../notification/NotificationEntity.java | 2 +- ...ageRecategorizationPersistenceService.java | 5 +- .../v1/processor}/utils/JSONConverter.java | 14 ++-- .../ManualRedactionProviderService.java | 25 ++++++- .../server/service/RedactionLogService.java | 11 +-- .../download/DownloadMessageReceiver.java | 36 +-------- .../download/DownloadProcessorService.java | 73 +++++++++++++++++++ .../server/utils/ManualRedactionMapper.java | 4 + .../tests/ManualRedactionTest.java | 8 +- 76 files changed, 520 insertions(+), 300 deletions(-) rename persistence-service-v1/{persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api => persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor}/utils/JSONConverter.java (91%) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java diff --git a/persistence-service-v1/persistence-service-api-v1/pom.xml b/persistence-service-v1/persistence-service-api-v1/pom.xml index 960a22db7..cff2c573b 100644 --- a/persistence-service-v1/persistence-service-api-v1/pom.xml +++ b/persistence-service-v1/persistence-service-api-v1/pom.xml @@ -36,11 +36,6 @@ feign-core true - - - jakarta.persistence - jakarta.persistence-api - diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java index 6030bdbea..5b6c75df4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.ArrayList; -import java.util.List; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java index c8d12ebf9..e54047023 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java @@ -1,13 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java index dcf148f45..92659837f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java index 4edca2348..3e6b07123 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java @@ -1,20 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.Table; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "manual_force_redaction") public class ManualForceRedaction { private String annotationId; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java index bd46ab120..37e949bc2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java @@ -1,20 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.Table; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "manual_image_recategorization") public class ManualImageRecategorization { private String annotationId; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java index 9b1c20046..f68c53969 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java @@ -1,20 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.Table; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "manual_legal_basis_change") public class ManualLegalBasisChange { private String annotationId; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java index 9db064187..d5f8593c6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java @@ -1,22 +1,18 @@ 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; -import javax.persistence.Entity; -import javax.persistence.Table; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.List; - @Data -@Entity @Builder @AllArgsConstructor @NoArgsConstructor -@Table(name = "manual_redaction") public class ManualRedactionEntry { private String annotationId; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java index 9fce6c05a..a3d0f00e4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java @@ -1,12 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.*; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java index a2b9dffc1..638aa6b8b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java @@ -5,19 +5,12 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.*; - @Data @Builder @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "rectangle") public class Rectangle { - @Id - @GeneratedValue - private long id; private float topLeftX; @@ -30,6 +23,4 @@ public class Rectangle { private int page; - @ManyToOne(fetch = FetchType.LAZY) - private ManualRedactionEntry manualRedaction; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java index 73202f13b..52ab65f5a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java @@ -1,11 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; - @Data @AllArgsConstructor @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java index 28d6f607f..78d04dd17 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; +import java.util.HashMap; +import java.util.Map; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.HashMap; -import java.util.Map; - @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java index f1412b869..8bff13bfd 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java @@ -1,22 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; +import java.time.OffsetDateTime; +import java.util.HashMap; +import java.util.Map; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.Table; -import java.time.OffsetDateTime; -import java.util.HashMap; -import java.util.Map; - @Data @Builder @NoArgsConstructor @AllArgsConstructor -@Entity -@Table(name = "audit") public class AuditModel { private long recordId; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java index 648959759..cda9fdfc5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; +import java.util.HashMap; +import java.util.Map; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.HashMap; -import java.util.Map; - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java index 18dae1942..486839b9e 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; - @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java index e82fd7c53..a46c4f023 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.common; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.ArrayList; -import java.util.List; - @AllArgsConstructor @NoArgsConstructor @Data diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java index 64210c033..a5c3b14ec 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java @@ -1,15 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; +import java.time.OffsetDateTime; +import java.util.HashSet; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; -import java.util.HashSet; -import java.util.Set; - @Data @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java index f64234980..0f9dca1a4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java @@ -1,13 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Id; - @Data @Builder @@ -15,7 +14,6 @@ import javax.persistence.Id; @AllArgsConstructor public class DossierAttributeConfig { - @Id private String id; private String label; private boolean editable; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java index 6410932e5..59f4f53b6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java @@ -1,15 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.HashSet; import java.util.Set; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java index c45af1b14..f845832ca 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; +import java.util.HashSet; +import java.util.Set; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.HashSet; -import java.util.Set; - @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java index 9a1a700ca..72a18683f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; +import java.time.OffsetDateTime; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java index ea1dabbf1..b929d786b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java @@ -1,6 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java index 6915076d2..8272a8f6c 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java @@ -1,6 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; @Data @NoArgsConstructor(access = AccessLevel.PRIVATE) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java index a613bfaa3..c43e96181 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java @@ -1,17 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java index ed9b4dcc3..cc2323abc 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java @@ -1,10 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; +import java.time.OffsetDateTime; + import lombok.Builder; import lombok.Data; -import java.time.OffsetDateTime; - @Data @Builder public class DeletedDossier { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java index b5045db33..cc8fbb774 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java @@ -1,16 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.HashSet; import java.util.Set; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java index 624a2997c..ef56be47b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java @@ -1,6 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java index 02929b66e..6af087066 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java @@ -1,6 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java index 1929e22b1..b79960bce 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java @@ -1,25 +1,22 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import javax.persistence.Entity; -import javax.persistence.Table; import java.time.OffsetDateTime; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "file") public class FileModel { @JsonProperty("fileId") diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java index f72e0eea2..17d6f5266 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java @@ -1,11 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.util.ArrayList; import java.util.List; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @NoArgsConstructor public class LegalBasisMapping { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java index f0c508f89..ee19c64e5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type; +import java.io.Serializable; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serializable; - @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java index 766341e5f..43e0987ca 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.ArrayList; -import java.util.List; - @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java index ec0227423..07060ed5f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java @@ -1,10 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; -import lombok.*; - import java.util.ArrayList; import java.util.List; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java index bc171efc6..281a91307 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java @@ -1,15 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.List; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java index d99baedd2..1dbdc6a90 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java @@ -1,6 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java index 547f09af6..3ff6f2e3f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java index 6c7bd557f..d0cdecb85 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java @@ -1,13 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; -import lombok.*; - import java.time.Instant; import java.time.Year; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java index 9f80f69c1..5e0e850fb 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; +import java.time.Instant; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.Instant; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java index 0220c2dd9..c1e31cd0a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.notification; +import java.time.OffsetDateTime; +import java.util.HashMap; +import java.util.Map; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.OffsetDateTime; -import java.util.HashMap; -import java.util.Map; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java index c4e129696..1b8f434dd 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java @@ -1,15 +1,20 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditModel; import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditRequest; import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditSearchRequest; import com.iqser.red.service.persistence.service.v1.api.model.audit.CategoryModel; import com.iqser.red.service.persistence.service.v1.api.model.common.Page; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.List; public interface AuditResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java index 405c01444..20cd4496b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java @@ -1,13 +1,21 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +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 org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; -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 DictionaryResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java index dd5138e6c..90c7b8ef9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java @@ -1,9 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature; @ResponseStatus(value = HttpStatus.OK) public interface DigitalSignatureResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java index c7b27a1f3..265126961 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java @@ -1,11 +1,19 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; +import java.util.List; + import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; -import java.util.List; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; public interface DossierAttributesConfigResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java index 9bc8cd486..168e48815 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java @@ -1,11 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttribute; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - 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.dossiertemplate.dossier.DossierAttribute; + public interface DossierAttributesResource { String REST_PATH = "/dossierAttributes"; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java index bac573ce7..bfb2489af 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java @@ -1,14 +1,20 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - import java.util.List; import java.util.Set; +import org.springframework.http.HttpStatus; +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 org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; + @ResponseStatus(value = HttpStatus.OK) public interface DossierResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java index 1377947bd..1a8f38a0a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java @@ -1,12 +1,20 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +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 org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.List; public interface DossierTemplateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java index bba222ef2..c0790b05f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java @@ -1,13 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +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 org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatus; -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 DownloadResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java index 4e8adbf92..0c7463326 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java @@ -1,12 +1,20 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.FileAttributesGeneralConfiguration; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.List; public interface FileAttributesConfigResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java index 57d2e967b..01a05a2eb 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java @@ -1,13 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; +import java.util.Map; + import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import java.util.Map; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; public interface FileAttributesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java index fdef5cc3b..b086b5be1 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; @@ -8,6 +7,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; +import com.iqser.red.service.redaction.v1.model.AnalyzeResult; + public interface FileStatusProcessingUpdateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java index 7b7811efa..50917dca5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java @@ -1,11 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import java.util.List; + import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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 org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; -import java.util.List; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; public interface LegalBasisMappingResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java index ee488194b..c3b19a6b7 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java @@ -1,10 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.license.LicenseReport; import com.iqser.red.service.persistence.service.v1.api.model.license.LicenseReportRequest; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; public interface LicenseReportResource { 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 65b20c199..3c6d39ef1 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 @@ -1,10 +1,30 @@ 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.common.JSONPrimitive; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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 org.springframework.web.bind.annotation.ResponseStatus; + +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.Comment; +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.IdRemoval; +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.ManualAddResponse; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualForceRedaction; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualImageRecategorization; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualLegalBasisChange; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; @ResponseStatus(value = HttpStatus.OK) public interface ManualRedactionResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java index 23dcdb924..040eb2e99 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java @@ -1,12 +1,20 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + +import org.springframework.http.HttpStatus; +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 org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification; -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 NotificationResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java index 114546d8d..7433a66db 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java @@ -1,10 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - import java.util.Set; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; + @ResponseStatus(value = HttpStatus.NO_CONTENT) public interface ReanalysisResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java index 913c8e9f0..132654ef9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java @@ -1,7 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.redaction.v1.model.RedactionLog; -import com.iqser.red.service.redaction.v1.model.SectionGrid; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; @@ -9,6 +7,9 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.SectionGrid; + @ResponseStatus(value = HttpStatus.OK) public interface RedactionLogResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java index 8b840581d..bf25ba0ef 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java @@ -1,12 +1,17 @@ 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.dossiertemplate.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateDownload; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.List; public interface ReportTemplateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java index 790fc80f5..c53d89006 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java @@ -1,9 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -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 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 org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; public interface RulesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java index 9839a0f59..8bed05d7c 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java @@ -1,9 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.SMTPConfiguration; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.SMTPConfiguration; public interface SMTPConfigurationResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index fda563f8f..41dcce4fe 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -1,14 +1,21 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - import java.util.List; import java.util.Set; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +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 org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; + public interface StatusResource { String STATUS_PATH = "/status"; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java index 9653a0064..539f187bb 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java @@ -1,13 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.Set; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileResult; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.Set; @ResponseStatus(value = HttpStatus.OK) public interface UploadResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java index 5534c7c48..b8ec11568 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java @@ -1,9 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.fasterxml.jackson.databind.JsonNode; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.fasterxml.jackson.databind.JsonNode; public interface UserPreferenceResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java index d769cfad9..c4bf19617 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java @@ -1,11 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage; +import java.util.List; + import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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 org.springframework.web.bind.annotation.ResponseStatus; -import java.util.List; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage; @ResponseStatus(value = HttpStatus.OK) public interface ViewedPagesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java index d4cb47872..afb823905 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java @@ -1,9 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +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 org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; @ResponseStatus(value = HttpStatus.OK) public interface WatermarkResource { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index a635a6e61..a46ead057 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -46,7 +46,7 @@ public class ManualRedactionEntryEntity { private OffsetDateTime softDeletedTime; - @OneToMany(mappedBy = "manualRedaction", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @ElementCollection private List positions = new ArrayList<>(); @ManyToOne diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java index 5c40efb55..d5a32fd99 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java @@ -9,27 +9,15 @@ import javax.persistence.*; @Data @Builder +@Embeddable @AllArgsConstructor @NoArgsConstructor -@Entity -@Table(name = "rectangle") public class RectangleEntity { - @Id - @GeneratedValue - private long id; - - @Column private float topLeftX; - @Column private float topLeftY; - @Column private float width; - @Column private float height; - @Column private int page; - @ManyToOne(fetch = FetchType.LAZY) - private ManualRedactionEntryEntity manualRedaction; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java index f0cca830d..a83728f93 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java @@ -1,6 +1,6 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.audit; -import com.iqser.red.service.persistence.service.v1.api.utils.JSONConverter; +import com.iqser.red.service.persistence.management.v1.processor.utils.JSONConverter; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java index 386a15df1..ae25a69aa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationEntity.java @@ -1,6 +1,6 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.notification; -import com.iqser.red.service.persistence.service.v1.api.utils.JSONConverter; +import com.iqser.red.service.persistence.management.v1.processor.utils.JSONConverter; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java index c945c3cba..e4f4c0ae2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -67,9 +68,9 @@ public class ImageRecategorizationPersistenceService { } - public Set findRecategorizations(String fileId, boolean includeDeletions) { + public List findRecategorizations(String fileId, boolean includeDeletions) { - return imageRecategorizationRepository.findByIdFileId(fileId).stream().filter(mre -> includeDeletions || mre.getSoftDeletedTime() == null).collect(Collectors.toSet()); + return imageRecategorizationRepository.findByIdFileId(fileId).stream().filter(mre -> includeDeletions || mre.getSoftDeletedTime() == null).collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/utils/JSONConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java similarity index 91% rename from persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/utils/JSONConverter.java rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java index 86e4d9c70..202d6d62f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/utils/JSONConverter.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java @@ -1,13 +1,15 @@ -package com.iqser.red.service.persistence.service.v1.api.utils; +package com.iqser.red.service.persistence.management.v1.processor.utils; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.SneakyThrows; +import java.util.HashMap; +import java.util.Map; import javax.persistence.AttributeConverter; import javax.persistence.Converter; -import java.util.HashMap; -import java.util.Map; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import lombok.SneakyThrows; @Converter public class JSONConverter implements AttributeConverter, String> { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java index 4facc8599..5ae60c099 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java @@ -1,18 +1,27 @@ package com.iqser.red.service.peristence.v1.server.service; +import com.iqser.red.service.peristence.v1.server.utils.ManualImageRecategorizationMapper; +import com.iqser.red.service.peristence.v1.server.utils.ManualRedactionMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; +import javax.transaction.Transactional; + @Service @RequiredArgsConstructor public class ManualRedactionProviderService { @@ -24,15 +33,17 @@ public class ManualRedactionProviderService { private final ImageRecategorizationPersistenceService recategorizationPersistenceService; private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + @Transactional public ManualRedactions getManualRedactions(String fileId) { - Set entriesToAdd = convert(addRedactionPersistenceService.findAddRedactions(fileId, false), ManualRedactionEntry.class); + + Set entriesToAdd = convertEntriesToAdd(addRedactionPersistenceService.findAddRedactions(fileId, false)); Set removals = convert(removeRedactionPersistenceService.findRemoveRedactions(fileId, false), IdRemoval.class); Set forceRedactions = convert(forceRedactionPersistenceService.findForceRedactions(fileId, false), ManualForceRedaction.class); - Set recategorizations = convert(recategorizationPersistenceService.findRecategorizations(fileId, false), ManualImageRecategorization.class); + Set recategorizations = new HashSet<>(convert(recategorizationPersistenceService.findRecategorizations(fileId, false), ManualImageRecategorization.class, new ManualImageRecategorizationMapper())); Set legalBasisChanges = convert(legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false), ManualLegalBasisChange.class); @@ -48,4 +59,14 @@ public class ManualRedactionProviderService { } + private Set convertEntriesToAdd(Set source){ + + return source.stream().map(entry -> + convert(entry, ManualRedactionEntry.class, new ManualRedactionMapper()) + ).collect(Collectors.toSet()); + } + + + + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java index 3df4916a7..265477ed4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java @@ -1,19 +1,21 @@ package com.iqser.red.service.peristence.v1.server.service; +import org.springframework.stereotype.Service; + import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionRequest; import com.iqser.red.service.redaction.v1.model.SectionGrid; + import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class RedactionLogService { private final FileManagementStorageService fileManagementStorageService; - // private final ManualRedactionService manualRedactionService; + private final ManualRedactionService manualRedactionService; private final RedactionClient redactionClient; private final DossierPersistenceService dossierPersistenceService; private final FileStatusService fileStatusService; @@ -23,13 +25,12 @@ public class RedactionLogService { if (withManualRedactions) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - // var manualRedactions = manualRedactionService.getManualRedactions(fileId); + var manualRedactions = manualRedactionService.getManualRedactions(fileId); var fileStatus = fileStatusService.getStatus(fileId); return redactionClient.getRedactionLog(RedactionRequest.builder() .dossierId(dossierId) .fileId(fileId) - // TODO -// .manualRedactions(manualRedactions) + .manualRedactions(manualRedactions) .dossierTemplateId(dossier.getDossierTemplateId()) .excludedPages(fileStatus.getExcludedPages()) .build()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java index d9c8b60d1..6a0a08f49 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java @@ -28,10 +28,8 @@ import java.util.stream.Collectors; @RabbitListener(queues = MessagingConfiguration.DOWNLOAD_QUEUE) public class DownloadMessageReceiver { + private final DownloadProcessorService downloadProcessorService; private final ObjectMapper objectMapper; - private final RabbitTemplate rabbitTemplate; - private final DownloadStatusPersistenceService downloadStatusPersistenceService; - private final DossierService dossierService; @RabbitHandler @@ -40,39 +38,11 @@ public class DownloadMessageReceiver { DownloadJob downloadJob = objectMapper.readValue(in, DownloadJob.class); log.info("Preparing download for userId: {} and storageId: {}", downloadJob.getUserId(), downloadJob.getStorageId()); - DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(downloadJob.getStorageId()); - downloadStatusPersistenceService.updateStatus(downloadJob.getStorageId(), DownloadStatusValue.GENERATING); - - var dossier = downloadStatus.getFiles().iterator().next().getDossier(); - - - List filenameSortedFileIds = downloadStatus.getFiles() - .stream() - .sorted(Comparator.comparing(FileEntity::getFilename)) - .map(FileEntity::getId) - .collect(Collectors.toList()); - - addReportQueue(ReportRequestMessage.builder() - .userId(downloadJob.getUserId()) - .downloadId(downloadJob.getStorageId()) - .dossierId(dossier.getId()) - .dossierTemplateId(dossierService.getDossierById(dossier.getId()).getDossierTemplateId()) - .fileIds(filenameSortedFileIds) - .templateIds(dossier.getReportTemplates().stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toSet())) - .build(), 1); + downloadProcessorService.processDownload(downloadJob); } - private void addReportQueue(ReportRequestMessage reportRequestMessage, int priority) { - try { - rabbitTemplate.convertAndSend(MessagingConfiguration.REPORT_QUEUE, objectMapper.writeValueAsString(reportRequestMessage), message -> { - message.getMessageProperties().setPriority(priority); - return message; - }); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java new file mode 100644 index 000000000..3da87074b --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java @@ -0,0 +1,73 @@ +package com.iqser.red.service.peristence.v1.server.service.download; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration; +import com.iqser.red.service.peristence.v1.server.model.DownloadJob; +import com.iqser.red.service.peristence.v1.server.service.DossierService; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; +import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class DownloadProcessorService { + + private final DownloadStatusPersistenceService downloadStatusPersistenceService; + private final DossierService dossierService; + private final RabbitTemplate rabbitTemplate; + private final ObjectMapper objectMapper; + + @Transactional + public void processDownload(DownloadJob downloadJob) { + + DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(downloadJob.getStorageId()); + downloadStatusPersistenceService.updateStatus(downloadJob.getStorageId(), DownloadStatusValue.GENERATING); + + var dossier = downloadStatus.getFiles().iterator().next().getDossier(); + + List filenameSortedFileIds = downloadStatus.getFiles() + .stream() + .sorted(Comparator.comparing(FileEntity::getFilename)) + .map(FileEntity::getId) + .collect(Collectors.toList()); + + addReportQueue(ReportRequestMessage.builder() + .userId(downloadJob.getUserId()) + .downloadId(downloadJob.getStorageId()) + .dossierId(dossier.getId()) + .dossierTemplateId(dossierService.getDossierById(dossier.getId()).getDossierTemplateId()) + .fileIds(filenameSortedFileIds) + .templateIds(dossier.getReportTemplates().stream().map(ReportTemplateEntity::getTemplateId).collect(Collectors.toSet())) + .build(), 1); + } + + + private void addReportQueue(ReportRequestMessage reportRequestMessage, int priority) { + + try { + rabbitTemplate.convertAndSend(MessagingConfiguration.REPORT_QUEUE, objectMapper.writeValueAsString(reportRequestMessage), message -> { + message.getMessageProperties().setPriority(priority); + return message; + }); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java index 0d2044f81..8a9c2cf86 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java @@ -1,7 +1,10 @@ package com.iqser.red.service.peristence.v1.server.utils; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; import java.util.function.BiConsumer; @@ -10,6 +13,7 @@ public class ManualRedactionMapper implements BiConsumer Date: Fri, 1 Oct 2021 14:32:30 +0200 Subject: [PATCH 05/79] Fixed not working download --- .../persistence/DownloadStatusPersistenceService.java | 6 +++++- .../peristence/v1/server/controller/DownloadController.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index e3d4fe793..963e26507 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -5,13 +5,16 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.download import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadStatusRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.Set; @Service @RequiredArgsConstructor @@ -21,7 +24,7 @@ public class DownloadStatusPersistenceService { private final FileRepository fileRepository; public void createStatus(String userId, String storageId, DossierEntity dossier, String filename, String mimeType, - List fileIds) { + List fileIds, Set downloadFileTypes) { DownloadStatusEntity downloadStatus = new DownloadStatusEntity(); @@ -32,6 +35,7 @@ public class DownloadStatusPersistenceService { downloadStatus.setDossier(dossier); downloadStatus.setCreationDate(OffsetDateTime.now()); downloadStatus.setFiles(fileRepository.findAllById(fileIds)); + downloadStatus.setDownloadFileTypes(new ArrayList<>(downloadFileTypes)); downloadStatusRepository.save(downloadStatus); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java index 084b9115e..658f91e67 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java @@ -49,7 +49,7 @@ public class DownloadController implements DownloadResource { var dossier = dossierPersistenceService.getAndValidateDossier(request.getDossierId()); - downloadStatusPersistenceService.createStatus(request.getUserId(), storageId, dossier, downloadFilename, mimeType, request.getFileIds()); + downloadStatusPersistenceService.createStatus(request.getUserId(), storageId, dossier, downloadFilename, mimeType, request.getFileIds(), dossier.getDownloadFileTypes()); addToDownloadQueue(DownloadJob.builder().storageId(storageId).userId(request.getUserId()).build(), 1); From deca0cbf5f119ca30195f0c81ed5b41a5f7772dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Fri, 1 Oct 2021 15:47:28 +0200 Subject: [PATCH 06/79] Fixed filenames in download start with . what leads to invisible files --- .../v1/server/service/download/DownloadPreparationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java index 2108e85e8..c3115b21c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java @@ -149,7 +149,7 @@ public class DownloadPreparationService { private String removeExtension(String fileName) { var index = fileName.lastIndexOf("."); if (index > 0) { - return fileName.substring(index); + return fileName.substring(0, index); } else { return fileName; } From daadcf09c706c55385e2bedfc89a148347d54431 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 4 Oct 2021 07:44:50 +0300 Subject: [PATCH 07/79] test improvements for new features --- .../annotations/ManualRedactionEntryEntity.java | 1 - .../integration/service/FileTesterAndProvider.java | 11 +++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index a46ead057..69e0ff618 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -45,7 +45,6 @@ public class ManualRedactionEntryEntity { @Column private OffsetDateTime softDeletedTime; - @ElementCollection private List positions = new ArrayList<>(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java index b57a2ff23..b7a656743 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java @@ -42,15 +42,22 @@ public class FileTesterAndProvider { @SneakyThrows public FileModel testAndProvideFile(Dossier dossier) { + return testAndProvideFile(dossier, "test.pdf"); + } - BinaryFileRequest upload = new BinaryFileRequest("test".getBytes(StandardCharsets.UTF_8), "test.pdf", dossier.getId(), "1"); + + @SneakyThrows + public FileModel testAndProvideFile(Dossier dossier, String fileName) { + + + BinaryFileRequest upload = new BinaryFileRequest("test".getBytes(StandardCharsets.UTF_8), fileName, dossier.getId(), "1"); JSONPrimitive uploadResult = uploadClient.upload(upload); var file = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue()); assertThat(file.getId()).isNotBlank(); - assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); + assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isGreaterThanOrEqualTo(1); fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, List.of(RedactionLogEntry.builder().id("annotationId").type("manual").value("value").build()), null, 0, 0, 0, 0))); From cd473e233672b24effc77983d2d8915ce4c37098 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 4 Oct 2021 09:12:58 +0300 Subject: [PATCH 08/79] updated version calculations --- .../api/model/dossiertemplate/type/Type.java | 13 +++++++++--- .../persistence/EntryPersistenceService.java | 1 - .../repository/EntryRepository.java | 2 ++ .../controller/DictionaryController.java | 20 +++++++++++++++---- .../v1/server/integration/tests/TypeTest.java | 12 +++++++---- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java index 43e0987ca..59e4414ac 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/Type.java @@ -1,13 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type; -import java.util.ArrayList; -import java.util.List; - +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.List; + @Data @Builder @NoArgsConstructor @@ -29,4 +30,10 @@ public class Type { private String dossierId; private List entries = new ArrayList<>(); + // For auto-mappers + @JsonIgnore + public String getTypeId() { + return this.id; + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java index 3a7d65508..a6ca85708 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java @@ -50,7 +50,6 @@ public class EntryPersistenceService { public List getEntries(String typeId) { - return entryRepository.findByTypeId(typeId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/EntryRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/EntryRepository.java index 76622b8a0..288b359c8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/EntryRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/EntryRepository.java @@ -9,6 +9,8 @@ import java.util.List; public interface EntryRepository extends JpaRepository { + @Modifying + @Query("update DictionaryEntryEntity e set e.deleted = true , e.version = :version where e.type.id =:typeId and e.value in :values") void deleteAllByTypeIdAndVersionAndValueIn(String typeId, long version, List values); @Modifying diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index 3a34eaaad..2e012d1fd 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -58,7 +58,8 @@ public class DictionaryController implements DictionaryResource { // List entriesToSearch = new ArrayList<>(); - long currentVersion = typeResult.getVersion(); + var currentVersion = getCurrentVersion(typeResult); + if (removeCurrent) { List existing = entryPersistenceService.getEntries(typeId) .stream() @@ -94,7 +95,7 @@ public class DictionaryController implements DictionaryResource { // To check whether the type exists Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class); - long currentVersion = typeResult.getVersion(); + var currentVersion = getCurrentVersion(typeResult); if (typeResult.isCaseInsensitive()) { List existing = entryPersistenceService.getEntries(typeId) @@ -135,7 +136,8 @@ public class DictionaryController implements DictionaryResource { if (typeResult.isHint() != typeValueRequest.isHint() || typeResult.isCaseInsensitive() != typeValueRequest.isCaseInsensitive() || typeResult .getRank() != typeValueRequest.getRank()) { - long currentVersion = typeResult.getVersion(); + + var currentVersion = getCurrentVersion(typeResult); List entries = convert(entryPersistenceService.getEntries(typeId), DictionaryEntry.class); entryPersistenceService.setVersion(typeId, entries.stream() .filter(entry -> !entry.isDeleted()) @@ -180,7 +182,8 @@ public class DictionaryController implements DictionaryResource { // NotFoundException would be thrown if the type not found in database. Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class); - long currentVersion = typeResult.getVersion(); + + var currentVersion = getCurrentVersion(typeResult); dictionaryPersistenceService.deleteType(typeId); List existing = entryPersistenceService.getEntries(typeId) @@ -296,6 +299,15 @@ public class DictionaryController implements DictionaryResource { } } + private long getCurrentVersion(Type typeResult) { + long currentVersion; + if (typeResult.getDossierId() != null) { + currentVersion = getVersionForDossier(typeResult.getDossierId()); + } else { + currentVersion = getVersion(typeResult.getDossierTemplateId()); + } + return currentVersion; + } private String humanizedDictionaryType(String label) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java index 1efa27aaa..5ff037ced 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -6,15 +6,12 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes 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.dossiertemplate.configuration.Colors; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; import org.assertj.core.util.Lists; import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; public class TypeTest extends AbstractPersistenceServerServiceTest { @@ -46,7 +43,7 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion()); - List dict = dictionaryClient.getEntriesForType(type.getId()); + var dict = dictionaryClient.getEntriesForType(type.getId()); assertThat(dict.size()).isEqualTo(3); @@ -56,6 +53,13 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedType.getVersion()).isGreaterThan(type.getVersion() + 1); + dict = dictionaryClient.getEntriesForType(type.getId()); + + assertThat(dict.size()).isEqualTo(3); + for (var entry : dict) { + assertThat(entry.isDeleted()).isTrue(); + } + var request = new Type(); BeanUtils.copyProperties(type, request); From da54b946ed1cf6b4fffc48e5cb63899c71818a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 4 Oct 2021 09:27:07 +0200 Subject: [PATCH 09/79] Fixed missing report download --- .../DossierPersistenceService.java | 4 ++- .../download/DownloadPreparationService.java | 1 + .../tests/DownloadPreparationTest.java | 30 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index be30ef0b9..daa14f42f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -52,7 +52,9 @@ public class DossierPersistenceService { dossierRepository.findById(dossierId).ifPresent(dossier -> { BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); - dossier.setReportTemplates(reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds())); + var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); + reportTemplates.forEach(r -> r.getDossiers().add(dossier)); + dossier.setReportTemplates(reportTemplates); }); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java index c3115b21c..2354a7f31 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java @@ -109,6 +109,7 @@ public class DownloadPreparationService { private void addReports(ReportResultMessage reportResultMessage, FileSystemBackedArchiver fileSystemBackedArchiver) { long addReportsStart = System.currentTimeMillis(); + for (StoredFileInformation storedFileInformation : reportResultMessage.getStoredFileInformation()) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 50fadd89c..33e12a7fb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; @@ -8,18 +9,27 @@ 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.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.service.download.DownloadReportMessageReceiver; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; import com.iqser.red.storage.commons.service.StorageService; + +import lombok.Builder; import lombok.SneakyThrows; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.io.ByteArrayInputStream; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -49,6 +59,9 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes @Autowired private ReportTemplateClient reportTemplateClient; + @Autowired + private DossierClient dossierClient; + @Test @SneakyThrows @@ -71,6 +84,23 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes assertThat(availableTemplates).isNotEmpty(); + dossierClient.updateDossier(CreateOrUpdateDossierRequest.builder() + .dossierName(dossier.getDossierName()) + .date(dossier.getDate()) + .description(dossier.getDescription()) + .ownerId(dossier.getOwnerId()) + .memberIds(dossier.getMemberIds()) + .approverIds(dossier.getApproverIds()) + .downloadFileTypes(dossier.getDownloadFileTypes()) + .watermarkEnabled(dossier.isWatermarkEnabled()) + .dueDate(dossier.getDueDate()) + .dossierTemplateId(dossier.getDossierTemplateId()) + .reportTemplateIds(availableTemplates.stream().map(a -> a.getTemplateId()).collect(Collectors.toList())) + .build(), dossier.getId()); + + var updatedDossier = dossierClient.getDossierById(dossier.getId()); + assertThat(updatedDossier.getReportTemplateIds()).isNotEmpty(); + downloadClient.prepareDownload(DownloadRequest.builder() .userId("1") .dossierId(dossier.getId()) From e6efa18019315bbc0532cfcb576c8e481477a2c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 5 Oct 2021 10:17:22 +0200 Subject: [PATCH 10/79] Fixed reset LastSuccessful Status at reupload file --- .../service/persistence/FileStatusPersistenceService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index b845da142..720066aa6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -304,6 +304,7 @@ public class FileStatusPersistenceService { file.setFilename(filename); file.setUploader(uploader); file.setStatus(FileStatus.FULLREPROCESS); + file.setLastSuccessfulStatus(null); file.setLastUploaded(OffsetDateTime.now()); file.setLastUpdated(OffsetDateTime.now()); file.setLastOCRTime(null); From 281839f15ddc66896138100c379288e85d9a546e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 5 Oct 2021 10:51:30 +0200 Subject: [PATCH 11/79] RED-2331: Reset deleted times on reupload file --- .../service/persistence/FileStatusPersistenceService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 720066aa6..266126675 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -322,6 +322,8 @@ public class FileStatusPersistenceService { file.setHasRedactions(false); file.setHasSuggestions(false); file.setHasUpdates(false); + file.setDeleted(null); + file.setHardDeletedTime(null); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); From 171cc1e298c10b992cfbae8ff4ba7434227c6b3c Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Tue, 5 Oct 2021 21:24:39 +0200 Subject: [PATCH 12/79] RED-1810: improvement in test for undeleting dossier --- .../persistence/DossierPersistenceService.java | 2 +- .../persistence/FileStatusPersistenceService.java | 2 +- .../v1/server/integration/tests/DossierTest.java | 13 +++++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index daa14f42f..98af11766 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -110,7 +110,7 @@ public class DossierPersistenceService { public void undelete(String dossierId) { dossierRepository.findById(dossierId).ifPresent(dossier -> { if (dossier.getHardDeletedTime() != null) { - throw new BadRequestException("Cannot undelete a hard-dossier file!"); + throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); } dossier.setStatus(DossierStatus.ACTIVE); dossier.setSoftDeletedTime(null); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 266126675..afd8a4fec 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -251,7 +251,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { if (file.getHardDeletedTime() != null) { - throw new BadRequestException("Cannot undelete a hard-dossier file!"); + throw new BadRequestException("Cannot undelete a hard-deleted file!"); } file.setStatus(statusBefore != null ? statusBefore : FileStatus.UNASSIGNED); file.setDeleted(null); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index d3cfb8953..d4eb09bbf 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -1,15 +1,19 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; + import com.google.common.collect.Sets; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; -import org.junit.Test; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import static org.assertj.core.api.Assertions.assertThat; +import feign.FeignException; public class DossierTest extends AbstractPersistenceServerServiceTest { @@ -58,5 +62,6 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(dossierClient.getAllDossiers()).isEmpty(); assertThat(dossierClient.getSoftDeletedDossiers()).isEmpty(); + assertThatThrownBy(() -> dossierClient.undeleteDossiers(Sets.newHashSet(dossier.getId()))).isInstanceOf(FeignException.class); } } From 4806a316199e16d2857f7659fb0f0e50120f3649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 5 Oct 2021 11:33:08 +0200 Subject: [PATCH 13/79] RED-2172: Enbled to configure azure blob storage as storage backend --- .../src/main/resources/application.yml | 1 + .../service/DossierTemplateTesterAndProvider.java | 1 + .../utils/AbstractPersistenceServerServiceTest.java | 7 +++++++ .../integration/utils/FileSystemBackedStorageService.java | 3 ++- .../src/test/resources/application.yml | 1 + persistence-service-v1/pom.xml | 4 ++-- 6 files changed, 14 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml index 4ddc12234..28b4b5734 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml @@ -60,4 +60,5 @@ storage: bucket-name: 'redaction' region: 'us-east-1' endpoint: 'https://s3.amazonaws.com' + backend: 's3' diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java index 0ffb8d824..3a15af4dc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java @@ -29,6 +29,7 @@ public class DossierTemplateTesterAndProvider { cru.setRequestingUser("1"); cru.setValidFrom(OffsetDateTime.now()); cru.setValidTo(OffsetDateTime.now()); + cru.setModifiedBy("user"); DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru); 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 da29a3ff5..2bcaddb66 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 @@ -15,6 +15,7 @@ import com.iqser.red.storage.commons.service.StorageService; import org.assertj.core.util.Lists; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -34,6 +35,7 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; +import java.util.TimeZone; @RunWith(SpringRunner.class) @EnableFeignClients(basePackageClasses = FileClient.class) @@ -101,6 +103,11 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private DossierAttributeConfigRepository dossierAttributeConfigRepository; + @BeforeClass + static public void setTimeZone(){ + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + } + @Before public void setupOptimize() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java index 2697696b7..0f6e9a125 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; +import com.iqser.red.storage.commons.service.S3StorageService; import com.iqser.red.storage.commons.service.StorageService; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; @@ -13,7 +14,7 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; -public class FileSystemBackedStorageService extends StorageService { +public class FileSystemBackedStorageService extends S3StorageService { private final Map dataMap = new HashMap<>(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml index cee644845..980811b00 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml +++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml @@ -45,6 +45,7 @@ storage: endpoint: 'http://localhost:9000' key: minioadmin secret: minioadmin + backend: 's3' server: diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index cf3cc7a16..d2a283766 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -6,7 +6,7 @@ com.iqser.red platform-dependency - 1.1.4 + 1.1.5 4.0.0 @@ -28,7 +28,7 @@ com.iqser.red platform-commons-dependency - 1.4.0 + 1.5.0 import pom From 2acf300bdce8644e7465ca2ddf1b20aa987b2908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Wed, 6 Oct 2021 14:34:09 +0200 Subject: [PATCH 14/79] RED-2172: Fixed objectmapper problem when jackson-dataformat-xml is in classpath --- .../service/DossierTemplateTesterAndProvider.java | 1 - .../utils/AbstractPersistenceServerServiceTest.java | 5 ----- persistence-service-v1/pom.xml | 2 +- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java index 3a15af4dc..0ffb8d824 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java @@ -29,7 +29,6 @@ public class DossierTemplateTesterAndProvider { cru.setRequestingUser("1"); cru.setValidFrom(OffsetDateTime.now()); cru.setValidTo(OffsetDateTime.now()); - cru.setModifiedBy("user"); DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru); 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 2bcaddb66..4e33f4326 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 @@ -103,11 +103,6 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private DossierAttributeConfigRepository dossierAttributeConfigRepository; - @BeforeClass - static public void setTimeZone(){ - TimeZone.setDefault(TimeZone.getTimeZone("GMT")); - } - @Before public void setupOptimize() { diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index d2a283766..71beebe1e 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -28,7 +28,7 @@ com.iqser.red platform-commons-dependency - 1.5.0 + 1.6.0 import pom From df7091110f046885950242b406ef62abdd4f29fa Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 6 Oct 2021 17:46:59 +0300 Subject: [PATCH 15/79] Fixed various efsa readyness issues --- .../v1/api/resources/DossierResource.java | 23 +++++------ .../entity/annotations/RectangleEntity.java | 2 +- .../entity/annotations/ViewedPageEntity.java | 4 ++ .../v1/processor/service/ColorsService.java | 18 +++++++-- .../persistence/AuditPersistenceService.java | 39 +++++++++++-------- .../DictionaryPersistenceService.java | 6 +-- .../DossierPersistenceService.java | 1 + .../FileStatusPersistenceService.java | 7 ++-- ...ageRecategorizationPersistenceService.java | 1 - .../repository/AuditRepository.java | 22 ++++++++++- .../v1/processor/utils/JSONConverter.java | 12 +++--- .../server/controller/DossierController.java | 8 ++-- .../controller/FileStatusController.java | 3 ++ .../controller/ManualRedactionController.java | 2 +- .../AnalysisFlagsCalculationService.java | 37 ++++++++++++++---- .../v1/server/service/DossierService.java | 5 +-- .../v1/server/service/FileStatusService.java | 10 ++--- .../ManualRedactionProviderService.java | 17 ++------ .../service/ManualRedactionService.java | 7 ++-- .../server/service/RedactionLogService.java | 4 +- .../download/DownloadMessageReceiver.java | 15 ------- .../download/DownloadPreparationService.java | 2 +- .../download/DownloadProcessorService.java | 17 ++++---- .../utils/FileSystemBackedArchiver.java | 6 +-- .../server/utils/ManualRedactionMapper.java | 4 +- .../service/DossierTesterAndProvider.java | 2 +- .../server/integration/tests/AuditTest.java | 3 ++ .../server/integration/tests/DossierTest.java | 2 +- .../tests/DownloadPreparationTest.java | 2 +- .../v1/server/integration/tests/FileTest.java | 1 - 30 files changed, 155 insertions(+), 127 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java index bfb2489af..6f7f51508 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java @@ -1,19 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; -import java.util.Set; - -import org.springframework.http.HttpStatus; -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 org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Set; @ResponseStatus(value = HttpStatus.OK) public interface DossierResource { @@ -26,6 +20,8 @@ public interface DossierResource { String DOSSIER_ID_PARAM = "dossierId"; String DOSSIER_ID_PATH_PARAM = "/{" + DOSSIER_ID_PARAM + "}"; + String INCLUDE_DELETED_PARAM = "includeDeleted"; + @PostMapping(value = REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest); @@ -39,7 +35,8 @@ public interface DossierResource { List getAllDossiers(); @GetMapping(value = REST_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) - Dossier getDossierById(@PathVariable(DOSSIER_ID_PARAM) String dossierId); + Dossier getDossierById(@PathVariable(DOSSIER_ID_PARAM) String dossierId, + @RequestParam(name = INCLUDE_DELETED_PARAM, defaultValue = "false", required = false) boolean includeDeleted); @GetMapping(value = DELETED_DOSSIERS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) List getSoftDeletedDossiers(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java index d5a32fd99..5180c429a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/RectangleEntity.java @@ -5,7 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.*; +import javax.persistence.Embeddable; @Data @Builder diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java index 679db9730..54c09f95d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ViewedPageEntity.java @@ -26,6 +26,10 @@ public class ViewedPageEntity { @MapsId("fileId") private FileEntity file; + public int getPage() { + return this.id.page; + } + @Data @Builder @Embeddable diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java index 17db7ff1e..be181efb4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ColorsService.java @@ -1,7 +1,6 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -15,12 +14,25 @@ public class ColorsService { private final ColorsRepository colorsRepository; public void deleteColors(String dossierTemplateId) { - colorsRepository.deleteById(dossierTemplateId); } public ColorsEntity getColors(String dossierTemplateId) { - return colorsRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("Colors Configuration not found")); + return colorsRepository.findById(dossierTemplateId).orElseGet(() -> { + var entity = new ColorsEntity(); + entity.setDossierTemplateId(dossierTemplateId); + entity.setAnalysisColor("#aaaaaa"); + entity.setDefaultColor("#aaaaaa"); + entity.setDictionaryRequestColor("#aaaaaa"); + entity.setPreviewColor("#aaaaaa"); + entity.setNotRedacted("#aaaaaa"); + entity.setManualRedactionColor("#aaaaaa"); + entity.setRequestAdd("#aaaaaa"); + entity.setRequestRemove("#aaaaaa"); + entity.setUpdatedColor("#aaaaaa"); + return colorsRepository.save(entity); + } + ); } public ColorsEntity saveColors(ColorsEntity colors) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java index dc6422875..04880786e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java @@ -8,10 +8,9 @@ import com.iqser.red.service.persistence.service.v1.api.model.audit.CategoryMode import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.beans.BeanUtils; -import org.springframework.data.domain.Example; -import org.springframework.data.domain.ExampleMatcher; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; @@ -19,6 +18,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository.*; + @Service @RequiredArgsConstructor @@ -47,23 +48,29 @@ public class AuditPersistenceService { public Page search(AuditSearchRequest auditRequest) { + if (auditRequest.getPageSize() == 0) { + auditRequest.setPageSize(50); + } - AuditEntity example = new AuditEntity(); - example.setCategory(auditRequest.getCategory()); - example.setUserId(auditRequest.getUserId()); - example.setObjectId(auditRequest.getObjectId()); + if (auditRequest.getFrom() == null) { + auditRequest.setFrom(OffsetDateTime.now().minusYears(30)); + } + if (auditRequest.getTo() == null) { + auditRequest.setTo(OffsetDateTime.now()); + } - var result = auditRepository.findAll(Example.of(example, ExampleMatcher.matchingAny().withIgnorePaths("recordId")), - PageRequest.of(auditRequest.getPage(), auditRequest.getPageSize())); + var spec = Specification.where(dateBetween(auditRequest.getFrom(), auditRequest.getTo())); + if (auditRequest.getCategory() != null) { + spec = spec.and(categoryMatches(auditRequest.getCategory())); + } + if (auditRequest.getUserId() != null) { + spec = spec.and(userMatches(auditRequest.getUserId())); + } + if (auditRequest.getObjectId() != null) { + spec = spec.and(objectIdMatches(auditRequest.getObjectId())); + } - // after search, insert a record logging the search - this.insertRecord(AuditRequest.builder() - .category(AUDIT_LOG_CATEGORY) - .message("Audit Log Accessed") - .userId(auditRequest.getRequestingUserId()) - .details(searchRequestToMap(auditRequest)) - .build()); - return result; + return auditRepository.findAll(spec, PageRequest.of(auditRequest.getPage(), auditRequest.getPageSize())); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index 0d5862834..aa034bcef 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -7,7 +7,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -36,7 +35,7 @@ public class DictionaryPersistenceService { checkRankAlreadyExists(type, dossierTemplateId, rank, dossierId); TypeEntity t = new TypeEntity(); - t.setId(toTypeId(type,dossierTemplateId,dossierId)); + t.setId(toTypeId(type, dossierTemplateId, dossierId)); t.setType(type); t.setDossier(dossierId == null ? null : dossierRepository.getOne(dossierId)); t.setDossierTemplate(dossierTemplateRepository.getOne(dossierTemplateId)); @@ -55,7 +54,6 @@ public class DictionaryPersistenceService { } - @Transactional public void updateType(String typeId, TypeEntity typeValueRequest) { @@ -84,7 +82,7 @@ public class DictionaryPersistenceService { public List getAllTypesForDossierTemplate(String dossierTemplateId) { - return typeRepository.findByDossierTemplateId(dossierTemplateId).stream().filter( d -> d.getDossierId() == null).collect(Collectors.toList()); + return typeRepository.findByDossierTemplateId(dossierTemplateId).stream().filter(d -> d.getDossierId() == null).collect(Collectors.toList()); } public List getAllTypesForDossier(String dossierId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index daa14f42f..c97a68291 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -36,6 +36,7 @@ public class DossierPersistenceService { BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier); dossier.setId(UUID.randomUUID().toString()); dossier.setStatus(DossierStatus.ACTIVE); + dossier.setDate(OffsetDateTime.now()); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); dossier.setReportTemplates(reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds())); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 266126675..2668ce189 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -41,8 +41,7 @@ public class FileStatusPersistenceService { @Transactional - public void updateStatusSuccessful(String fileId, int numberOfPages, FileStatus status, - boolean hasUpdates, long dictionaryVersion, long rulesVersion, + public void updateStatusSuccessful(String fileId, int numberOfPages, FileStatus status, long dictionaryVersion, long rulesVersion, long legalBasisVersion, long duration, long dossierDictionaryVersion, int analysisVersion) { @@ -50,7 +49,6 @@ public class FileStatusPersistenceService { file.setNumberOfPages(numberOfPages); file.setStatus(status); file.setLastSuccessfulStatus(status); - file.setHasUpdates(hasUpdates); file.setDictionaryVersion(dictionaryVersion); file.setRulesVersion(rulesVersion); file.setLegalBasisVersion(legalBasisVersion); @@ -67,10 +65,11 @@ public class FileStatusPersistenceService { @Transactional - public void updateFlags(String fileId,boolean hasRedactions,boolean hasHints,boolean hasImages,boolean hasSuggestions,boolean hasComments){ + public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setHasRedactions(hasRedactions); file.setHasHints(hasHints); + file.setHasUpdates(hasUpdates); file.setHasImages(hasImages); file.setHasSuggestions(hasSuggestions); file.setHasAnnotationComments(hasComments); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java index e4f4c0ae2..e10cda634 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; @Service diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/AuditRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/AuditRepository.java index ec22c7663..b8c749a1f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/AuditRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/AuditRepository.java @@ -2,14 +2,34 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.audit.AuditEntity; import com.iqser.red.service.persistence.service.v1.api.model.audit.CategoryModel; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; -public interface AuditRepository extends JpaRepository { +public interface AuditRepository extends JpaRepository, JpaSpecificationExecutor { + + static Specification categoryMatches(String category) { + return (audit, cq, cb) -> cb.equal(audit.get("category"), category); + } + + static Specification userMatches(String user) { + return (audit, cq, cb) -> cb.equal(audit.get("userId"), user); + } + + static Specification objectIdMatches(String objectId) { + return (audit, cq, cb) -> cb.equal(audit.get("objectId"), objectId); + } + + static Specification dateBetween(OffsetDateTime start, OffsetDateTime end) { + return (audit, cq, cb) -> cb.between(audit.get("recordDate"), start, end); + } @Query("SELECT new com.iqser.red.service.persistence.service.v1.api.model.audit.CategoryModel(a.category, count(a)) FROM AuditEntity a GROUP BY a.category") List findCategories(); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java index 202d6d62f..5e20fb791 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/JSONConverter.java @@ -1,16 +1,14 @@ package com.iqser.red.service.persistence.management.v1.processor.utils; -import java.util.HashMap; -import java.util.Map; - -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; - import lombok.SneakyThrows; +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; +import java.util.HashMap; +import java.util.Map; + @Converter public class JSONConverter implements AttributeConverter, String> { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java index 1349910dd..041d51b8c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java @@ -15,6 +15,7 @@ import feign.Param; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.transaction.Transactional; @@ -23,8 +24,8 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; @RestController @RequiredArgsConstructor @@ -85,10 +86,11 @@ public class DossierController implements DossierResource { @Override @Transactional - public Dossier getDossierById(@Param(DOSSIER_ID_PARAM) @PathVariable(DOSSIER_ID_PARAM) String dossierId) { + public Dossier getDossierById(@Param(DOSSIER_ID_PARAM) @PathVariable(DOSSIER_ID_PARAM) String dossierId, + @RequestParam(name = INCLUDE_DELETED_PARAM, defaultValue = "false", required = false) boolean includeDeleted) { DossierEntity dossier = dossierService.getDossierById(dossierId); - if (dossier.getStatus().equals(DossierStatus.DELETED)) { + if (dossier.getStatus().equals(DossierStatus.DELETED) && !includeDeleted) { throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); } return convert(dossier, Dossier.class, new DossierMapper()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 83e0bbb66..4eee401c2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -75,6 +75,7 @@ public class FileStatusController implements StatusResource { fileStatusService.setCurrentReviewer(dossierId, fileId, currentFileReviewerRequest.getValue()); fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -86,6 +87,7 @@ public class FileStatusController implements StatusResource { String lastReviewer = fileStatus.getLastReviewer(); fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer); fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -100,6 +102,7 @@ public class FileStatusController implements StatusResource { fileStatusService.setCurrentReviewer(dossierId, fileId, approverId != null ? approverId : dossierOwner); fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_APPROVAL); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } 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 00cca0ee8..a274ed20a 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 @@ -183,7 +183,7 @@ public class ManualRedactionController implements ManualRedactionResource { public void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId) { manualRedactionService.deleteComment(fileId, commentId); - // TODO analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + // TODO analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index f074ea574..f8deeb68f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -1,13 +1,17 @@ package com.iqser.red.service.peristence.v1.server.service; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; +import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; +import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; - -import lombok.RequiredArgsConstructor; +import java.time.OffsetDateTime; +import java.util.Map; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -15,19 +19,29 @@ public class AnalysisFlagsCalculationService { private final FileStatusPersistenceService fileStatusPersistenceService; private final RedactionLogService redactionLogService; + private final ViewedPagesPersistenceService viewedPagesPersistenceService; @Async public void calculateFlags(String dossierId, String fileId) { + var file = fileStatusPersistenceService.getStatus(fileId); var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true); + var viewedPagesForCurrentReviewer = viewedPagesPersistenceService.findViewedPages(fileId, file.getCurrentReviewer()); + + Map viewedPages = viewedPagesForCurrentReviewer.stream().collect(Collectors.toMap(ViewedPageEntity::getPage, ViewedPageEntity::getViewedTime)); + boolean hasRedactions = false; boolean hasHints = false; boolean hasSuggestions = false; boolean hasImages = false; + boolean hasUpdates = false; boolean hasComments = false; + + viewedPagesPersistenceService.findViewedPages(fileId, file.getCurrentReviewer()); + for (RedactionLogEntry entry : redactionLog.getRedactionLogEntry()) { if (entry.isExcluded()) { continue; @@ -57,16 +71,23 @@ public class AnalysisFlagsCalculationService { hasComments = true; } - if (hasRedactions && hasHints && hasSuggestions && hasImages && hasComments) { + var lastChange = entry.getChanges().isEmpty() ? null : entry.getChanges().get(entry.getChanges().size() - 1); + if (lastChange != null && lastChange.getDateTime() != null && + !entry.getPositions().isEmpty() && viewedPages.get(entry.getPositions().get(0).getPage()).isBefore(lastChange.getDateTime())) { + hasUpdates = true; + } + + + if (hasRedactions && hasHints && hasSuggestions && hasImages && hasComments && hasUpdates) { break; } } - fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments); + fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); } - private String getType(String typeId){ + private String getType(String typeId) { return typeId.split(":")[0]; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java index 1b111d0a9..8f96c1ed0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java @@ -6,7 +6,6 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -31,7 +30,7 @@ public class DossierService { if (dossierPersistenceService.findAllDossiers() .stream() - .anyMatch(p -> !p.getStatus().equals(DossierStatus.DELETED) && p.getDossierName() + .anyMatch(p -> p.getHardDeletedTime() == null && p.getDossierName() .equals(createOrUpdateDossierRequest.getDossierName()))) { throw new ConflictException("Dossier with this name already exists"); } @@ -48,7 +47,7 @@ public class DossierService { if (dossier.getDossierName() .equals(dossierRequest.getDossierName()) || dossierPersistenceService.findAllDossiers() .stream() - .filter(p -> !p.getStatus().equals(DossierStatus.DELETED) && p.getDossierName() + .filter(p -> p.getHardDeletedTime() == null && p.getDossierName() .equals(dossierRequest.getDossierName())) .findAny() .isEmpty()) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index 75f765246..37b0e10f4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -65,7 +65,7 @@ public class FileStatusService { public void setStatusSuccessful(String dossierId, String fileId, FileStatus status, AnalyzeResult analyzeResult) { - fileStatusPersistenceService.updateStatusSuccessful(fileId, analyzeResult.getNumberOfPages(), status, analyzeResult.isHasUpdates(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); + fileStatusPersistenceService.updateStatusSuccessful(fileId, analyzeResult.getNumberOfPages(), status, analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); } @@ -225,13 +225,9 @@ public class FileStatusService { .fileAttributes(convert(fileAttributes)) .build(); - if (!fileStatus.getStatus().equals(FileStatus.UNPROCESSED) && !fileStatus.getStatus() + analyseRequest.setReanalyseOnlyIfPossible(!fileStatus.getStatus().equals(FileStatus.UNPROCESSED) && !fileStatus.getStatus() .equals(FileStatus.FULLREPROCESS) && fileStatus.getRulesVersion() == rulesController.getVersion(dossier.getDossierTemplateId()) && (fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed() - .isAfter(fileStatus.getLastFileAttributeChange()))) { - analyseRequest.setReanalyseOnlyIfPossible(true); - } else { - analyseRequest.setReanalyseOnlyIfPossible(false); - } + .isAfter(fileStatus.getLastFileAttributeChange()))); analyseRequest.setExcludedPages(fileStatus.getExcludedPages()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java index 5ae60c099..643f6f0eb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java @@ -9,19 +9,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import javax.transaction.Transactional; +import java.util.*; import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; -import javax.transaction.Transactional; - @Service @RequiredArgsConstructor public class ManualRedactionProviderService { @@ -59,14 +52,12 @@ public class ManualRedactionProviderService { } - private Set convertEntriesToAdd(Set source){ + private Set convertEntriesToAdd(Set source) { return source.stream().map(entry -> - convert(entry, ManualRedactionEntry.class, new ManualRedactionMapper()) + convert(entry, ManualRedactionEntry.class, new ManualRedactionMapper()) ).collect(Collectors.toSet()); } - - } 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 9617e54af..f40b40351 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 @@ -363,7 +363,7 @@ public class ManualRedactionService { // if it was previously approved, revert the delete if (idRemoval.getStatus() == AnnotationStatus.APPROVED) { - addToDictionary(buildTypeId(redactionLogEntry,dossier), redactionLogEntry.getValue(), dossierId, fileId); + addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); } } } @@ -475,7 +475,6 @@ public class ManualRedactionService { boolean removeFromDictionary, boolean revert) { - if (status == AnnotationStatus.APPROVED) { if (removeFromDictionary) { @@ -495,9 +494,9 @@ public class ManualRedactionService { var redactionLogEntry = redactionLogEntryOptional.get(); if (revert) { - addToDictionary(buildTypeId(redactionLogEntry,dossier), redactionLogEntry.getValue(), dossierId, fileId); + addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); } else { - removeFromDictionary(buildTypeId(redactionLogEntry,dossier), redactionLogEntry.getValue(), dossierId, fileId); + removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId); } } removeRedactionPersistenceService.updateStatus(fileId, annotationId, status, removeFromDictionary); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java index 265477ed4..28ca4371c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java @@ -1,14 +1,12 @@ package com.iqser.red.service.peristence.v1.server.service; -import org.springframework.stereotype.Service; - import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionRequest; import com.iqser.red.service.redaction.v1.model.SectionGrid; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java index 6a0a08f49..2077b900b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadMessageReceiver.java @@ -4,24 +4,12 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration; import com.iqser.red.service.peristence.v1.server.model.DownloadJob; -import com.iqser.red.service.peristence.v1.server.service.DossierService; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; -import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; -import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - @Slf4j @Service @RequiredArgsConstructor @@ -42,7 +30,4 @@ public class DownloadMessageReceiver { } - - - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java index 2354a7f31..32db56f7a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java @@ -109,7 +109,7 @@ public class DownloadPreparationService { private void addReports(ReportResultMessage reportResultMessage, FileSystemBackedArchiver fileSystemBackedArchiver) { long addReportsStart = System.currentTimeMillis(); - + for (StoredFileInformation storedFileInformation : reportResultMessage.getStoredFileInformation()) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java index 3da87074b..bc528517b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadProcessorService.java @@ -1,14 +1,5 @@ package com.iqser.red.service.peristence.v1.server.service.download; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -import javax.transaction.Transactional; - -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.stereotype.Service; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration; @@ -20,8 +11,14 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.download import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; - import lombok.RequiredArgsConstructor; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index 2d75360cc..c1683bb79 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -20,9 +20,9 @@ import java.util.zip.ZipOutputStream; @Slf4j public class FileSystemBackedArchiver implements AutoCloseable { - private Set createdFolders = new HashSet<>(); - private File tempFile; - private ZipOutputStream zipOutputStream; + private final Set createdFolders = new HashSet<>(); + private final File tempFile; + private final ZipOutputStream zipOutputStream; @SneakyThrows public FileSystemBackedArchiver() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java index 8a9c2cf86..76f00ce9e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualRedactionMapper.java @@ -1,13 +1,13 @@ package com.iqser.red.service.peristence.v1.server.utils; -import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; - import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; import java.util.function.BiConsumer; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + public class ManualRedactionMapper implements BiConsumer { @Override diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 0d4f7d80e..7fcff4fd4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -40,7 +40,7 @@ public class DossierTesterAndProvider { assertThat(result.getDossierName()).isEqualTo("Dossier 1"); - Dossier loadedDossier = dossierClient.getDossierById(result.getId()); + Dossier loadedDossier = dossierClient.getDossierById(result.getId(),false); assertThat(loadedDossier).isEqualTo(result); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java index 383e25792..06f6b5aa6 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/AuditTest.java @@ -39,5 +39,8 @@ public class AuditTest extends AbstractPersistenceServerServiceTest { var result = auditClient.search(AuditSearchRequest.builder().category("c1").page(0).pageSize(10).build()); assertThat(result.getTotalHits()).isEqualTo(2); + result = auditClient.search(AuditSearchRequest.builder().build()); + assertThat(result.getTotalHits()).isEqualTo(3); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index d3cfb8953..4d316dc2e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -39,7 +39,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getDossierName()).isEqualTo("Dossier 1 Update"); - var loadedTemplate = dossierClient.getDossierById(updated.getId()); + var loadedTemplate = dossierClient.getDossierById(updated.getId(),false); assertThat(loadedTemplate).isEqualTo(updated); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 33e12a7fb..006844b27 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -98,7 +98,7 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes .reportTemplateIds(availableTemplates.stream().map(a -> a.getTemplateId()).collect(Collectors.toList())) .build(), dossier.getId()); - var updatedDossier = dossierClient.getDossierById(dossier.getId()); + var updatedDossier = dossierClient.getDossierById(dossier.getId(),false); assertThat(updatedDossier.getReportTemplateIds()).isNotEmpty(); downloadClient.prepareDownload(DownloadRequest.builder() 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 1bb97a150..40a102370 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 @@ -174,7 +174,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var loadedFile = fileClient.getFileStatus(dossierId, fileId); - assertThat(loadedFile.isHasAnnotationComments()).isEqualTo(true); assertThat(manualRedactionClient.getAddRedaction(fileId, addRedaction.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId()); assertThat(manualRedactionClient.getRemoveRedaction(fileId, removeRedaction.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId()); assertThat(manualRedactionClient.getForceRedaction(fileId, forceRedaction.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId()); From 564bc29cbdccedb06aacb8360d6506adcb0d0802 Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Wed, 6 Oct 2021 16:48:19 +0200 Subject: [PATCH 16/79] RED-1810: improvement in test for undeleting dossier --- .../service/persistence/FileStatusPersistenceService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index afd8a4fec..af98c69f3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -251,7 +251,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { if (file.getHardDeletedTime() != null) { - throw new BadRequestException("Cannot undelete a hard-deleted file!"); + throw new BadRequestException("Cannot undelete a hard-deleted dossier file!"); } file.setStatus(statusBefore != null ? statusBefore : FileStatus.UNASSIGNED); file.setDeleted(null); From a92870dd5e69134285f9dce00b74ce040e6f48d6 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 08:41:43 +0300 Subject: [PATCH 17/79] Added BG Analysis and required qhere analysisRequired is calculated and how. Fixed more minor issues that where reported for efas --- .../annotations/AddRedactionRequest.java | 6 +- .../v1/api/model/annotations/Comment.java | 5 +- .../v1/api/model/annotations/IdRemoval.java | 4 +- .../annotations/ManualForceRedaction.java | 4 +- .../ManualImageRecategorization.java | 4 +- .../annotations/ManualLegalBasisChange.java | 4 +- .../annotations/ManualRedactionEntry.java | 8 +- .../model/annotations/ManualRedactions.java | 8 +- .../v1/api/model/annotations/Rectangle.java | 1 - .../v1/api/model/annotations/ViewedPage.java | 4 +- .../model/audit/AddNotificationRequest.java | 6 +- .../v1/api/model/audit/AuditModel.java | 8 +- .../v1/api/model/audit/AuditRequest.java | 6 +- .../api/model/audit/AuditSearchRequest.java | 4 +- .../service/v1/api/model/common/Page.java | 6 +- .../CreateOrUpdateDossierTemplateRequest.java | 8 +- .../DossierAttributeConfig.java | 1 - .../dossiertemplate/DossierTemplate.java | 9 +- .../dossiertemplate/ImportCsvResponse.java | 6 +- .../model/dossiertemplate/ReportTemplate.java | 4 +- .../ReportTemplateUploadRequest.java | 7 +- .../DigitalSignatureUpdateModel.java | 6 +- .../dossier/CreateOrUpdateDossierRequest.java | 13 +- .../dossier/DeletedDossier.java | 4 +- .../dossiertemplate/dossier/Dossier.java | 9 +- .../dossier/file/BinaryFileRequest.java | 7 +- .../dossier/file/BinaryFileResult.java | 7 +- .../dossier/file/FileModel.java | 15 +-- .../legalbasis/LegalBasisMapping.java | 6 +- .../dossiertemplate/type/DictionaryEntry.java | 4 +- .../api/model/download/DownloadRequest.java | 8 +- .../v1/api/model/download/DownloadStatus.java | 9 +- .../model/download/SetDownloadedRequest.java | 6 +- .../v1/api/model/license/LicenseReport.java | 8 +- .../model/license/LicenseReportRequest.java | 8 +- .../v1/api/model/license/ReportData.java | 5 +- .../api/model/notification/Notification.java | 8 +- .../v1/api/resources/AuditResource.java | 15 +-- .../v1/api/resources/DictionaryResource.java | 18 +-- .../resources/DigitalSignatureResource.java | 10 +- .../DossierAttributesConfigResource.java | 14 +-- .../resources/DossierAttributesResource.java | 13 +- .../resources/DossierTemplateResource.java | 18 +-- .../v1/api/resources/DownloadResource.java | 15 +-- .../FileAttributesConfigResource.java | 18 +-- .../api/resources/FileAttributesResource.java | 7 +- .../FileStatusProcessingUpdateResource.java | 3 +- .../resources/LegalBasisMappingResource.java | 12 +- .../api/resources/LicenseReportResource.java | 11 +- .../resources/ManualRedactionResource.java | 26 +--- .../api/resources/NotificationResource.java | 18 +-- .../v1/api/resources/ReanalysisResource.java | 10 +- .../api/resources/RedactionLogResource.java | 5 +- .../api/resources/ReportTemplateResource.java | 13 +- .../v1/api/resources/RulesResource.java | 10 +- .../resources/SMTPConfigurationResource.java | 11 +- .../v1/api/resources/StatusResource.java | 19 +-- .../v1/api/resources/UploadResource.java | 15 +-- .../api/resources/UserPreferenceResource.java | 11 +- .../v1/api/resources/ViewedPagesResource.java | 12 +- .../v1/api/resources/WatermarkResource.java | 10 +- .../DictionaryPersistenceService.java | 8 ++ .../LegalBasisMappingPersistenceService.java | 51 ++++++++ .../peristence/v1/server/Application.java | 2 + .../controller/DictionaryController.java | 4 +- .../controller/FileStatusController.java | 21 ++-- .../LegalBasisMappingController.java | 25 +--- .../controller/ReanalysisController.java | 29 +++-- .../ReanalysisRequiredStatusService.java | 112 ++++++++++++++++++ .../scheduler/AutomaticAnalysisScheduler.java | 80 +++++++++++++ .../AbstractPersistenceServerServiceTest.java | 4 + 71 files changed, 472 insertions(+), 414 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java index 5b6c75df4..6030bdbea 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.util.ArrayList; -import java.util.List; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.List; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java index e54047023..c8d12ebf9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Comment.java @@ -1,14 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java index 92659837f..dcf148f45 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/IdRemoval.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java index 3e6b07123..05474427b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualForceRedaction.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java index 37e949bc2..b6726144f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualImageRecategorization.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java index f68c53969..52e6d6219 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualLegalBasisChange.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java index d5f8593c6..51b20c828 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactionEntry.java @@ -1,14 +1,14 @@ 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; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java index a3d0f00e4..9fce6c05a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java @@ -1,16 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.*; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java index 638aa6b8b..7bd332d87 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/Rectangle.java @@ -12,7 +12,6 @@ import lombok.NoArgsConstructor; public class Rectangle { - private float topLeftX; private float topLeftY; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java index 52ab65f5a..73202f13b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ViewedPage.java @@ -1,11 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.annotations; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @AllArgsConstructor @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java index 78d04dd17..28d6f607f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AddNotificationRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; -import java.util.HashMap; -import java.util.Map; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.HashMap; +import java.util.Map; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java index 8bff13bfd..19c14e11b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditModel.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; -import java.time.OffsetDateTime; -import java.util.HashMap; -import java.util.Map; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.HashMap; +import java.util.Map; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java index cda9fdfc5..648959759 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditRequest.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; -import java.util.HashMap; -import java.util.Map; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.HashMap; +import java.util.Map; + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java index 486839b9e..18dae1942 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/audit/AuditSearchRequest.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.audit; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java index a46c4f023..e82fd7c53 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/common/Page.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.common; -import java.util.ArrayList; -import java.util.List; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @NoArgsConstructor @Data diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java index a5c3b14ec..1d1ead5e8 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import java.time.OffsetDateTime; -import java.util.HashSet; -import java.util.Set; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.HashSet; +import java.util.Set; + @Data @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java index 0f9dca1a4..810a6c1f1 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierAttributeConfig.java @@ -1,7 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java index 59f4f53b6..6410932e5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/DossierTemplate.java @@ -1,16 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import java.time.OffsetDateTime; -import java.util.HashSet; -import java.util.Set; - import com.fasterxml.jackson.annotation.JsonProperty; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.HashSet; +import java.util.Set; + @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java index f845832ca..c45af1b14 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ImportCsvResponse.java @@ -1,13 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import java.util.HashSet; -import java.util.Set; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.HashSet; +import java.util.Set; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java index 72a18683f..9a1a700ca 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplate.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import java.time.OffsetDateTime; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java index b929d786b..ea1dabbf1 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUploadRequest.java @@ -1,11 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.NonNull; +import lombok.*; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java index 8272a8f6c..6915076d2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/DigitalSignatureUpdateModel.java @@ -1,10 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; @Data @NoArgsConstructor(access = AccessLevel.PRIVATE) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java index c43e96181..a613bfaa3 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java @@ -1,18 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - @Data @NoArgsConstructor @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java index cc2323abc..ed9b4dcc3 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DeletedDossier.java @@ -1,10 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; -import java.time.OffsetDateTime; - import lombok.Builder; import lombok.Data; +import java.time.OffsetDateTime; + @Data @Builder public class DeletedDossier { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java index cc8fbb774..b5045db33 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java @@ -1,17 +1,16 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; -import java.time.OffsetDateTime; -import java.util.HashSet; -import java.util.Set; - import com.fasterxml.jackson.annotation.JsonProperty; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.HashSet; +import java.util.Set; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java index ef56be47b..624a2997c 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileRequest.java @@ -1,11 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.NonNull; +import lombok.*; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java index 6af087066..02929b66e 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/BinaryFileResult.java @@ -1,11 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.NonNull; +import lombok.*; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java index b79960bce..db8e730a9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java @@ -1,18 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.time.OffsetDateTime; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import com.fasterxml.jackson.annotation.JsonProperty; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - @Data @Builder @AllArgsConstructor @@ -39,6 +38,7 @@ public class FileModel { private boolean hasSuggestions; private boolean hasImages; private boolean hasUpdates; + private boolean analysisRequired; private String uploader; private long dictionaryVersion; private long rulesVersion; @@ -56,6 +56,7 @@ public class FileModel { private Set excludedPages = new HashSet<>(); private Map fileAttributes = new HashMap<>(); private String dossierId; + private String dossierTemplateId; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java index 17d6f5266..f72e0eea2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasisMapping.java @@ -1,11 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis; -import java.util.ArrayList; -import java.util.List; - import lombok.Data; import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.List; + @Data @NoArgsConstructor public class LegalBasisMapping { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java index ee19c64e5..f0c508f89 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/type/DictionaryEntry.java @@ -1,12 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type; -import java.io.Serializable; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; + @Data @Builder @NoArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java index 07060ed5f..ec0227423 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadRequest.java @@ -1,14 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; +import lombok.*; + import java.util.ArrayList; import java.util.List; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java index 281a91307..bc171efc6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/DownloadStatus.java @@ -1,16 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.List; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java index 1dbdc6a90..d99baedd2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/download/SetDownloadedRequest.java @@ -1,10 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.download; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; @Data @Builder diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java index 3ff6f2e3f..547f09af6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReport.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java index d0cdecb85..6c7bd557f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/LicenseReportRequest.java @@ -1,17 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; +import lombok.*; + import java.time.Instant; import java.time.Year; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java index 5e0e850fb..1aefd3a95 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java @@ -1,14 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; -import java.time.Instant; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.Instant; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java index c1e31cd0a..0220c2dd9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/Notification.java @@ -1,14 +1,14 @@ package com.iqser.red.service.persistence.service.v1.api.model.notification; -import java.time.OffsetDateTime; -import java.util.HashMap; -import java.util.Map; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; +import java.util.HashMap; +import java.util.Map; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java index 1b8f434dd..c4e129696 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/AuditResource.java @@ -1,20 +1,15 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditModel; import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditRequest; import com.iqser.red.service.persistence.service.v1.api.model.audit.AuditSearchRequest; import com.iqser.red.service.persistence.service.v1.api.model.audit.CategoryModel; import com.iqser.red.service.persistence.service.v1.api.model.common.Page; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; public interface AuditResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java index 20cd4496b..405c01444 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DictionaryResource.java @@ -1,21 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -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 org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; +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 DictionaryResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java index 90c7b8ef9..dd5138e6c 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DigitalSignatureResource.java @@ -1,15 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature; import org.springframework.http.HttpStatus; 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.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.DigitalSignature; +import org.springframework.web.bind.annotation.*; @ResponseStatus(value = HttpStatus.OK) public interface DigitalSignatureResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java index 265126961..c7b27a1f3 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java @@ -1,19 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; import org.springframework.http.HttpStatus; 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.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.*; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; +import java.util.List; public interface DossierAttributesConfigResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java index 168e48815..9bc8cd486 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesResource.java @@ -1,15 +1,10 @@ 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.dossiertemplate.dossier.DossierAttribute; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; public interface DossierAttributesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java index 1a8f38a0a..1377947bd 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java @@ -1,20 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -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 org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; public interface DossierTemplateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java index c0790b05f..bba222ef2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DownloadResource.java @@ -1,18 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -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 org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatus; +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 DownloadResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java index 0c7463326..4e8adbf92 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java @@ -1,20 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -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.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.FileAttributesGeneralConfiguration; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; public interface FileAttributesConfigResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java index 01a05a2eb..57d2e967b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesResource.java @@ -1,14 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.Map; - +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; import org.springframework.http.MediaType; 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.dossiertemplate.ImportCsvRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; +import java.util.Map; public interface FileAttributesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java index b086b5be1..fdef5cc3b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileStatusProcessingUpdateResource.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; @@ -7,8 +8,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; -import com.iqser.red.service.redaction.v1.model.AnalyzeResult; - public interface FileStatusProcessingUpdateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java index 50917dca5..7b7811efa 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java @@ -1,17 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -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 org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.*; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import java.util.List; public interface LegalBasisMappingResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java index c3b19a6b7..ee488194b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LicenseReportResource.java @@ -1,15 +1,10 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.license.LicenseReport; import com.iqser.red.service.persistence.service.v1.api.model.license.LicenseReportRequest; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; public interface LicenseReportResource { 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 3c6d39ef1..65b20c199 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 @@ -1,30 +1,10 @@ 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.common.JSONPrimitive; import org.springframework.http.HttpStatus; 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 org.springframework.web.bind.annotation.ResponseStatus; - -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.Comment; -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.IdRemoval; -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.ManualAddResponse; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualForceRedaction; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualImageRecategorization; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualLegalBasisChange; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import org.springframework.web.bind.annotation.*; @ResponseStatus(value = HttpStatus.OK) public interface ManualRedactionResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java index 040eb2e99..23dcdb924 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java @@ -1,20 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - -import org.springframework.http.HttpStatus; -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 org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification; +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 NotificationResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java index 7433a66db..114546d8d 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java @@ -1,13 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.Set; - import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; @ResponseStatus(value = HttpStatus.NO_CONTENT) public interface ReanalysisResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java index 132654ef9..913c8e9f0 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RedactionLogResource.java @@ -1,5 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.SectionGrid; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; @@ -7,9 +9,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; -import com.iqser.red.service.redaction.v1.model.RedactionLog; -import com.iqser.red.service.redaction.v1.model.SectionGrid; - @ResponseStatus(value = HttpStatus.OK) public interface RedactionLogResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java index bf25ba0ef..8b840581d 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java @@ -1,17 +1,12 @@ 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.dossiertemplate.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateDownload; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; public interface ReportTemplateResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java index c53d89006..790fc80f5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/RulesResource.java @@ -1,15 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +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.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import org.springframework.web.bind.annotation.*; public interface RulesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java index 8bed05d7c..9839a0f59 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/SMTPConfigurationResource.java @@ -1,16 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.SMTPConfiguration; import org.springframework.http.HttpStatus; 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.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.SMTPConfiguration; +import org.springframework.web.bind.annotation.*; public interface SMTPConfigurationResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index 41dcce4fe..fda563f8f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -1,20 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; -import java.util.Set; - -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -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 org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Set; public interface StatusResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java index 539f187bb..9653a0064 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UploadResource.java @@ -1,18 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.Set; - -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseStatus; - import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileResult; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; @ResponseStatus(value = HttpStatus.OK) public interface UploadResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java index b8ec11568..5534c7c48 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/UserPreferenceResource.java @@ -1,16 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.fasterxml.jackson.databind.JsonNode; import org.springframework.http.HttpStatus; 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.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.web.bind.annotation.*; public interface UserPreferenceResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java index c4bf19617..d769cfad9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ViewedPagesResource.java @@ -1,17 +1,11 @@ package com.iqser.red.service.persistence.service.v1.api.resources; -import java.util.List; - +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage; import org.springframework.http.HttpStatus; 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 org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.*; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage; +import java.util.List; @ResponseStatus(value = HttpStatus.OK) public interface ViewedPagesResource { diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java index afb823905..d4cb47872 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java @@ -1,15 +1,9 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import org.springframework.http.HttpStatus; 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 org.springframework.web.bind.annotation.ResponseStatus; - -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; +import org.springframework.web.bind.annotation.*; @ResponseStatus(value = HttpStatus.OK) public interface WatermarkResource { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index aa034bcef..212a9261b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -116,5 +116,13 @@ public class DictionaryPersistenceService { typeRepository.updateByIdSetIncrementVersionByOne(typeId); } + public long getVersion(String dossierTemplateId) { + return getAllTypesForDossierTemplate(dossierTemplateId).stream().map(TypeEntity::getVersion).reduce(0L, Long::sum); + } + + public long getVersionForDossier(String dossierId) { + return getAllTypesForDossier(dossierId).stream().map(TypeEntity::getVersion).reduce(0L, Long::sum); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java new file mode 100644 index 000000000..d36d230a1 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java @@ -0,0 +1,51 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisMappingEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.List; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + + +@Service +@RequiredArgsConstructor +public class LegalBasisMappingPersistenceService { + + + private final LegalBasisMappingRepository legalBasisMappingRepository; + + + @Transactional + public void setLegalBasisMapping(String dossierTemplateId, List legalBasisMapping) { + + legalBasisMappingRepository.findById(dossierTemplateId).ifPresentOrElse((lbm) -> { + lbm.setVersion(lbm.getVersion() + 1); + lbm.setLegalBasis(convert(legalBasisMapping, LegalBasisEntity.class)); + legalBasisMappingRepository.save(lbm); + }, () -> { + var lbm = new LegalBasisMappingEntity(); + lbm.setDossierTemplateId(dossierTemplateId); + lbm.setLegalBasis(convert(legalBasisMapping, LegalBasisEntity.class)); + lbm.setVersion(1); + legalBasisMappingRepository.save(lbm); + }); + + } + + + public List getLegalBasisMapping(String dossierTemplateId) { + return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getLegalBasis) + .orElseThrow(() -> new NotFoundException("Legal Basis Not configured!")); + } + + public long getVersion(String dossierTemplateId) { + return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getVersion).orElse(0L); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index 30f51e2cf..5c2fa4daa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -20,9 +20,11 @@ import org.springframework.retry.backoff.ExponentialBackOffPolicy; import org.springframework.retry.policy.SimpleRetryPolicy; import org.springframework.retry.support.RetryTemplate; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; @EnableAsync @EnableRetry +@EnableScheduling @EnableConfigurationProperties(FileManagementServiceSettings.class) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class}) @Import({DefaultWebMvcConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, CleanupDownloadSchedulerConfiguration.class}) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index 2e012d1fd..11c25fe4f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -259,12 +259,12 @@ public class DictionaryController implements DictionaryResource { @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return getAllTypesForDossierTemplate(dossierTemplateId).stream().map(Type::getVersion).reduce(0L, Long::sum); + return dictionaryPersistenceService.getVersion(dossierTemplateId); } @Override public long getVersionForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId) { - return getAllTypesForDossier(dossierId).stream().map(Type::getVersion).reduce(0L, Long::sum); + return dictionaryPersistenceService.getVersionForDossier(dossierId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 4eee401c2..06c1c189c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -1,9 +1,6 @@ package com.iqser.red.service.peristence.v1.server.controller; -import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService; -import com.iqser.red.service.peristence.v1.server.service.DossierService; -import com.iqser.red.service.peristence.v1.server.service.ExcludeFromAnalysisService; -import com.iqser.red.service.peristence.v1.server.service.FileStatusService; +import com.iqser.red.service.peristence.v1.server.service.*; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; @@ -30,33 +27,34 @@ public class FileStatusController implements StatusResource { private final DossierService dossierService; private final ExcludeFromAnalysisService excludeFromAnalysis; private final AnalysisFlagsCalculationService analysisFlagsCalculationService; + private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; @Override public List getAllStatuses() { - return convert(fileStatusService.getAllStatuses() + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() .stream() .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) - .collect(Collectors.toList()), FileModel.class, new FileModelMapper()); + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @Override public List getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { - return convert(fileStatusService.getDossierStatus(dossierId) + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) .stream() .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) - .collect(Collectors.toList()), FileModel.class, new FileModelMapper()); + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @Override public List getSoftDeletedDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { - return convert(fileStatusService.getDossierStatus(dossierId) + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) .stream() .filter(f -> f.getStatus().equals(FileStatus.DELETED) && f.getHardDeletedTime() == null) - .collect(Collectors.toList()), FileModel.class, new FileModelMapper()); + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @@ -64,7 +62,8 @@ public class FileStatusController implements StatusResource { public FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { - return convert(fileStatusService.getStatus(fileId), FileModel.class, new FileModelMapper()); + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements( + convert(fileStatusService.getStatus(fileId), FileModel.class, new FileModelMapper())); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java index 28b3abb3a..af9d22726 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java @@ -1,9 +1,6 @@ package com.iqser.red.service.peristence.v1.server.controller; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisMappingEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; import com.iqser.red.service.persistence.service.v1.api.resources.LegalBasisMappingResource; import lombok.RequiredArgsConstructor; @@ -22,37 +19,25 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class LegalBasisMappingController implements LegalBasisMappingResource { - private final LegalBasisMappingRepository legalBasisMappingRepository; + private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; @Override @Transactional public void setLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List legalBasisMapping) { - legalBasisMappingRepository.findById(dossierTemplateId).ifPresentOrElse((lbm) -> { - lbm.setVersion(lbm.getVersion() + 1); - lbm.setLegalBasis(convert(legalBasisMapping, LegalBasisEntity.class)); - legalBasisMappingRepository.save(lbm); - }, () -> { - var lbm = new LegalBasisMappingEntity(); - lbm.setDossierTemplateId(dossierTemplateId); - lbm.setLegalBasis(convert(legalBasisMapping, LegalBasisEntity.class)); - lbm.setVersion(1); - legalBasisMappingRepository.save(lbm); - }); + legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, legalBasisMapping); } @Override @Transactional public List getLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return convert( - legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getLegalBasis) - .orElseThrow(() -> new NotFoundException("Legal Basis Not configured!")), LegalBasis.class); + return convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), LegalBasis.class); } @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getVersion).orElse(0L); + return legalBasisMappingPersistenceService.getVersion(dossierTemplateId); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 5456edd86..7ed792dee 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -3,10 +3,13 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.google.common.collect.Sets; import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.peristence.v1.server.service.IndexingService; +import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService; +import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource; import lombok.RequiredArgsConstructor; @@ -22,6 +25,8 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + @Slf4j @RestController @RequiredArgsConstructor @@ -32,6 +37,7 @@ public class ReanalysisController implements ReanalysisResource { private final DictionaryController dictionaryClient; private final RulesController rulesClient; private final IndexingService indexingService; + private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; @Override @@ -146,18 +152,19 @@ public class ReanalysisController implements ReanalysisResource { private void reanalyseFiles(String dossierId, boolean force, List filesToReanalyse) { - var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - // TODO - var dictionaryVersion = dictionaryClient.getVersion(dossier.getDossierTemplateId()); - var dossierDictionaryVersion = dictionaryClient.getVersionForDossier(dossierId); - var rulesVersion = rulesClient.getVersion(dossier.getDossierTemplateId()); + if (force) { + filesToReanalyse.forEach(file -> { + fileStatusService.setStatusReprocess(dossierId, file.getId(), 1); + }); + } else { + var enhancedAndConvertedFiles = reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert( + fileStatusService.getAllStatuses(), FileModel.class, new FileModelMapper())); + + enhancedAndConvertedFiles.forEach(file -> { + fileStatusService.setStatusReprocess(dossierId, file.getId(), 1); + }); + } - filesToReanalyse.forEach(fileStatus -> { - if (fileStatus.getStatus().equals(FileStatus.ERROR) || !allManualRedactionsApplied(fileStatus) || !allFileAttributesChangesApplied(fileStatus) - || fileStatus.getRulesVersion() < rulesVersion || fileStatus.getDictionaryVersion() < dictionaryVersion || fileStatus.getDossierDictionaryVersion() < dossierDictionaryVersion || force) { - fileStatusService.setStatusReprocess(dossierId, fileStatus.getId(), 1); - } - }); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java new file mode 100644 index 000000000..c4eda84cb --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java @@ -0,0 +1,112 @@ +package com.iqser.red.service.peristence.v1.server.service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService.VersionType.*; + +@Service +@RequiredArgsConstructor +public class ReanalysisRequiredStatusService { + + private final DictionaryPersistenceService dictionaryPersistenceService; + private final RulesPersistenceService rulesPersistenceService; + private final DossierPersistenceService dossierPersistenceService; + private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; + + + public FileModel enhanceFileStatusWithAnalysisRequirements(FileModel fileModel) { + return enhanceFileStatusWithAnalysisRequirements(Collections.singletonList(fileModel)).iterator().next(); + } + + public List enhanceFileStatusWithAnalysisRequirements(List fileModels) { + + Map> dossierTemplateVersionMap = new HashMap<>(); + Map dossierVersionMap = new HashMap<>(); + Map dossierMap = new HashMap<>(); + fileModels.forEach(entry -> entry.setAnalysisRequired(computeAnalysisRequired(entry, dossierTemplateVersionMap, dossierVersionMap, dossierMap))); + + return fileModels; + } + + private boolean computeAnalysisRequired(FileModel fileStatus, + Map> dossierTemplateVersionMap, + Map dossierVersionMap, + Map dossierMap) { + switch (fileStatus.getStatus()) { + case ERROR: + return true; + case UNASSIGNED: + case UNDER_REVIEW: + case UNDER_APPROVAL: + if (fileStatus.getLastProcessed() == null) { + return true; + } + if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) { + return true; + } else { + return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap); + } + default: + return false; + } + + } + + private boolean requiresReanalysisBasedOnVersionDifference(FileModel fileStatus, + Map> dossierTemplateVersionMap, + Map dossierVersionMap, + Map dossierMap) { + + // enhance with dossierTemplateId + DossierEntity dossier = dossierMap.computeIfAbsent(fileStatus.getDossierId(), k -> dossierPersistenceService.getAndValidateDossier(fileStatus.getDossierId())); + fileStatus.setDossierTemplateId(dossier.getDossierTemplateId()); + + // get relevant versions + var dossierTemplateVersions = dossierTemplateVersionMap.computeIfAbsent(fileStatus.getDossierTemplateId(), + k -> buildVersionData(fileStatus.getDossierTemplateId())); + var dossierDictionaryVersion = dossierVersionMap.computeIfAbsent(fileStatus.getDossierId(), + k -> getDossierVersionData(fileStatus.getDossierId())); + + // compute matches + var rulesVersionMatches = fileStatus.getRulesVersion() == dossierTemplateVersions.getOrDefault(RULES, -1L); + var dictionaryVersionMatches = fileStatus.getDictionaryVersion() == dossierTemplateVersions.getOrDefault(DICTIONARY, -1L); + var legalBasisVersionMatches = fileStatus.getLegalBasisVersion() == dossierTemplateVersions.getOrDefault(LEGAL_BASIS, -1L); + var dossierDictionaryVersionMatches = fileStatus.getDossierDictionaryVersion() == dossierDictionaryVersion; + + return !(rulesVersionMatches && dictionaryVersionMatches && legalBasisVersionMatches && dossierDictionaryVersionMatches); + + } + + private Long getDossierVersionData(String dossierId) { + return dictionaryPersistenceService.getVersionForDossier(dossierId); + } + + private Map buildVersionData(String dossierTemplateId) { + + var versions = new HashMap(); + + versions.put(RULES, rulesPersistenceService.getRules(dossierTemplateId).getVersion()); + versions.put(DICTIONARY, dictionaryPersistenceService.getVersion(dossierTemplateId)); + versions.put(LEGAL_BASIS, legalBasisMappingPersistenceService.getVersion(dossierTemplateId)); + + + return versions; + } + + public enum VersionType { + RULES, DICTIONARY, LEGAL_BASIS + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java new file mode 100644 index 000000000..3f6850683 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -0,0 +1,80 @@ +package com.iqser.red.service.peristence.v1.server.service.scheduler; + +import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration; +import com.iqser.red.service.peristence.v1.server.service.FileStatusService; +import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService; +import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpAdmin; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +@Slf4j +@Service +@RequiredArgsConstructor +public class AutomaticAnalysisScheduler { + + + private final FileStatusService fileStatusService; + private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; + private final AmqpAdmin amqpAdmin; + + + @Scheduled(fixedDelay = 10000, initialDelay = 10000) + public void checkFilesThatRequireReanalysisAndQueueIfPossible() { + + var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE); + if (redactionQueueInfo != null) { + log.info("Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", + MessagingConfiguration.REDACTION_QUEUE, + redactionQueueInfo.getMessageCount(), + redactionQueueInfo.getConsumerCount()); + // only 1 file in queue + if (redactionQueueInfo.getMessageCount() <= 1) { + // queue up 5 files + var allStatuses = getAllStatuses().iterator(); + int queuedCount = 0; + + while (queuedCount < 5 && allStatuses.hasNext()) { + var next = allStatuses.next(); + if (next.isAnalysisRequired()) { + queuedCount += 1; + log.info("Queued file: {} for automatic analysis!", next.getFilename()); + fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); + } + } + } + + } else { + log.info("Failed to obtain queue info for queue: {}", MessagingConfiguration.REDACTION_QUEUE); + } + } + + + private List getAllStatuses() { + + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() + .stream() + .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) + .filter(f -> !f.getStatus().equals(FileStatus.APPROVED)) + .filter(f -> !isProcessing(f)) + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); + } + + private boolean isProcessing(FileEntity file) { + return file.getStatus() == FileStatus.PROCESSING || + file.getStatus() == FileStatus.REPROCESS || + file.getStatus() == FileStatus.FULLREPROCESS || + file.getStatus() == FileStatus.INDEXING || + file.getStatus() == FileStatus.OCR_PROCESSING; + } +} 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 4e33f4326..d14aa8cf0 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 @@ -18,6 +18,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.mockito.Mockito; +import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -44,6 +45,8 @@ import java.util.TimeZone; @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public abstract class AbstractPersistenceServerServiceTest { + @MockBean + private AmqpAdmin amqpAdmin; @MockBean protected RabbitTemplate rabbitTemplate; @MockBean @@ -108,6 +111,7 @@ public abstract class AbstractPersistenceServerServiceTest { doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); + when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null); when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> new PdfTronOptimizeResponse(((PdfTronOptimizeRequest) args.getArguments()[0]).getDocument())); when(pdfTronRedactionClient.redact(Mockito.any())).thenAnswer((args) -> From c0ea73f200df85991fe1527d07c1033d28b0fce5 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 09:12:17 +0300 Subject: [PATCH 18/79] added default rules for new dossier template --- .../persistence/RulesPersistenceService.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java index fb578e6ca..56435d633 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RulesPersistenceService.java @@ -1,7 +1,6 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.RuleSetEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -13,11 +12,26 @@ import javax.transaction.Transactional; @SuppressWarnings("PMD.TooManyStaticImports") public class RulesPersistenceService { - private static final String RULES_NOT_FOUND = "Could not find rules in database."; + private final static String DEFAULT_RULES = "" + + "package drools\n" + + "\n" + + "import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" + + "\n" + + "global Section section\n" + + "\n" + + "// --------------------------------------- Your rules below this line--------------------------------------------------"; + private final RuleSetRepository ruleSetRepository; public RuleSetEntity getRules(String dossierTemplateId) { - return ruleSetRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException(RULES_NOT_FOUND)); + return ruleSetRepository.findById(dossierTemplateId).orElseGet(() -> { + RuleSetEntity ruleSet = new RuleSetEntity(); + ruleSet.setDossierTemplateId(dossierTemplateId); + ruleSet.setValue(DEFAULT_RULES); + ruleSet.setVersion(1); + + return ruleSetRepository.save(ruleSet); + }); } @Transactional From e763836eb5e1dfff51e6e32a4598ef97eb00aeed Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 09:20:51 +0300 Subject: [PATCH 19/79] fixed err --- .../persistence/AuditPersistenceService.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java index 04880786e..6131ae37a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java @@ -14,9 +14,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; -import java.util.HashMap; import java.util.List; -import java.util.Map; import static com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository.*; @@ -25,7 +23,6 @@ import static com.iqser.red.service.persistence.management.v1.processor.service. @RequiredArgsConstructor public class AuditPersistenceService { - private final static String AUDIT_LOG_CATEGORY = "AUDIT_LOG"; private final AuditRepository auditRepository; @@ -74,21 +71,4 @@ public class AuditPersistenceService { } - private Map searchRequestToMap(AuditSearchRequest auditSearchRequest) { - - var map = new HashMap(); - - map.put("userId", auditSearchRequest.getUserId()); - map.put("category", auditSearchRequest.getCategory()); - map.put("objectId", auditSearchRequest.getObjectId()); - map.put("from", auditSearchRequest.getFrom()); - map.put("to", auditSearchRequest.getTo()); - map.put("page", auditSearchRequest.getPage()); - map.put("pageSize", auditSearchRequest.getPageSize()); - - return map; - - } - - } From 38ed95ea949c1848f4aee56f9313fa698405cdab Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 09:22:34 +0300 Subject: [PATCH 20/79] fixed compile error --- .../v1/server/controller/ReanalysisController.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 7ed792dee..8df0a1d15 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -168,17 +168,4 @@ public class ReanalysisController implements ReanalysisResource { } - private boolean allManualRedactionsApplied(FileEntity fileStatus) { - - return fileStatus.getLastManualRedaction() == null || fileStatus.getLastProcessed() == null || fileStatus.getLastProcessed() - .isAfter(fileStatus.getLastManualRedaction()); - } - - - private boolean allFileAttributesChangesApplied(FileEntity fileStatus) { - - return fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed() == null || fileStatus.getLastProcessed() - .isAfter(fileStatus.getLastFileAttributeChange()); - } - } From 082027f7b6bd82cd4c2a91290006f944910cfe06 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 10:51:21 +0300 Subject: [PATCH 21/79] fixed NPE --- .../v1/server/service/AnalysisFlagsCalculationService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index f8deeb68f..66186b731 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -72,12 +72,12 @@ public class AnalysisFlagsCalculationService { } var lastChange = entry.getChanges().isEmpty() ? null : entry.getChanges().get(entry.getChanges().size() - 1); - if (lastChange != null && lastChange.getDateTime() != null && - !entry.getPositions().isEmpty() && viewedPages.get(entry.getPositions().get(0).getPage()).isBefore(lastChange.getDateTime())) { + + var viewedPage = entry.getPositions().isEmpty() ? null : viewedPages.get(entry.getPositions().get(0).getPage()); + if (lastChange != null && lastChange.getDateTime() != null && viewedPage != null && viewedPage.isBefore(lastChange.getDateTime())) { hasUpdates = true; } - if (hasRedactions && hasHints && hasSuggestions && hasImages && hasComments && hasUpdates) { break; } From cc6077f22c359eb8b2be15d8ae2a12e5d06e889e Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 11:07:49 +0300 Subject: [PATCH 22/79] adde dlogs --- .../v1/server/service/scheduler/AutomaticAnalysisScheduler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index 3f6850683..9ba5347dd 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -43,6 +43,7 @@ public class AutomaticAnalysisScheduler { // queue up 5 files var allStatuses = getAllStatuses().iterator(); int queuedCount = 0; + log.info("Files that require reanalysis: {}", allStatuses); while (queuedCount < 5 && allStatuses.hasNext()) { var next = allStatuses.next(); From dc047675f17bd3f3562f837354f0b031ef586b74 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 11:22:17 +0300 Subject: [PATCH 23/79] upgraded persistence service --- .../service/scheduler/AutomaticAnalysisScheduler.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index 9ba5347dd..c59d22c3e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -41,12 +41,13 @@ public class AutomaticAnalysisScheduler { // only 1 file in queue if (redactionQueueInfo.getMessageCount() <= 1) { // queue up 5 files - var allStatuses = getAllStatuses().iterator(); + var allStatuses= getAllStatuses(); + var allStatusesIterator = allStatuses.iterator(); int queuedCount = 0; - log.info("Files that require reanalysis: {}", allStatuses); + log.info("Files that require reanalysis: {}", allStatuses.size()); - while (queuedCount < 5 && allStatuses.hasNext()) { - var next = allStatuses.next(); + while (queuedCount < 5 && allStatusesIterator.hasNext()) { + var next = allStatusesIterator.next(); if (next.isAnalysisRequired()) { queuedCount += 1; log.info("Queued file: {} for automatic analysis!", next.getFilename()); From 25c946a9596333e1a223f53e98c4f8c99738fcec Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 11:33:35 +0300 Subject: [PATCH 24/79] Automatic Analysis Scheduler Update --- .../scheduler/AutomaticAnalysisScheduler.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index c59d22c3e..f01d8b0fc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -10,6 +10,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpAdmin; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -24,6 +25,8 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class AutomaticAnalysisScheduler { + @Value("${persistence-service.automaticAnalysis.pageFactor:500}") + private int pageFactor; private final FileStatusService fileStatusService; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final AmqpAdmin amqpAdmin; @@ -39,17 +42,20 @@ public class AutomaticAnalysisScheduler { redactionQueueInfo.getMessageCount(), redactionQueueInfo.getConsumerCount()); // only 1 file in queue - if (redactionQueueInfo.getMessageCount() <= 1) { + var consumerCount = redactionQueueInfo.getConsumerCount(); + if (redactionQueueInfo.getMessageCount() <= consumerCount) { // queue up 5 files - var allStatuses= getAllStatuses(); + var allStatuses = getAllStatuses(); var allStatusesIterator = allStatuses.iterator(); - int queuedCount = 0; log.info("Files that require reanalysis: {}", allStatuses.size()); - while (queuedCount < 5 && allStatusesIterator.hasNext()) { + var worstCaseScenarioQueuedPages = 0; + + while (worstCaseScenarioQueuedPages < pageFactor * consumerCount && allStatusesIterator.hasNext()) { var next = allStatusesIterator.next(); if (next.isAnalysisRequired()) { - queuedCount += 1; + // in case the file doesn't have numberOfPages set, we assume an average. + worstCaseScenarioQueuedPages += next.getNumberOfPages() <= 0 ? pageFactor : next.getNumberOfPages(); log.info("Queued file: {} for automatic analysis!", next.getFilename()); fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); } From b151cee04baf6b0f970984e8162fd07c03997a74 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 7 Oct 2021 11:56:57 +0300 Subject: [PATCH 25/79] improved code --- .../scheduler/AutomaticAnalysisScheduler.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index f01d8b0fc..826ef8a82 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import java.util.List; import java.util.stream.Collectors; @@ -31,6 +32,11 @@ public class AutomaticAnalysisScheduler { private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final AmqpAdmin amqpAdmin; + @PostConstruct + protected void postConstruct() { + log.info("Automatic Analysis pageFactor: {}", pageFactor); + } + @Scheduled(fixedDelay = 10000, initialDelay = 10000) public void checkFilesThatRequireReanalysisAndQueueIfPossible() { @@ -53,12 +59,10 @@ public class AutomaticAnalysisScheduler { while (worstCaseScenarioQueuedPages < pageFactor * consumerCount && allStatusesIterator.hasNext()) { var next = allStatusesIterator.next(); - if (next.isAnalysisRequired()) { - // in case the file doesn't have numberOfPages set, we assume an average. - worstCaseScenarioQueuedPages += next.getNumberOfPages() <= 0 ? pageFactor : next.getNumberOfPages(); - log.info("Queued file: {} for automatic analysis!", next.getFilename()); - fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); - } + // in case the file doesn't have numberOfPages set, we assume an average. + worstCaseScenarioQueuedPages += next.getNumberOfPages() <= 0 ? pageFactor : next.getNumberOfPages(); + log.info("Queued file: {} for automatic analysis!", next.getFilename()); + fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); } } @@ -75,7 +79,7 @@ public class AutomaticAnalysisScheduler { .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) .filter(f -> !f.getStatus().equals(FileStatus.APPROVED)) .filter(f -> !isProcessing(f)) - .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())).stream().filter(FileModel::isAnalysisRequired).collect(Collectors.toList()); } private boolean isProcessing(FileEntity file) { From 99801f0801c2b2bdd0444d9d5b9dbb23f93b58f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 7 Oct 2021 12:44:51 +0200 Subject: [PATCH 26/79] RED-2360: Fixed priority queueing --- .../v1/server/controller/ReanalysisController.java | 4 ++-- .../peristence/v1/server/service/FileService.java | 3 +-- .../v1/server/service/ManualRedactionService.java | 12 ++++++------ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 8df0a1d15..c5ca7d777 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -154,14 +154,14 @@ public class ReanalysisController implements ReanalysisResource { if (force) { filesToReanalyse.forEach(file -> { - fileStatusService.setStatusReprocess(dossierId, file.getId(), 1); + fileStatusService.setStatusReprocess(dossierId, file.getId(), 2); }); } else { var enhancedAndConvertedFiles = reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert( fileStatusService.getAllStatuses(), FileModel.class, new FileModelMapper())); enhancedAndConvertedFiles.forEach(file -> { - fileStatusService.setStatusReprocess(dossierId, file.getId(), 1); + fileStatusService.setStatusReprocess(dossierId, file.getId(), 2); }); } 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 cf12a7c6f..65f7948c2 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 @@ -81,8 +81,7 @@ public class FileService { } else { // the file is new, should create a new status for it. log.info("File {} has no status yet, creating one and setting to unprocessed.", request.getFilename()); - fileStatusService.createStatus(request.getDossierId(), fileId, request.getUploader(), request.getFilename(), request - .getData().length); + fileStatusService.createStatus(request.getDossierId(), fileId, request.getUploader(), request.getFilename(), 1); } return new JSONPrimitive<>(fileId); } 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 f40b40351..975245a5f 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 @@ -188,7 +188,7 @@ public class ManualRedactionService { fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } return ManualAddResponse.builder() @@ -321,7 +321,7 @@ public class ManualRedactionService { fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } } @@ -410,10 +410,10 @@ public class ManualRedactionService { ManualImageRecategorizationEntity imageRecategorization = recategorizationPersistenceService.findRecategorization(fileId, annotationId); // if it was previously approved, revert the delete if (imageRecategorization.getStatus() == AnnotationStatus.APPROVED) { - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } } else if (annotationStatus.equals(AnnotationStatus.APPROVED)) { - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } dossierPersistenceService.getAndValidateDossier(dossierId); @@ -510,7 +510,7 @@ public class ManualRedactionService { log.debug("Adding entries for {} / {}", dossierId, fileId); dictionaryController.addEntries(typeId, List.of(value), false); - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } catch (Exception e) { throw new BadRequestException(e.getMessage()); } @@ -522,7 +522,7 @@ public class ManualRedactionService { try { log.debug("Deleting entries for {} / {}", dossierId, fileId); dictionaryController.deleteEntries(typeId, List.of(value)); - fileStatusService.setStatusReprocess(dossierId, fileId, 100); + fileStatusService.setStatusReprocess(dossierId, fileId, 2); } catch (FeignException e) { throw new BadRequestException(e.getMessage()); } From e3b1f85dcf177ce026ae4473d2eb29f601b3115d Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 7 Oct 2021 13:01:38 +0200 Subject: [PATCH 27/79] Use platform-docker-dependency version 1.1.0 which contains bugfix for Windows systems --- persistence-service-image-v1/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-image-v1/pom.xml b/persistence-service-image-v1/pom.xml index c14e9c1bb..4472353ac 100644 --- a/persistence-service-image-v1/pom.xml +++ b/persistence-service-image-v1/pom.xml @@ -5,7 +5,7 @@ com.iqser.red platform-docker-dependency - 1.0.1 + 1.1.0 4.0.0 From 368313fe758feac3f98658efe8eaed86fee717c0 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 7 Oct 2021 13:55:56 +0200 Subject: [PATCH 28/79] Just a workaround for testing with windows to solve issues with PosixFilePermission --- .../v1/server/utils/FileSystemBackedArchiver.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index c1683bb79..d00029df0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -6,6 +6,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import java.io.*; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; @@ -24,10 +25,20 @@ public class FileSystemBackedArchiver implements AutoCloseable { private final File tempFile; private final ZipOutputStream zipOutputStream; + private static final boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix"); + @SneakyThrows public FileSystemBackedArchiver() { - FileAttribute> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------")); - tempFile = Files.createTempFile("archive", ".zip", attr).toFile(); + // TODO this is just a workaround for testing + if (isPosix) { + FileAttribute> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------")); + tempFile = Files.createTempFile("archive", ".zip", attr).toFile(); + } else { + tempFile = Files.createTempFile("archive", ".zip").toFile(); + tempFile.setReadable(true); + tempFile.setWritable(true); + tempFile.setExecutable(true); + } zipOutputStream = new ZipOutputStream(new FileOutputStream(tempFile)); } From f7e8bee7cd3b8af97fd239c0425623f98ff1dd88 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 7 Oct 2021 15:51:03 +0200 Subject: [PATCH 29/79] Bugfix with 'posix:permissions' for Windows systems --- .../v1/server/utils/FileSystemBackedArchiver.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index d00029df0..63ececd41 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -18,6 +18,8 @@ import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import org.apache.commons.lang3.SystemUtils; + @Slf4j public class FileSystemBackedArchiver implements AutoCloseable { @@ -25,20 +27,18 @@ public class FileSystemBackedArchiver implements AutoCloseable { private final File tempFile; private final ZipOutputStream zipOutputStream; - private static final boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix"); - @SneakyThrows public FileSystemBackedArchiver() { - // TODO this is just a workaround for testing - if (isPosix) { + if(SystemUtils.IS_OS_UNIX) { FileAttribute> attr = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------")); tempFile = Files.createTempFile("archive", ".zip", attr).toFile(); } else { tempFile = Files.createTempFile("archive", ".zip").toFile(); - tempFile.setReadable(true); - tempFile.setWritable(true); - tempFile.setExecutable(true); + tempFile.setReadable(true, true); + tempFile.setWritable(true, true); + tempFile.setExecutable(true, true); } + zipOutputStream = new ZipOutputStream(new FileOutputStream(tempFile)); } From f76ec712c9d5cf37e2ea07128f5c4a0038092091 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 7 Oct 2021 16:54:00 +0200 Subject: [PATCH 30/79] Bugfix with time precision in windows by adding '.truncatedTo(ChronoUnit.MILLIS)' to 'OffsetDateTime.now()' --- .../AddRedactionPersistenceService.java | 7 ++-- .../persistence/AuditPersistenceService.java | 7 ++-- .../DossierPersistenceService.java | 7 ++-- .../DossierTemplatePersistenceService.java | 7 ++-- .../DownloadStatusPersistenceService.java | 5 +-- .../FileStatusPersistenceService.java | 33 ++++++++++--------- .../service/ManualRedactionService.java | 3 +- .../download/DownloadCleanupService.java | 3 +- .../DossierTemplateTesterAndProvider.java | 9 ++--- .../service/DossierTesterAndProvider.java | 3 +- .../integration/tests/LicenseReportTest.java | 5 +-- 11 files changed, 50 insertions(+), 39 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java index 5b45bcb0f..437a5affc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -32,7 +33,7 @@ public class AddRedactionPersistenceService { ManualRedactionEntryEntity manualRedactionEntry = new ManualRedactionEntryEntity(); manualRedactionEntry.setId(new AnnotationEntityId(annotationId, fileId)); BeanUtils.copyProperties(addRedactionRequest, manualRedactionEntry); - manualRedactionEntry.setRequestDate(OffsetDateTime.now()); + manualRedactionEntry.setRequestDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); manualRedactionEntry.setPositions(convert(addRedactionRequest.getPositions())); manualRedactionEntry.setTypeId(addRedactionRequest.getTypeId()); @@ -89,7 +90,7 @@ public class AddRedactionPersistenceService { public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); + mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); mre.setStatus(annotationStatus); }); @@ -100,7 +101,7 @@ public class AddRedactionPersistenceService { public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); + mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); mre.setStatus(annotationStatus); mre.setAddToDictionary(isAddOrRemoveFromDictionary); }); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java index 6131ae37a..ea70dca5f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AuditPersistenceService.java @@ -14,6 +14,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import static com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository.*; @@ -32,7 +33,7 @@ public class AuditPersistenceService { var auditModel = new AuditEntity(); BeanUtils.copyProperties(auditRequest, auditModel); - auditModel.setRecordDate(OffsetDateTime.now()); + auditModel.setRecordDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); auditRepository.save(auditModel); @@ -50,10 +51,10 @@ public class AuditPersistenceService { } if (auditRequest.getFrom() == null) { - auditRequest.setFrom(OffsetDateTime.now().minusYears(30)); + auditRequest.setFrom(OffsetDateTime.now().minusYears(30).truncatedTo(ChronoUnit.MILLIS)); } if (auditRequest.getTo() == null) { - auditRequest.setTo(OffsetDateTime.now()); + auditRequest.setTo(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } var spec = Specification.where(dateBetween(auditRequest.getFrom(), auditRequest.getTo())); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 4b81037f7..fe6e39522 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Set; import java.util.UUID; @@ -36,7 +37,7 @@ public class DossierPersistenceService { BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier); dossier.setId(UUID.randomUUID().toString()); dossier.setStatus(DossierStatus.ACTIVE); - dossier.setDate(OffsetDateTime.now()); + dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); dossier.setReportTemplates(reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds())); @@ -100,9 +101,9 @@ public class DossierPersistenceService { @Transactional public void hardDelete(String dossierId) { dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setHardDeletedTime(OffsetDateTime.now()); + dossier.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setStatus(DossierStatus.DELETED); - dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now() : dossier.getSoftDeletedTime()); + dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : dossier.getSoftDeletedTime()); }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 9f46b7836..063776106 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -30,7 +31,7 @@ public class DossierTemplatePersistenceService { if (createOrUpdateDossierRequest.getDossierTemplateId() != null) { Optional dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId()); if (dossierTemplate.isPresent()) { - dossierTemplate.get().setDateModified(OffsetDateTime.now()); + dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser()); BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get()); return dossierTemplate.get(); @@ -40,7 +41,7 @@ public class DossierTemplatePersistenceService { } else { DossierTemplateEntity dossierTemplate = new DossierTemplateEntity(); dossierTemplate.setId(UUID.randomUUID().toString()); - dossierTemplate.setDateAdded(OffsetDateTime.now()); + dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate); return dossierTemplateRepository.save(dossierTemplate); @@ -64,7 +65,7 @@ public class DossierTemplatePersistenceService { if (dossierTemplate.getDossiers().isEmpty()) { dossierTemplate.setModifiedBy(deletingUserId); - dossierTemplate.setDateModified(OffsetDateTime.now()); + dossierTemplate.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setDeleted(true); } else { throw new BadRequestException("Cannot delete dossier template with active dossiers!"); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index 963e26507..27087ed9b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -33,7 +34,7 @@ public class DownloadStatusPersistenceService { downloadStatus.setFilename(filename); downloadStatus.setMimeType(mimeType); downloadStatus.setDossier(dossier); - downloadStatus.setCreationDate(OffsetDateTime.now()); + downloadStatus.setCreationDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); downloadStatus.setFiles(fileRepository.findAllById(fileIds)); downloadStatus.setDownloadFileTypes(new ArrayList<>(downloadFileTypes)); @@ -61,7 +62,7 @@ public class DownloadStatusPersistenceService { public void updateLastDownload(String storageId) { downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> { - downloadStatus.setLastDownload(OffsetDateTime.now()); + downloadStatus.setLastDownload(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 2b7f79257..dcde65aa6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Set; @@ -32,9 +33,9 @@ public class FileStatusPersistenceService { file.setFilename(filename); file.setStatus(FileStatus.UNPROCESSED); file.setNumberOfPages(0); - file.setAdded(OffsetDateTime.now()); + file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setUploader(uploader); - file.setLastUploaded(OffsetDateTime.now()); + file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); fileRepository.save(file); } @@ -55,8 +56,8 @@ public class FileStatusPersistenceService { file.setAnalysisDuration(duration); file.setDossierDictionaryVersion(dossierDictionaryVersion); file.setAnalysisVersion(analysisVersion); - file.setLastUpdated(OffsetDateTime.now()); - file.setLastProcessed(OffsetDateTime.now()); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastProcessed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -85,8 +86,8 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setStatus(status); file.setLastSuccessfulStatus(status); - file.setLastUpdated(OffsetDateTime.now()); - file.setApprovalDate(approval ? OffsetDateTime.now() : null); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -105,8 +106,8 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setStatus(status); file.setUploader(uploader); - file.setLastUploaded(OffsetDateTime.now()); - file.setLastUpdated(OffsetDateTime.now()); + file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -117,7 +118,7 @@ public class FileStatusPersistenceService { public void updateStatus(String fileId, FileStatus status) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setStatus(status); - file.setLastUpdated(OffsetDateTime.now()); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -128,7 +129,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setStatus(status); - file.setLastIndexed(OffsetDateTime.now()); + file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -183,7 +184,7 @@ public class FileStatusPersistenceService { public void setFileAttributes(String fileId, List fileAttributes) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setLastFileAttributeChange(OffsetDateTime.now()); + file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setFileAttributes(fileAttributes); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -194,7 +195,7 @@ public class FileStatusPersistenceService { public void setExcludedPages(String fileId, Set excludedPages) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setLastManualRedaction(OffsetDateTime.now()); + file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setExcludedPages(excludedPages); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -237,8 +238,8 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setStatus(FileStatus.DELETED); - file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now() : file.getDeleted()); - file.setHardDeletedTime(OffsetDateTime.now()); + file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); + file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -304,8 +305,8 @@ public class FileStatusPersistenceService { file.setUploader(uploader); file.setStatus(FileStatus.FULLREPROCESS); file.setLastSuccessfulStatus(null); - file.setLastUploaded(OffsetDateTime.now()); - file.setLastUpdated(OffsetDateTime.now()); + file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastOCRTime(null); file.setExcluded(false); file.setLastProcessed(null); 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 975245a5f..7ef226ea8 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 @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Optional; @@ -537,7 +538,7 @@ public class ManualRedactionService { .fileId(fileId) .annotationId(annotationId) .user(user) - .date(OffsetDateTime.now()) + .date(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)) .build()); fileStatusPersistenceService.updateHasComments(fileId, true); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadCleanupService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadCleanupService.java index 810d6d7a9..20b62c902 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadCleanupService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadCleanupService.java @@ -12,6 +12,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; @Slf4j @@ -27,7 +28,7 @@ public class DownloadCleanupService { @Scheduled(fixedDelay = 300000, initialDelay = 300000) public void processDocuments() { - var now = OffsetDateTime.now(); + var now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); log.info("Checking for downloads to delete at {}", now); List downloadStatusList = downloadStatusPersistenceService.getStatus(); downloadStatusList.forEach(downloadStatus -> { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java index 0ffb8d824..3767b1dcb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -21,14 +22,14 @@ public class DossierTemplateTesterAndProvider { public DossierTemplate provideTestTemplate() { CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); cru.setCreatedBy("1"); - cru.setDateAdded(OffsetDateTime.now()); - cru.setDateModified(OffsetDateTime.now()); + cru.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + cru.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); cru.setName("Template 1"); cru.setDescription("Template 1"); cru.setRequestingUser("1"); - cru.setValidFrom(OffsetDateTime.now()); - cru.setValidTo(OffsetDateTime.now()); + cru.setValidFrom(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + cru.setValidTo(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 7fcff4fd4..5b42106d9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -33,7 +34,7 @@ public class DossierTesterAndProvider { cru.setOwnerId("1"); cru.setApproverIds(Sets.newHashSet("1")); cru.setRequestingUser("1"); - cru.setDueDate(OffsetDateTime.now()); + cru.setDueDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setDossierTemplateId(testTemplate.getId()); Dossier result = dossierClient.addDossier(cru); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java index bdfca6899..e398b6347 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java @@ -11,6 +11,7 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import static org.assertj.core.api.Assertions.assertThat; @@ -37,8 +38,8 @@ public class LicenseReportTest extends AbstractPersistenceServerServiceTest { LicenseReportRequest request = new LicenseReportRequest(); request.setDossierIds(Lists.newArrayList(dossier.getId())); - request.setStartDate(OffsetDateTime.now().minusHours(10).toInstant()); - request.setEndDate(OffsetDateTime.now().plusHours(10).toInstant()); + request.setStartDate(OffsetDateTime.now().minusHours(10).toInstant().truncatedTo(ChronoUnit.MILLIS)); + request.setEndDate(OffsetDateTime.now().plusHours(10).toInstant().truncatedTo(ChronoUnit.MILLIS)); request.setRequestId("123"); assertThat(licenseReportClient.getLicenseReport(request, 0, 20)).isNotNull(); } From c801d207dd725ed02cc8fbac6ab02dcf803744c1 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 8 Oct 2021 13:58:15 +0300 Subject: [PATCH 31/79] RED-2381 --- .../peristence/v1/server/controller/FileStatusController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 06c1c189c..8f9b6364d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -124,7 +124,7 @@ public class FileStatusController implements StatusResource { Set excludedPages = fileStatus.getExcludedPages(); excludedPages.addAll(pages); - fileStatusService.setExcludedPages(fileId, pages); + fileStatusService.setExcludedPages(fileId, excludedPages); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } From dbc6063e8ccd3228f35397cd6e48747083e24688 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 8 Oct 2021 14:13:03 +0300 Subject: [PATCH 32/79] RED-2378 --- .../v1/server/service/ExcludeFromAnalysisService.java | 10 ++++++++++ .../v1/server/service/RedactionLogService.java | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java index 9f71aa34b..4af458696 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java @@ -20,6 +20,8 @@ public class ExcludeFromAnalysisService { private final FileStatusService fileStatusService; private final FileManagementStorageService fileManagementStorageService; + private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + private final ImageRecategorizationPersistenceService imageRecategorizationPersistenceService; private final CommentPersistenceService commentPersistenceService; private final ForceRedactionPersistenceService forceRedactionPersistenceService; private final RemoveRedactionPersistenceService removeRedactionPersistenceService; @@ -65,6 +67,14 @@ public class ExcludeFromAnalysisService { var removeRedactions = removeRedactionPersistenceService.findRemoveRedactions(fileId, false); removeRedactions.forEach(f -> removeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + // wipe image recat + var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false); + imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + // wipe legal basis changes + var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false); + legalBasisChanges.forEach(f -> legalBasisChangePersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + fileStatusPersistenceService.updateHasComments(fileId, false); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java index 28ca4371c..5b9344a82 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.service; import com.iqser.red.service.peristence.v1.server.client.RedactionClient; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionRequest; @@ -21,10 +22,17 @@ public class RedactionLogService { public RedactionLog getRedactionLog(String dossierId, String fileId, boolean withManualRedactions) { + var fileStatus = fileStatusService.getStatus(fileId); + + if(fileStatus.isExcluded()){ + throw new NotFoundException("Excluded files have no redactionLog"); + } + if (withManualRedactions) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var manualRedactions = manualRedactionService.getManualRedactions(fileId); - var fileStatus = fileStatusService.getStatus(fileId); + + return redactionClient.getRedactionLog(RedactionRequest.builder() .dossierId(dossierId) .fileId(fileId) From c8f81d5e52ad2a1e2a5f8cfb1ef420bc8b1c0024 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 8 Oct 2021 14:42:39 +0300 Subject: [PATCH 33/79] RED-2372 --- .../FileStatusPersistenceService.java | 29 +++++++++-- .../repository/FileAttributesRepository.java | 3 ++ .../controller/FileAttributesController.java | 21 +------- .../service/ExcludeFromAnalysisService.java | 47 +---------------- .../v1/server/service/FileStatusService.java | 51 ++++++++++++++++++- .../integration/tests/FileAttributeTest.java | 8 ++- 6 files changed, 89 insertions(+), 70 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index dcde65aa6..4c3785bf4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -1,10 +1,12 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import lombok.RequiredArgsConstructor; @@ -14,7 +16,9 @@ import javax.transaction.Transactional; import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; @Service @@ -23,7 +27,9 @@ public class FileStatusPersistenceService { private final FileRepository fileRepository; private final DossierRepository dossierRepository; - + private final FileAttributesRepository fileAttributesRepository; + private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; + private final DossierPersistenceService dossierService; public void createStatus(String dossierId, String fileId, String filename, String uploader) { @@ -181,14 +187,18 @@ public class FileStatusPersistenceService { } @Transactional - public void setFileAttributes(String fileId, List fileAttributes) { + public void setFileAttributes(String dossierId, String fileId, Map fileAttributes) { + + fileAttributesRepository.deleteByFileId(fileId); fileRepository.findById(fileId).ifPresentOrElse((file) -> { + var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - file.setFileAttributes(fileAttributes); + file.setFileAttributes(fileAttributeEntities); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); + } @Transactional @@ -327,8 +337,21 @@ public class FileStatusPersistenceService { }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); + } + private List convertFileAttributes(String dossierId, FileEntity file, Map fileAttributesMap) { + var dossier = dossierService.getAndValidateDossier(dossierId); + List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); + return fileAttributesMap.entrySet().stream().map(entry -> { + var fa = new FileAttributeEntity(); + fa.setFileAttributeId(new FileAttributeEntity.FileAttributeEntityId()); + fa.setFile(file); + fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() -> + new BadRequestException("Invalid File Attribute Id"))); + fa.setValue(entry.getValue()); + return fa; + }).collect(Collectors.toList()); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java index 099d2146a..abba4ef1c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java @@ -11,4 +11,7 @@ public interface FileAttributesRepository extends JpaRepository fileAttributesMap) { - fileStatusPersistenceService.setFileAttributes(fileId, convertFileAttributes(dossierId, fileId, fileAttributesMap)); - } - - private List convertFileAttributes(String dossierId, String fileId, Map fileAttributesMap) { - var dossier = dossierService.getDossierById(dossierId); - var file = fileStatusService.getStatus(fileId); - List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); - - return fileAttributesMap.entrySet().stream().map(entry -> { - var fa = new FileAttributeEntity(); - fa.setFileAttributeId(new FileAttributeEntity.FileAttributeEntityId()); - fa.setFile(file); - fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() -> - new BadRequestException("Invalid File Attribute Id"))); - fa.setValue(entry.getValue()); - return fa; - }).collect(Collectors.toList()); + fileStatusPersistenceService.setFileAttributes(dossierId, fileId, fileAttributesMap); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java index 4af458696..8d014d6a5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java @@ -2,13 +2,10 @@ package com.iqser.red.service.peristence.v1.server.service; import com.google.common.collect.Sets; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.time.OffsetDateTime; import java.util.Set; @Service @@ -18,22 +15,12 @@ public class ExcludeFromAnalysisService { private final static Set VALID_STATES_FOR_EXCLUSION = Sets.newHashSet(FileStatus.UNASSIGNED, FileStatus.UNDER_REVIEW, FileStatus.UNDER_APPROVAL); private final FileStatusService fileStatusService; - private final FileManagementStorageService fileManagementStorageService; - private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; - private final ImageRecategorizationPersistenceService imageRecategorizationPersistenceService; - private final CommentPersistenceService commentPersistenceService; - private final ForceRedactionPersistenceService forceRedactionPersistenceService; - private final RemoveRedactionPersistenceService removeRedactionPersistenceService; - private final AddRedactionPersistenceService addRedactionPersistenceService; - private final FileStatusPersistenceService fileStatusPersistenceService; public void toggleExclusion(String dossierId, String fileId, boolean excluded) { var status = fileStatusService.getStatus(fileId); - OffsetDateTime now = OffsetDateTime.now(); - if (!VALID_STATES_FOR_EXCLUSION.contains(status.getStatus())) { throw new BadRequestException("Files in status " + status.getStatus() + " cannot be excluded/included"); } @@ -45,39 +32,9 @@ public class ExcludeFromAnalysisService { // if file has been re-enabled - process it fileStatusService.setStatusFullReprocess(dossierId, fileId, 2); } else { - // remove everything related to redaction - fileManagementStorageService.deleteObject(dossierId, fileId, FileType.REDACTION_LOG); - fileManagementStorageService.deleteObject(dossierId, fileId, FileType.TEXT); - fileManagementStorageService.deleteObject(dossierId, fileId, FileType.SECTION_GRID); - - // wipe comments - var comments = commentPersistenceService.findCommentsByFileID(fileId, false); - comments.forEach((key, value) -> value.forEach(comment -> - commentPersistenceService.softDelete(comment.getId(), now))); - - // wipe force redactions - var forceRedactions = forceRedactionPersistenceService.findForceRedactions(fileId, false); - forceRedactions.forEach(f -> forceRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); - - // wipe add manual redactions - var addRedactions = addRedactionPersistenceService.findAddRedactions(fileId, false); - addRedactions.forEach(f -> addRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); - - // wipe removeRedactions - var removeRedactions = removeRedactionPersistenceService.findRemoveRedactions(fileId, false); - removeRedactions.forEach(f -> removeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); - - // wipe image recat - var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false); - imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); - - // wipe legal basis changes - var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false); - legalBasisChanges.forEach(f -> legalBasisChangePersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); - - fileStatusPersistenceService.updateHasComments(fileId, false); - + fileStatusService.wipeFileData(dossierId, fileId); } } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index 37b0e10f4..90c3b4ddb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -9,9 +9,9 @@ import com.iqser.red.service.peristence.v1.server.controller.RulesController; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import lombok.RequiredArgsConstructor; @@ -38,6 +38,15 @@ public class FileStatusService { private final RulesController rulesController; private final ManualRedactionProviderService manualRedactionProviderService; + private final FileManagementStorageService fileManagementStorageService; + + private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + private final ImageRecategorizationPersistenceService imageRecategorizationPersistenceService; + private final CommentPersistenceService commentPersistenceService; + private final ForceRedactionPersistenceService forceRedactionPersistenceService; + private final RemoveRedactionPersistenceService removeRedactionPersistenceService; + private final AddRedactionPersistenceService addRedactionPersistenceService; + public List getDossierStatus(String dossierId) { @@ -265,6 +274,7 @@ public class FileStatusService { public void overwriteFile(String dossierId, String fileId, String uploader, String filename, int length) { fileStatusPersistenceService.overwriteFile(fileId, uploader, filename); + wipeFileData(dossierId,fileId); setStatusFullReprocess(dossierId, fileId, length); } @@ -275,6 +285,43 @@ public class FileStatusService { } + + public void wipeFileData(String dossierId, String fileId){ + OffsetDateTime now = OffsetDateTime.now(); + // remove everything related to redaction + fileManagementStorageService.deleteObject(dossierId, fileId, FileType.REDACTION_LOG); + fileManagementStorageService.deleteObject(dossierId, fileId, FileType.TEXT); + fileManagementStorageService.deleteObject(dossierId, fileId, FileType.SECTION_GRID); + + // wipe comments + var comments = commentPersistenceService.findCommentsByFileID(fileId, false); + comments.forEach((key, value) -> value.forEach(comment -> + commentPersistenceService.softDelete(comment.getId(), now))); + + // wipe force redactions + var forceRedactions = forceRedactionPersistenceService.findForceRedactions(fileId, false); + forceRedactions.forEach(f -> forceRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + // wipe add manual redactions + var addRedactions = addRedactionPersistenceService.findAddRedactions(fileId, false); + addRedactions.forEach(f -> addRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + // wipe removeRedactions + var removeRedactions = removeRedactionPersistenceService.findRemoveRedactions(fileId, false); + removeRedactions.forEach(f -> removeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + // wipe image recat + var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false); + imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + // wipe legal basis changes + var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false); + legalBasisChanges.forEach(f -> legalBasisChangePersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + + fileStatusPersistenceService.updateHasComments(fileId, false); + } + + private List convert( List fileAttributes) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 4d712a84b..f9e673294 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -121,7 +121,13 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); - assertThat(fileAttributes.size()).isEqualTo(3); + assertThat(fileAttributes.size()).isEqualTo(2); + + fileAttributes.put(fileAttributes.keySet().iterator().next(), "changed"); + fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), fileAttributes); + + fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + assertThat(fileAttributes.size()).isEqualTo(2); fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList()); From 22f019629eee4dac9f50385be186fbbfd2b205b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Fri, 8 Oct 2021 14:46:42 +0200 Subject: [PATCH 34/79] RED-2362: Set text Colums to lenght 4000 --- .../v1/processor/entity/annotations/CommentEntity.java | 2 +- .../entity/annotations/ManualForceRedactionEntity.java | 2 +- .../entity/annotations/ManualRedactionEntryEntity.java | 4 ++-- .../management/v1/processor/entity/audit/AuditEntity.java | 2 +- .../processor/entity/configuration/DictionaryEntryEntity.java | 2 +- .../v1/processor/entity/configuration/LegalBasisEntity.java | 4 ++-- .../v1/processor/entity/configuration/TypeEntity.java | 2 +- .../v1/processor/entity/configuration/WatermarkEntity.java | 2 +- .../v1/processor/entity/dossier/DossierAttributeEntity.java | 3 ++- .../management/v1/processor/entity/dossier/DossierEntity.java | 2 +- .../v1/processor/entity/dossier/DossierTemplateEntity.java | 2 +- .../v1/processor/entity/dossier/FileAttributeEntity.java | 2 +- 12 files changed, 15 insertions(+), 14 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java index b579b54a1..3a1df8529 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/CommentEntity.java @@ -29,7 +29,7 @@ public class CommentEntity { @Column private OffsetDateTime date; - @Column(columnDefinition = "text") + @Column(length = 4000) private String text; @Column(name = "user_id") private String user; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java index b5218cee8..1557dc158 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java @@ -24,7 +24,7 @@ public class ManualForceRedactionEntity { private String user; @Column private AnnotationStatus status; - @Column(columnDefinition = "text") + @Column(length = 4000) private String legalBasis; @Column private OffsetDateTime requestDate; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index 69e0ff618..d55c0a00b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -26,9 +26,9 @@ public class ManualRedactionEntryEntity { private String user; @Column private String typeId; - @Column + @Column(length = 4000) private String value; - @Column(columnDefinition = "text") + @Column(length = 4000) private String reason; @Column private String legalBasis; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java index a83728f93..8015cd942 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/audit/AuditEntity.java @@ -32,7 +32,7 @@ public class AuditEntity { private String category; @Column private String userId; - @Column + @Column(length = 4000) private String message; @Basic(fetch = FetchType.EAGER) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java index d53ca6ed9..a5964b817 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/DictionaryEntryEntity.java @@ -19,7 +19,7 @@ public class DictionaryEntryEntity { @Id @GeneratedValue private long entryId; - @Column + @Column(length = 4000) private String value; @Column private long version; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java index 8b43ab5d3..6dd76c884 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java @@ -20,9 +20,9 @@ public class LegalBasisEntity { private long id; @Column private String name; - @Column(columnDefinition = "text") + @Column(length = 4000) private String description; - @Column(columnDefinition = "text") + @Column(length = 4000) private String reason; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java index 3bb21160f..137b2edc9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/TypeEntity.java @@ -38,7 +38,7 @@ public class TypeEntity { private boolean isCaseInsensitive; @Column private boolean isRecommendation; - @Column + @Column(length = 4000) private String description; @Column private long version; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java index c8fe951ed..6b685649a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java @@ -21,7 +21,7 @@ public class WatermarkEntity { @Id @Column private String dossierTemplateId; - @Column(columnDefinition = "text") + @Column(length = 4000) private String text; @Column private String hexColor; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java index 15e1359bd..1abf09634 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeEntity.java @@ -21,7 +21,8 @@ public class DossierAttributeEntity { @EmbeddedId private DossierAttributeEntityId id; - @Column + // TODO Maybe @Lob, for larger images + @Column(columnDefinition = "TEXT") private String value; @JsonIgnore diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java index ecb1273eb..423964b93 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java @@ -33,7 +33,7 @@ public class DossierEntity { @Column private OffsetDateTime date; - @Column + @Column(length = 4000) private String description; @Column diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java index 6f3e6c5b6..a57939915 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java @@ -30,7 +30,7 @@ public class DossierTemplateEntity { @Column private String name; - @Column + @Column(length = 4000) private String description; @Column diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java index bc09712d3..51053ad64 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeEntity.java @@ -14,7 +14,7 @@ public class FileAttributeEntity { @EmbeddedId private FileAttributeEntityId fileAttributeId; - @Column + @Column(length = 4000) private String value; @JsonIgnore From 34e17a2fb53bdc26da705a407d6223e52be5348e Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Fri, 8 Oct 2021 15:13:18 +0200 Subject: [PATCH 35/79] RED-2246: updated platform-commons-dependency --- persistence-service-v1/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index 71beebe1e..60fce933f 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -28,7 +28,7 @@ com.iqser.red platform-commons-dependency - 1.6.0 + 1.7.0 import pom From b688da9c5619ea8acba1cece05b328cc63bca043 Mon Sep 17 00:00:00 2001 From: devplant Date: Sat, 9 Oct 2021 08:11:28 +0300 Subject: [PATCH 36/79] RED-2325 Dossier Stats Endpoint -first implementation, including integration tests --- .../dossiertemplate/dossier/DossierStats.java | 26 ++++ .../api/resources/DossierStatsResource.java | 24 ++++ .../controller/DossierStatsController.java | 29 +++++ .../server/service/DossierStatsService.java | 59 +++++++++ .../client/DossierStatsClient.java | 8 ++ .../service/DossierTesterAndProvider.java | 20 +++- .../integration/tests/DossierStatsTest.java | 112 ++++++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 2 +- 8 files changed, 275 insertions(+), 5 deletions(-) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatsClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java new file mode 100644 index 000000000..827ede7a8 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java @@ -0,0 +1,26 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DossierStats { + @JsonProperty("dossierId") + private String dossierId; + private int numberOfFiles; + private int numberOfAnalysedPages; // sum of analysedPages + private boolean hasRedactionsFilePresent; // true if at least one file in the dossier has redactions + private boolean hasHintsNoRedactionsFilePresent; // true if at least one file in the dossier has hints but doesn't have redactions + private boolean hasSuggestionsFilePresent; // true if at least one file in the dossier has suggestions + private boolean hasNoFlagsFilePresent; // true if at least one file in the dossier has none of the other flags + private Map fileCountPerStatus; +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java new file mode 100644 index 000000000..57ec5f47a --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.persistence.service.v1.api.resources; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Map; +import java.util.Set; + +public interface DossierStatsResource { + + String REST_PATH = "/dossier-stats"; + + String DOSSIER_ID_PARAM = "dossierId"; + String DOSSIER_ID_PATH_PARAM = "/{" + DOSSIER_ID_PARAM + "}"; + + @GetMapping(value = REST_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) + DossierStats getDossierStats(@PathVariable(DOSSIER_ID_PARAM) String dossierId); + + @GetMapping(value = REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + Map getDossierStats(@RequestBody Set dossierIds); +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java new file mode 100644 index 000000000..827793b41 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java @@ -0,0 +1,29 @@ +package com.iqser.red.service.peristence.v1.server.controller; + +import com.iqser.red.service.peristence.v1.server.service.DossierStatsService; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; +import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatsResource; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +@RestController +@RequiredArgsConstructor +public class DossierStatsController implements DossierStatsResource { + + private final DossierStatsService dossierStatsService; + + @Override + public DossierStats getDossierStats(String dossierId) { + return dossierStatsService.getDossierStats(dossierId); + } + + @Override + public Map getDossierStats(Set dossierIds) { + return dossierIds.stream().collect(Collectors.toMap(Function.identity(), dossierStatsService::getDossierStats)); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java new file mode 100644 index 000000000..151d4bb72 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java @@ -0,0 +1,59 @@ +package com.iqser.red.service.peristence.v1.server.service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DossierStatsService { + + private final DossierService dossierService; + private final FileStatusService fileStatusService; + + public DossierStats getDossierStats(String dossierId) { + DossierStats dossierStats = new DossierStats(); + // get the dossier + DossierEntity dossierEntity = dossierService.getDossierById(dossierId); + if (dossierEntity.getStatus().equals(DossierStatus.DELETED)) { + throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); + } + dossierStats.setDossierId(dossierId); + // get the associated files + List files = fileStatusService.getDossierStatus(dossierId); + dossierStats.setNumberOfFiles(files.size()); + dossierStats.setNumberOfAnalysedPages(files.stream().mapToInt(FileEntity::getNumberOfAnalyses).sum()); + files.stream().filter(FileEntity::isHasRedactions).findAny().ifPresent( + (v) -> dossierStats.setHasRedactionsFilePresent(true) + ); + files.stream().filter(FileEntity::isHasHints).filter(f -> !f.isHasRedactions()).findAny().ifPresent( + (v) -> dossierStats.setHasHintsNoRedactionsFilePresent(true) + ); + files.stream().filter(FileEntity::isHasSuggestions).findAny().ifPresent( + (v) -> dossierStats.setHasSuggestionsFilePresent(true) + ); + files.stream().filter(f -> !f.isHasRedactions()) + .filter(f -> !f.isHasHints()) + .filter(f -> !f.isHasSuggestions()) + .findAny().ifPresent( + (v) -> dossierStats.setHasNoFlagsFilePresent(true) + ); + Map fileCountPerStatus = files.stream().collect(Collectors.toMap(FileEntity::getStatus, e -> 1, Math::addExact)); + dossierStats.setFileCountPerStatus(fileCountPerStatus); + return dossierStats; + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatsClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatsClient.java new file mode 100644 index 000000000..29f6de325 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatsClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatsResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DossierStats", url = "http://localhost:${server.port}") +public interface DossierStatsClient extends DossierStatsResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 5b42106d9..155616301 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Do import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; +import org.assertj.core.api.AssertionsForClassTypes; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,11 +25,14 @@ public class DossierTesterAndProvider { private DossierClient dossierClient; public Dossier provideTestDossier(DossierTemplate testTemplate) { + return provideTestDossier(testTemplate, "Dossier1"); + } + public Dossier provideTestDossier(DossierTemplate testTemplate, String filename) { CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); - cru.setDossierName("Dossier 1"); - cru.setDescription("Dossier 1"); + cru.setDossierName(filename); + cru.setDescription(filename); cru.setWatermarkEnabled(true); cru.setMemberIds(Sets.newHashSet("1")); cru.setOwnerId("1"); @@ -39,7 +43,7 @@ public class DossierTesterAndProvider { Dossier result = dossierClient.addDossier(cru); - assertThat(result.getDossierName()).isEqualTo("Dossier 1"); + assertThat(result.getDossierName()).isEqualTo(filename); Dossier loadedDossier = dossierClient.getDossierById(result.getId(),false); @@ -52,8 +56,16 @@ public class DossierTesterAndProvider { var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - return provideTestDossier(testTemplate); + return provideTestDossier(testTemplate, "Dossier1"); + } + + public Dossier provideTestDossier(String filename) { + + var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + return provideTestDossier(testTemplate, filename); } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java new file mode 100644 index 000000000..e329e0857 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -0,0 +1,112 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatsClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +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.dossiertemplate.dossier.Dossier; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import org.junit.Before; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DossierStatsTest extends AbstractPersistenceServerServiceTest { + + private static final int NUMBER_PAGES_ANALYZED = 5; + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private FileClient fileClient; + + @Autowired + private DossierStatsClient dossierStatsClient; + + private Dossier dossier1; + private Dossier dossier2; + + + @Before + public void setupData() { + dossier1 = dossierTesterAndProvider.provideTestDossier(); + //provides 2 files + var file1 = fileTesterAndProvider.testAndProvideFile(dossier1, "file1"); + var file2 = fileTesterAndProvider.testAndProvideFile(dossier1, "file2"); + + assertThat(fileClient.getAllStatuses().size()).isEqualTo(2); + // alter file 1 + var loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); + assertThat(loadedFile1.isHasRedactions()).isFalse(); + fileRepository.findById(file1.getId()).ifPresent((file)->{ + file.setNumberOfAnalyses(NUMBER_PAGES_ANALYZED); + file.setHasRedactions(true); + file.setHasHints(true); + fileRepository.save(file); + }); + loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); + assertThat(loadedFile1.isHasRedactions()).isTrue(); + + // alter file 2 + fileRepository.findById(file2.getId()).ifPresent((file)->{ + file.setHasSuggestions(true); + fileRepository.save(file); + }); + + // second dossier + dossier2 = dossierTesterAndProvider.provideTestDossier("Dossier2"); + var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, "file3"); + var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, "file4"); + + //alter file 4 + fileRepository.findById(file4.getId()).ifPresent((file)->{ + file.setHasHints(true); + file.setStatus(FileStatus.APPROVED); + fileRepository.save(file); + }); + } + + @Test + public void testDossierStatsWithOneDossierId() { + DossierStats dossierStats = dossierStatsClient.getDossierStats(dossier1.getId()); + assertThat(dossierStats.getDossierId()).isEqualTo(dossier1.getId()); + assertThat(dossierStats.getNumberOfFiles()).isEqualTo(2); + assertThat(dossierStats.getNumberOfAnalysedPages()).isEqualTo(NUMBER_PAGES_ANALYZED); + assertThat(dossierStats.isHasRedactionsFilePresent()).isTrue(); + assertThat(dossierStats.isHasHintsNoRedactionsFilePresent()).isFalse(); + assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue(); + assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse(); + assertThat(dossierStats.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(2); + } + + @Test + public void testDossierStatsWithMoreDossierIds() { + Set dossierIds = new HashSet<>(); + dossierIds.add(dossier1.getId()); + dossierIds.add(dossier2.getId()); + + Map dossierStatsMap = dossierStatsClient.getDossierStats(dossierIds); + + // get the result for dossier2 + DossierStats dossierStats2 = dossierStatsMap.get(dossier2.getId()); + assertThat(dossierStats2.getNumberOfFiles()).isEqualTo(2); + assertThat(dossierStats2.getNumberOfAnalysedPages()).isEqualTo(0); + assertThat(dossierStats2.isHasRedactionsFilePresent()).isFalse(); + assertThat(dossierStats2.isHasHintsNoRedactionsFilePresent()).isTrue(); + assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse(); + assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue(); + assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(1); + assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.APPROVED)).isEqualTo(1); + } +} 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 d14aa8cf0..00a2d5597 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 @@ -62,7 +62,7 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private DossierRepository dossierRepository; @Autowired - private FileRepository fileRepository; + protected FileRepository fileRepository; @Autowired private ViewedPagesRepository viewedPagesRepository; @Autowired From 43f7bc03273de5c4356a776b2265ff605131328e Mon Sep 17 00:00:00 2001 From: devplant Date: Mon, 11 Oct 2021 10:42:01 +0300 Subject: [PATCH 37/79] RED-2325 Dossier Stats Endpoint -rework after comments, including integration tests --- .../v1/api/model/dossiertemplate/dossier/DossierStats.java | 2 +- .../peristence/v1/server/service/DossierStatsService.java | 4 ++++ .../v1/server/integration/tests/DossierStatsTest.java | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java index 827ede7a8..31e7ed4b8 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java @@ -14,13 +14,13 @@ import java.util.Map; @NoArgsConstructor @AllArgsConstructor public class DossierStats { - @JsonProperty("dossierId") private String dossierId; private int numberOfFiles; private int numberOfAnalysedPages; // sum of analysedPages private boolean hasRedactionsFilePresent; // true if at least one file in the dossier has redactions private boolean hasHintsNoRedactionsFilePresent; // true if at least one file in the dossier has hints but doesn't have redactions private boolean hasSuggestionsFilePresent; // true if at least one file in the dossier has suggestions + private boolean hasUpdatesFilePresent; //true if at least one file in the dossier has updates private boolean hasNoFlagsFilePresent; // true if at least one file in the dossier has none of the other flags private Map fileCountPerStatus; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java index 151d4bb72..986d94b83 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java @@ -45,9 +45,13 @@ public class DossierStatsService { files.stream().filter(FileEntity::isHasSuggestions).findAny().ifPresent( (v) -> dossierStats.setHasSuggestionsFilePresent(true) ); + files.stream().filter(FileEntity::isHasUpdates).findAny().ifPresent( + (v) -> dossierStats.setHasUpdatesFilePresent(true) + ); files.stream().filter(f -> !f.isHasRedactions()) .filter(f -> !f.isHasHints()) .filter(f -> !f.isHasSuggestions()) + .filter(f -> !f.isHasUpdates()) .findAny().ifPresent( (v) -> dossierStats.setHasNoFlagsFilePresent(true) ); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java index e329e0857..1eccb1052 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -53,6 +53,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { file.setNumberOfAnalyses(NUMBER_PAGES_ANALYZED); file.setHasRedactions(true); file.setHasHints(true); + file.setHasUpdates(true); fileRepository.save(file); }); loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); @@ -86,6 +87,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats.isHasRedactionsFilePresent()).isTrue(); assertThat(dossierStats.isHasHintsNoRedactionsFilePresent()).isFalse(); assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue(); + assertThat(dossierStats.isHasUpdatesFilePresent()).isTrue(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse(); assertThat(dossierStats.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(2); } @@ -105,6 +107,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats2.isHasRedactionsFilePresent()).isFalse(); assertThat(dossierStats2.isHasHintsNoRedactionsFilePresent()).isTrue(); assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse(); + assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse(); assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue(); assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(1); assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.APPROVED)).isEqualTo(1); From 0e2e3234e994c324e3299cb462caedc940406376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 11 Oct 2021 11:21:52 +0200 Subject: [PATCH 38/79] RED-2363: Fixed no full reprocessing after ocr --- .../peristence/v1/server/service/FileStatusService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index 90c3b4ddb..f1f89efbb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -221,9 +221,7 @@ public class FileStatusService { } var fileAttributes = fileStatus.getFileAttributes(); - - setStatusProcessing(fileId); - + var analyseRequest = AnalyzeRequest.builder() .dossierId(dossierId) .sectionsToReanalyse(sectionsToReanalyse) @@ -240,6 +238,8 @@ public class FileStatusService { analyseRequest.setExcludedPages(fileStatus.getExcludedPages()); + setStatusProcessing(fileId); + try { rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest), message -> { message.getMessageProperties().setPriority(priority); From 6768f3f81cf28c0d976fe8166460dd539c38173d Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 16:01:50 +0300 Subject: [PATCH 39/79] allow set null for reviewer/approver --- .../service/v1/api/resources/StatusResource.java | 3 ++- .../annotations/ManualRedactionEntryEntity.java | 2 +- .../persistence/FileStatusPersistenceService.java | 2 +- .../server/controller/FileStatusController.java | 15 ++++++--------- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index fda563f8f..8bf954af6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -22,6 +22,7 @@ public interface StatusResource { String EXCLUDED_STATUS_PARAM = "excluded"; String APPROVER_ID_REQUEST_PARAM = "approverId"; + String REVIEWER_ID_REQUEST_PARAM = "reviewerId"; @ResponseBody @ResponseStatus(value = HttpStatus.OK) @@ -47,7 +48,7 @@ public interface StatusResource { @PostMapping(value = STATUS_PATH + "/reviewer" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody JSONPrimitive currentReviewer); + @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required =false) String reviewerId); @PostMapping(value = STATUS_PATH + "/underreview" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index 69e0ff618..2410c6cc7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -24,7 +24,7 @@ public class ManualRedactionEntryEntity { private AnnotationEntityId id; @Column(name = "user_id") private String user; - @Column + @Column(length = 4000) private String typeId; @Column private String value; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 4c3785bf4..4889ea3b6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -276,7 +276,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setCurrentReviewer(currentReviewer); file.setLastReviewer(lastReviewer); - file.setStatus(FileStatus.UNDER_REVIEW); + file.setStatus(currentReviewer == null ? FileStatus.UNASSIGNED :FileStatus.UNDER_REVIEW); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 8f9b6364d..30a6519cc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -3,7 +3,6 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.iqser.red.service.peristence.v1.server.service.*; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; @@ -70,10 +69,10 @@ public class FileStatusController implements StatusResource { @Override public void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody JSONPrimitive currentFileReviewerRequest) { + @RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) { - fileStatusService.setCurrentReviewer(dossierId, fileId, currentFileReviewerRequest.getValue()); - fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW); + fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId); + fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -85,7 +84,7 @@ public class FileStatusController implements StatusResource { FileEntity fileStatus = fileStatusService.getStatus(fileId); String lastReviewer = fileStatus.getLastReviewer(); fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer); - fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW); + fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -97,10 +96,8 @@ public class FileStatusController implements StatusResource { var dossier = dossierService.getDossierById(dossierId); - String dossierOwner = dossier.getOwnerId(); - - fileStatusService.setCurrentReviewer(dossierId, fileId, approverId != null ? approverId : dossierOwner); - fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_APPROVAL); + fileStatusService.setCurrentReviewer(dossierId, fileId, approverId); + fileStatusService.setStatusSuccessful(fileId, approverId != null ? FileStatus.UNDER_APPROVAL : FileStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } From 5000127952a35e71c2b78f794e8d12c196d01ab0 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 16:01:52 +0300 Subject: [PATCH 40/79] allow set null for reviewer/approver --- .../peristence/v1/server/controller/FileStatusController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 30a6519cc..25445f2d5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -93,9 +93,6 @@ public class FileStatusController implements StatusResource { @PathVariable(FILE_ID) String fileId, @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { - - var dossier = dossierService.getDossierById(dossierId); - fileStatusService.setCurrentReviewer(dossierId, fileId, approverId); fileStatusService.setStatusSuccessful(fileId, approverId != null ? FileStatus.UNDER_APPROVAL : FileStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); From f2e1f409f915ca3d83ddba09ff8d8163fe60bd08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 11 Oct 2021 15:46:48 +0200 Subject: [PATCH 41/79] RED-2386: Avoid insert duplications to dictionaries --- .../controller/DictionaryController.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index 11c25fe4f..490eb5a6e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -56,16 +56,15 @@ public class DictionaryController implements DictionaryResource { // To check whether the type exists, type should not be added into database implicitly by addEntry. Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class); -// List entriesToSearch = new ArrayList<>(); - var currentVersion = getCurrentVersion(typeResult); + List existing = entryPersistenceService.getEntries(typeId) + .stream() + .filter(e -> !e.isDeleted()) + .map(DictionaryEntryEntity::getValue) + .collect(toList()); + if (removeCurrent) { - List existing = entryPersistenceService.getEntries(typeId) - .stream() - .filter(e -> !e.isDeleted()) - .map(DictionaryEntryEntity::getValue) - .collect(toList()); List removed = new ArrayList<>(existing); removed.removeAll(cleanEntries); @@ -76,11 +75,14 @@ public class DictionaryController implements DictionaryResource { entryPersistenceService.deleteEntries(typeId, removed, currentVersion + 1); entryPersistenceService.addEntry(typeId, added, currentVersion + 1); -// entriesToSearch.addAll(added); -// entriesToSearch.addAll(removed); } else { - entryPersistenceService.addEntry(typeId, cleanEntries, currentVersion + 1); -// entriesToSearch.addAll(cleanEntries); + + List added = new ArrayList<>(cleanEntries); + added.removeAll(existing); + if(added.isEmpty()){ + return; + } + entryPersistenceService.addEntry(typeId, added, currentVersion + 1); } dictionaryPersistenceService.incrementVersion(typeId); From 62cbda7214c7dee1233c683ae906ad989c20f833 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 17:02:37 +0300 Subject: [PATCH 42/79] legal basis api reviewer to null --- .../legalbasis/LegalBasis.java | 1 - .../resources/LegalBasisMappingResource.java | 8 ++- .../v1/api/resources/StatusResource.java | 2 +- .../configuration/LegalBasisEntity.java | 11 ++--- .../LegalBasisMappingEntity.java | 2 +- .../LegalBasisMappingPersistenceService.java | 49 +++++++++++++++++-- .../LegalBasisMappingController.java | 9 ++++ .../controller/ViewedPagesController.java | 8 +++ .../v1/server/integration/tests/FileTest.java | 4 +- .../integration/tests/LegalBasisTest.java | 26 +++++++++- 10 files changed, 101 insertions(+), 19 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasis.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasis.java index 0b921ea80..81e8f256f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasis.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/legalbasis/LegalBasis.java @@ -11,7 +11,6 @@ import lombok.NoArgsConstructor; @Builder public class LegalBasis { - private long id; private String name; private String description; private String reason; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java index 7b7811efa..2bd36c7f4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/LegalBasisMappingResource.java @@ -10,16 +10,22 @@ import java.util.List; public interface LegalBasisMappingResource { String LEGAL_BASIS_PATH = "/legalBasis"; + String DELETE_PATH = "/delete"; String VERSION_PATH = "/version"; String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; String DOSSIER_TEMPLATE_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_PARAMETER_NAME + "}"; + @PostMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) + void deleteLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List legalBasisNames); + + @PutMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + void addOrUpdateLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody LegalBasis legalBasis); + @ResponseStatus(HttpStatus.NO_CONTENT) @PostMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void setLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List legalBasisMapping); - @ResponseBody @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index 8bf954af6..d2499bd12 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -48,7 +48,7 @@ public interface StatusResource { @PostMapping(value = STATUS_PATH + "/reviewer" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required =false) String reviewerId); + @RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required =false) String reviewerId); @PostMapping(value = STATUS_PATH + "/underreview" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java index 8b43ab5d3..f3e20f09b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisEntity.java @@ -8,17 +8,12 @@ import lombok.NoArgsConstructor; import javax.persistence.*; @Data -@NoArgsConstructor -@Entity -@AllArgsConstructor @Builder -@Table(name = "legal_basis") +@Embeddable +@AllArgsConstructor +@NoArgsConstructor public class LegalBasisEntity { - @Id - @GeneratedValue - private long id; - @Column private String name; @Column(columnDefinition = "text") private String description; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java index 3e3ae43b5..0cd6cfaa9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/LegalBasisMappingEntity.java @@ -18,7 +18,7 @@ public class LegalBasisMappingEntity { @Column private long version; - @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @ElementCollection private List legalBasis = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java index d36d230a1..6f9021646 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java @@ -2,14 +2,15 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisMappingEntity; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import javax.transaction.Transactional; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; @@ -22,6 +23,36 @@ public class LegalBasisMappingPersistenceService { private final LegalBasisMappingRepository legalBasisMappingRepository; + @Transactional + public void deleteLegalBasis(String dossierTemplateId, List legalBasisNames) { + var mapping = getLegalBasisMappingOrCreate(dossierTemplateId); + var filteredLegalBasis = mapping.getLegalBasis().stream().filter(l -> !legalBasisNames.contains(l.getName())).collect(Collectors.toList()); + + mapping.setLegalBasis(filteredLegalBasis); + mapping.setVersion(mapping.getVersion() + 1); + legalBasisMappingRepository.save(mapping); + + } + + @Transactional + public void addOrUpdateLegalBasis(String dossierTemplateId, LegalBasis legalBasis) { + var mapping = getLegalBasisMappingOrCreate(dossierTemplateId); + + mapping.getLegalBasis().stream().filter(l -> l.getName().equals(legalBasis.getName())).findAny().ifPresentOrElse(existingBasis -> { + existingBasis.setReason(legalBasis.getReason()); + existingBasis.setDescription(legalBasis.getDescription()); + }, () -> mapping.getLegalBasis().add(LegalBasisEntity.builder() + .name(legalBasis.getName()) + .description(legalBasis.getDescription()) + .reason(legalBasis.getReason()).build())); + + + mapping.setVersion(mapping.getVersion() + 1); + legalBasisMappingRepository.save(mapping); + + } + + @Transactional public void setLegalBasisMapping(String dossierTemplateId, List legalBasisMapping) { @@ -40,9 +71,21 @@ public class LegalBasisMappingPersistenceService { } + @Transactional public List getLegalBasisMapping(String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getLegalBasis) - .orElseThrow(() -> new NotFoundException("Legal Basis Not configured!")); + return getLegalBasisMappingOrCreate(dossierTemplateId).getLegalBasis(); + } + + private LegalBasisMappingEntity getLegalBasisMappingOrCreate(String dossierTemplateId) { + return legalBasisMappingRepository.findById(dossierTemplateId).orElseGet(() -> { + // create on get if not present + var lbm = new LegalBasisMappingEntity(); + lbm.setDossierTemplateId(dossierTemplateId); + lbm.setLegalBasis(new ArrayList<>()); + lbm.setVersion(1); + return legalBasisMappingRepository.save(lbm); + + }); } public long getVersion(String dossierTemplateId) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java index af9d22726..9f68be805 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java @@ -21,6 +21,15 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; + @Override + public void deleteLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List legalBasisNames) { + legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId, legalBasisNames); + } + + @Override + public void addOrUpdateLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody LegalBasis legalBasis) { + legalBasisMappingPersistenceService.addOrUpdateLegalBasis(dossierTemplateId, legalBasis); + } @Override @Transactional diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ViewedPagesController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ViewedPagesController.java index 26b093809..71c017758 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ViewedPagesController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ViewedPagesController.java @@ -1,5 +1,7 @@ package com.iqser.red.service.peristence.v1.server.controller; +import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService; +import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage; import com.iqser.red.service.persistence.service.v1.api.resources.ViewedPagesResource; @@ -17,12 +19,16 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class ViewedPagesController implements ViewedPagesResource { private final ViewedPagesPersistenceService viewedPagesPersistenceService; + private final FileStatusService fileStatusService; + private final AnalysisFlagsCalculationService analysisFlagsCalculationService; public void addPage(@PathVariable(FILE_ID) String fileId, @PathVariable(ROLE) String role, @RequestBody Integer page) { viewedPagesPersistenceService.insertPage(fileId, role, page); + var file = fileStatusService.getStatus(fileId); + analysisFlagsCalculationService.calculateFlags(file.getDossierId(), fileId); } @@ -30,6 +36,8 @@ public class ViewedPagesController implements ViewedPagesResource { @RequestBody Integer page) { viewedPagesPersistenceService.removePage(fileId, role, page); + var file = fileStatusService.getStatus(fileId); + analysisFlagsCalculationService.calculateFlags(file.getDossierId(), fileId); } 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 40a102370..b8ea9a261 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 @@ -54,7 +54,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), JSONPrimitive.of("1")); + fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(),"1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); @@ -70,7 +70,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(loadedFile.getExcludedPages()).isEmpty(); - fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), JSONPrimitive.of("1")); + fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java index bec322643..17bb9bf8d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java @@ -40,7 +40,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest { mappings.add(LegalBasis.builder().name("test 1").description("test 1").reason("test 1").build()); mappings.add(LegalBasis.builder().name("test 2").description("test 2").reason("test 2").build()); legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), mappings); - assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(1); + assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2); var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); @@ -48,9 +48,31 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest { assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2"); + var legalBasis = LegalBasis.builder().name("test 3").description("test 3").reason("test 3").build(); + legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis); + + + mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(3); + assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3"); + + + legalBasis = LegalBasis.builder().name("test 3").reason("test 3").description("test 3 - updated").build(); + legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis); + + mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(3); + assertThat(mapping.stream().map(LegalBasis::getDescription).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3 - updated"); + + + legalBasisClient.deleteLegalBasis(dossierTemplate.getId(),Lists.newArrayList("test 1")); + mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(2); + + legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList()); assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty(); - assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2); + assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(6); } } From 3143f87a64b39b0ce68ca74357b3d5833e1d336b Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Mon, 11 Oct 2021 16:15:31 +0200 Subject: [PATCH 43/79] RED-2395: Fixed: Chosen report types while creating a dossier are not selected in download package --- .../service/persistence/DossierPersistenceService.java | 4 +++- .../server/integration/service/DossierTesterAndProvider.java | 2 ++ .../peristence/v1/server/integration/tests/DossierTest.java | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index fe6e39522..2762e5551 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -40,7 +40,9 @@ public class DossierPersistenceService { dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); - dossier.setReportTemplates(reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds())); + var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); + reportTemplates.forEach(r -> r.getDossiers().add(dossier)); + dossier.setReportTemplates(reportTemplates); return dossierRepository.save(dossier); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 155616301..c1f65aa36 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; +import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -40,6 +41,7 @@ public class DossierTesterAndProvider { cru.setRequestingUser("1"); cru.setDueDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setDossierTemplateId(testTemplate.getId()); + cru.setReportTemplateIds(List.of("reportTemplate1", "reportTemplate2")); Dossier result = dossierClient.addDossier(cru); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 83f42ab83..ce9b49306 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -32,7 +32,6 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(allDossiers.size()).isEqualTo(1); assertThat(allDossiers.get(0)).isEqualTo(dossier); - // update CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDossierTemplateId(dossier.getId()); From 1d296c56472a701d1ecfc26a0a2a9caa42b71586 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 20:51:48 +0300 Subject: [PATCH 44/79] flag calculations for hasUpdates --- .../ViewedPagesPersistenceService.java | 4 +++ .../repository/ViewedPagesRepository.java | 5 +++ .../controller/FileStatusController.java | 1 - .../AnalysisFlagsCalculationService.java | 31 ++++++++++++------- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java index a03eebe72..52bfbd701 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.List; @Service @@ -49,4 +50,7 @@ public class ViewedPagesPersistenceService { } + public void resetViewedPages(String fileId, String currentReviewer, List viewedPagesToReset) { + viewedPagesRepository.deleteSeenPages(fileId,currentReviewer,viewedPagesToReset); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ViewedPagesRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ViewedPagesRepository.java index b08d9defc..a6492b7c4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ViewedPagesRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ViewedPagesRepository.java @@ -2,6 +2,8 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import java.util.List; @@ -11,4 +13,7 @@ public interface ViewedPagesRepository extends JpaRepository findByFileIdAndIdUserId(String fileId, String userId); + @Modifying + @Query("DELETE FROM ViewedPageEntity e where e.id.fileId = :fileId and e.id.userId = :currentReviewer and e.id.page in :viewedPagesToReset") + void deleteSeenPages(String fileId, String currentReviewer, List viewedPagesToReset); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 25445f2d5..d02d7184b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -23,7 +23,6 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class FileStatusController implements StatusResource { private final FileStatusService fileStatusService; - private final DossierService dossierService; private final ExcludeFromAnalysisService excludeFromAnalysis; private final AnalysisFlagsCalculationService analysisFlagsCalculationService; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index 66186b731..79c180e1b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -6,13 +6,17 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.Map; import java.util.stream.Collectors; + +@Slf4j @Service @RequiredArgsConstructor public class AnalysisFlagsCalculationService { @@ -25,6 +29,8 @@ public class AnalysisFlagsCalculationService { @Async public void calculateFlags(String dossierId, String fileId) { + long startTime = System.nanoTime(); + var file = fileStatusPersistenceService.getStatus(fileId); var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true); @@ -40,7 +46,8 @@ public class AnalysisFlagsCalculationService { boolean hasComments = false; - viewedPagesPersistenceService.findViewedPages(fileId, file.getCurrentReviewer()); + var viewedPagesToReset = new ArrayList(); + for (RedactionLogEntry entry : redactionLog.getRedactionLogEntry()) { if (entry.isExcluded()) { @@ -49,41 +56,43 @@ public class AnalysisFlagsCalculationService { String type = getType(entry.getType()); - if (entry.isRedacted() && !entry.isManual() || entry.isManual() && entry.getStatus() - .equals(AnnotationStatus.APPROVED)) { + if (!hasRedactions && (entry.isRedacted() && !entry.isManual() || entry.isManual() && entry.getStatus() + .equals(AnnotationStatus.APPROVED))) { hasRedactions = true; } - if (entry.isHint() && !type.equals("false_positive")) { + if (!hasHints && (entry.isHint() && !type.equals("false_positive"))) { hasHints = true; } - if (entry.isHint() && type.equals("image") || entry.isImage()) { + if (!hasImages && (type.equals("image") || entry.isImage())) { hasImages = true; } - if (entry.isManual() && entry.getStatus() - .equals(AnnotationStatus.REQUESTED)) { + if (!hasSuggestions && (entry.isManual() && entry.getStatus().equals(AnnotationStatus.REQUESTED))) { hasSuggestions = true; } - if (entry.getComments() != null && !entry.getComments().isEmpty()) { + if (!hasComments && (entry.getComments() != null && !entry.getComments().isEmpty())) { hasComments = true; } var lastChange = entry.getChanges().isEmpty() ? null : entry.getChanges().get(entry.getChanges().size() - 1); var viewedPage = entry.getPositions().isEmpty() ? null : viewedPages.get(entry.getPositions().get(0).getPage()); + if (lastChange != null && lastChange.getDateTime() != null && viewedPage != null && viewedPage.isBefore(lastChange.getDateTime())) { + viewedPagesToReset.add(entry.getPositions().get(0).getPage()); hasUpdates = true; } - if (hasRedactions && hasHints && hasSuggestions && hasImages && hasComments && hasUpdates) { - break; - } } + + viewedPagesPersistenceService.resetViewedPages(fileId, file.getCurrentReviewer(), viewedPagesToReset); fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); + + log.info("Flag Calculations for file: {} took: {}ms", fileId, System.currentTimeMillis() - startTime); } From f7c083b347bc302db11d841cf17931898dfb4848 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 20:54:27 +0300 Subject: [PATCH 45/79] pmd fix --- .../v1/server/service/AnalysisFlagsCalculationService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index 79c180e1b..48342546c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -61,7 +61,7 @@ public class AnalysisFlagsCalculationService { hasRedactions = true; } - if (!hasHints && (entry.isHint() && !type.equals("false_positive"))) { + if (!hasHints && entry.isHint() && !type.equals("false_positive")) { hasHints = true; } @@ -69,11 +69,11 @@ public class AnalysisFlagsCalculationService { hasImages = true; } - if (!hasSuggestions && (entry.isManual() && entry.getStatus().equals(AnnotationStatus.REQUESTED))) { + if (!hasSuggestions && entry.isManual() && entry.getStatus().equals(AnnotationStatus.REQUESTED)) { hasSuggestions = true; } - if (!hasComments && (entry.getComments() != null && !entry.getComments().isEmpty())) { + if (!hasComments && entry.getComments() != null && !entry.getComments().isEmpty()) { hasComments = true; } From bad3c453ddfe56c962bbaa6d865870eb5f028826 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 21:05:14 +0300 Subject: [PATCH 46/79] added transactional --- .../service/persistence/ViewedPagesPersistenceService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java index 52bfbd701..9d4b02cb6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ViewedPagesPersistenceService.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; -import java.util.ArrayList; import java.util.List; @Service @@ -50,7 +49,8 @@ public class ViewedPagesPersistenceService { } + @Transactional public void resetViewedPages(String fileId, String currentReviewer, List viewedPagesToReset) { - viewedPagesRepository.deleteSeenPages(fileId,currentReviewer,viewedPagesToReset); + viewedPagesRepository.deleteSeenPages(fileId, currentReviewer, viewedPagesToReset); } } From de5fa8c94641400a90df3b95b24f931a2ff1d723 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 21:09:35 +0300 Subject: [PATCH 47/79] logs for analysis required --- .../service/ReanalysisRequiredStatusService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java index c4eda84cb..16f0b349f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java @@ -7,6 +7,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Collections; @@ -16,6 +17,7 @@ import java.util.Map; import static com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService.VersionType.*; +@Slf4j @Service @RequiredArgsConstructor public class ReanalysisRequiredStatusService { @@ -85,7 +87,16 @@ public class ReanalysisRequiredStatusService { var legalBasisVersionMatches = fileStatus.getLegalBasisVersion() == dossierTemplateVersions.getOrDefault(LEGAL_BASIS, -1L); var dossierDictionaryVersionMatches = fileStatus.getDossierDictionaryVersion() == dossierDictionaryVersion; - return !(rulesVersionMatches && dictionaryVersionMatches && legalBasisVersionMatches && dossierDictionaryVersionMatches); + var analysisRequired = !(rulesVersionMatches && dictionaryVersionMatches && legalBasisVersionMatches && dossierDictionaryVersionMatches); + + if (analysisRequired) { + log.info("For file: {} analysis is required because -> ruleVersionMatches: {}/{}, dictionaryVersionMatches: {}/{}, legalBasisVersionMatches: {}/{}, dossierDictionaryVersionMatches: {}/{}", + fileStatus.getFilename(), fileStatus.getRulesVersion(), dossierTemplateVersions.getOrDefault(RULES, -1L), + fileStatus.getDictionaryVersion(), dossierTemplateVersions.getOrDefault(DICTIONARY, -1L), + fileStatus.getLegalBasisVersion(), dossierTemplateVersions.getOrDefault(LEGAL_BASIS, -1L), + fileStatus.getDossierDictionaryVersion(), dossierDictionaryVersion); + } + return analysisRequired; } From f9d6fa419f95b434559869b0c7f075ddf934abf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 12 Oct 2021 09:45:15 +0200 Subject: [PATCH 48/79] RED-2404: Ported code to deny adding stopwords in manual redactions --- .../annotations/AddRedactionRequest.java | 2 + .../service/ManualRedactionService.java | 6 + .../v1/server/service/StopwordService.java | 28 + .../v1/server/utils/ResourceLoader.java | 31 + .../src/main/resources/files/stopwords.txt | 665 ++++++++++++++++++ 5 files changed, 732 insertions(+) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/StopwordService.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ResourceLoader.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/resources/files/stopwords.txt diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java index 6030bdbea..854931447 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/AddRedactionRequest.java @@ -28,4 +28,6 @@ public class AddRedactionRequest { private String comment; + private boolean forceAddToDictionary; + } 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 7ef226ea8..19f5ae77b 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 @@ -41,6 +41,7 @@ public class ManualRedactionService { private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; private final FileStatusService fileStatusService; private final ManualRedactionProviderService manualRedactionProviderService; + private final StopwordService stopwordService; private final HashFunction hashFunction = Hashing.murmur3_128(); @@ -51,6 +52,11 @@ public class ManualRedactionService { if (addRedactionRequest.isAddToDictionary()) { try { + + if (!addRedactionRequest.isForceAddToDictionary() && stopwordService.isStopword(addRedactionRequest.getValue())) { + throw new BadRequestException("The entry you are trying to add is a stopword"); + } + dictionaryController.getDictionaryForType(addRedactionRequest.getTypeId()); } catch (FeignException e) { if (e.status() == 404) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/StopwordService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/StopwordService.java new file mode 100644 index 000000000..3795f25a0 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/StopwordService.java @@ -0,0 +1,28 @@ +package com.iqser.red.service.peristence.v1.server.service; + +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.peristence.v1.server.utils.ResourceLoader; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class StopwordService { + Set stopwords = new HashSet<>(); + + @PostConstruct + public void init(){ + stopwords = ResourceLoader.load("files/stopwords.txt"); + } + + public boolean isStopword(String word){ + return stopwords.contains(word.toLowerCase(Locale.ROOT)); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ResourceLoader.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ResourceLoader.java new file mode 100644 index 000000000..3db0aa0b0 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ResourceLoader.java @@ -0,0 +1,31 @@ +package com.iqser.red.service.peristence.v1.server.utils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Set; +import java.util.stream.Collectors; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class ResourceLoader { + + public Set load(String classpathPath) { + + URL resource = ResourceLoader.class.getClassLoader().getResource(classpathPath); + if (resource == null) { + throw new IllegalArgumentException("could not load classpath resource: " + classpathPath); + } + try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.openStream(), StandardCharsets.UTF_8))) { + return br.lines().collect(Collectors.toSet()); + } catch (IOException e) { + throw new IllegalArgumentException("could not load classpath resource: " + classpathPath, e); + } + + } + +} + diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/files/stopwords.txt b/persistence-service-v1/persistence-service-server-v1/src/main/resources/files/stopwords.txt new file mode 100644 index 000000000..d21c2cca1 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/files/stopwords.txt @@ -0,0 +1,665 @@ +a +able +about +above +abst +accordance +according +accordingly +across +act +actually +added +adj +affected +affecting +affects +after +afterwards +again +against +ah +all +almost +alone +along +already +also +although +always +am +among +amongst +an +and +announce +another +any +anybody +anyhow +anymore +anyone +anything +anyway +anyways +anywhere +apparently +approximately +are +aren +arent +arise +around +as +aside +ask +asking +at +auth +available +away +awfully +b +back +be +became +because +become +becomes +becoming +been +before +beforehand +begin +beginning +beginnings +begins +behind +being +believe +below +beside +besides +between +beyond +biol +both +brief +briefly +but +by +c +ca +came +can +cannot +can't +cause +causes +certain +certainly +co +com +come +comes +contain +containing +contains +could +couldnt +d +date +did +didn't +different +do +does +doesn't +doing +done +don't +down +downwards +due +during +e +each +ed +edu +effect +eg +eight +eighty +either +else +elsewhere +end +ending +enough +especially +et +et-al +etc +even +ever +every +everybody +everyone +everything +everywhere +ex +except +f +far +few +ff +fifth +first +five +fix +followed +following +follows +for +former +formerly +forth +found +four +from +further +furthermore +g +gave +get +gets +getting +give +given +gives +giving +go +goes +gone +got +gotten +h +had +happens +hardly +has +hasn't +have +haven't +having +he +hed +hence +her +here +hereafter +hereby +herein +heres +hereupon +hers +herself +hes +hi +hid +him +himself +his +hither +home +how +howbeit +however +hundred +i +id +ie +if +i'll +im +immediate +immediately +importance +important +in +inc +indeed +index +information +instead +into +invention +inward +is +isn't +it +itd +it'll +its +itself +i've +j +just +k +keep keeps +kept +kg +km +know +known +knows +l +largely +last +lately +later +latter +latterly +least +less +lest +let +lets +like +liked +likely +line +little +'ll +look +looking +looks +ltd +m +made +mainly +make +makes +many +may +maybe +me +mean +means +meantime +meanwhile +merely +mg +might +million +miss +ml +more +moreover +most +mostly +mr +mrs +much +mug +must +my +myself +n +na +name +namely +nay +nd +near +nearly +necessarily +necessary +need +needs +neither +never +nevertheless +new +next +nine +ninety +no +nobody +non +none +nonetheless +noone +nor +normally +nos +not +noted +nothing +now +nowhere +o +obtain +obtained +obviously +of +off +often +oh +ok +okay +old +omitted +on +once +one +ones +only +onto +or +ord +other +others +otherwise +ought +our +ours +ourselves +out +outside +over +overall +owing +own +p +page +pages +part +particular +particularly +past +per +perhaps +placed +please +plus +poorly +possible +possibly +potentially +pp +predominantly +present +previously +primarily +probably +promptly +proud +provides +put +q +que +quickly +quite +qv +r +ran +rather +rd +re +readily +really +recent +recently +ref +refs +regarding +regardless +regards +related +relatively +research +respectively +resulted +resulting +results +right +run +s +said +same +saw +say +saying +says +sec +section +see +seeing +seem +seemed +seeming +seems +seen +self +selves +sent +seven +several +shall +she +shed +she'll +shes +should +shouldn't +show +showed +shown +showns +shows +significant +significantly +similar +similarly +since +six +slightly +so +some +somebody +somehow +someone +somethan +something +sometime +sometimes +somewhat +somewhere +soon +sorry +specifically +specified +specify +specifying +still +stop +strongly +sub +substantially +successfully +such +sufficiently +suggest +sup +sure t +take +taken +taking +tell +tends +th +than +thank +thanks +thanx +that +that'll +thats +that've +the +their +theirs +them +themselves +then +thence +there +thereafter +thereby +thered +therefore +therein +there'll +thereof +therere +theres +thereto +thereupon +there've +these +they +theyd +they'll +theyre +they've +think +this +those +thou +though +thoughh +thousand +throug +through +throughout +thru +thus +til +tip +to +together +too +took +toward +towards +tried +tries +truly +try +trying +ts +twice +two +u +un +under +unfortunately +unless +unlike +unlikely +until +unto +up +upon +ups +us +use +used +useful +usefully +usefulness +uses +using +usually +v +value +various +'ve +very +via +viz +vol +vols +vs +w +want +wants +was +wasnt +way +we +wed +welcome +we'll +went +were +werent +we've +what +whatever +what'll +whats +when +whence +whenever +where +whereafter +whereas +whereby +wherein +wheres +whereupon +wherever +whether +which +while +whim +whither +who +whod +whoever +whole +who'll +whom +whomever +whos +whose +why +widely +willing +wish +with +within +without +wont +words +world +would +wouldnt +www +x +y +yes +yet +you +youd +you'll +your +youre +yours +yourself +yourselves +you've +z +zero \ No newline at end of file From 84330967dda1898efe83f7bd78b3c08169e46120 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 11 Oct 2021 21:45:00 +0300 Subject: [PATCH 49/79] logs for analysis required --- .../v1/server/service/AnalysisFlagsCalculationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index 48342546c..717ed983d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -29,7 +29,7 @@ public class AnalysisFlagsCalculationService { @Async public void calculateFlags(String dossierId, String fileId) { - long startTime = System.nanoTime(); + long startTime = System.currentTimeMillis(); var file = fileStatusPersistenceService.getStatus(fileId); var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true); From 3e2a18e78ea227dd484c3e08f9cab3ba328a6ce6 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Tue, 12 Oct 2021 10:16:04 +0300 Subject: [PATCH 50/79] calculate flags skips some pages --- .../annotations/ForceRedactionRequest.java | 1 + .../ImageRecategorizationRequest.java | 1 + .../annotations/LegalBasisChangeRequest.java | 1 + .../annotations/RemoveRedactionRequest.java | 1 + .../entity/annotations/IdRemovalEntity.java | 2 + .../ManualForceRedactionEntity.java | 2 + .../ManualImageRecategorizationEntity.java | 2 + .../ManualLegalBasisChangeEntity.java | 2 + .../controller/ManualRedactionController.java | 37 +++---------------- .../AnalysisFlagsCalculationService.java | 9 +++++ .../service/ManualRedactionService.java | 37 ++++++++++++++++++- 11 files changed, 63 insertions(+), 32 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ForceRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ForceRedactionRequest.java index 47b00145c..870da2186 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ForceRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ForceRedactionRequest.java @@ -16,5 +16,6 @@ public class ForceRedactionRequest { private AnnotationStatus status; private String legalBasis; private String comment; + private int page; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImageRecategorizationRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImageRecategorizationRequest.java index 14ac8bfbd..6dd15bc98 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImageRecategorizationRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ImageRecategorizationRequest.java @@ -16,5 +16,6 @@ public class ImageRecategorizationRequest { private AnnotationStatus status; private String typeId; private String comment; + private int page; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/LegalBasisChangeRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/LegalBasisChangeRequest.java index b8a83416f..5244f9ac3 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/LegalBasisChangeRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/LegalBasisChangeRequest.java @@ -16,5 +16,6 @@ public class LegalBasisChangeRequest { private AnnotationStatus status; private String legalBasis; private String comment; + private int page; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/RemoveRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/RemoveRedactionRequest.java index 2ddec5930..d655589e7 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/RemoveRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/RemoveRedactionRequest.java @@ -16,5 +16,6 @@ public class RemoveRedactionRequest { private AnnotationStatus status; private boolean removeFromDictionary; private String comment; + private int page; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java index 379e6bfde..1ec9161cc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java @@ -32,6 +32,8 @@ public class IdRemovalEntity { private OffsetDateTime processedDate; @Column private OffsetDateTime softDeletedTime; + @Column + private int page; @ManyToOne private FileEntity fileStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java index 1557dc158..807820b72 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java @@ -32,6 +32,8 @@ public class ManualForceRedactionEntity { private OffsetDateTime processedDate; @Column private OffsetDateTime softDeletedTime; + @Column + private int page; @ManyToOne private FileEntity fileStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java index c6fdfb3e2..bab2933b4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java @@ -32,6 +32,8 @@ public class ManualImageRecategorizationEntity { private OffsetDateTime processedDate; @Column private OffsetDateTime softDeletedTime; + @Column + private int page; @ManyToOne private FileEntity fileStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java index 854d82d15..259a79064 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java @@ -33,6 +33,8 @@ public class ManualLegalBasisChangeEntity { private OffsetDateTime processedDate; @Column private OffsetDateTime softDeletedTime; + @Column + private int page; @ManyToOne private FileEntity fileStatus; 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 a274ed20a..a9a221ead 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 @@ -1,6 +1,5 @@ package com.iqser.red.service.peristence.v1.server.controller; -import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService; import com.iqser.red.service.peristence.v1.server.service.ManualRedactionService; import com.iqser.red.service.peristence.v1.server.utils.ManualImageRecategorizationMapper; import com.iqser.red.service.peristence.v1.server.utils.ManualRedactionMapper; @@ -19,7 +18,6 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class ManualRedactionController implements ManualRedactionResource { private final ManualRedactionService manualRedactionService; - private final AnalysisFlagsCalculationService analysisFlagsCalculationService; @Override @@ -27,9 +25,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(FILE_ID) String fileId, @RequestBody AddRedactionRequest addRedactionRequest) { - var resp = manualRedactionService.addAddRedaction(dossierId, fileId, addRedactionRequest); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return manualRedactionService.addAddRedaction(dossierId, fileId, addRedactionRequest); } @@ -38,9 +34,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(FILE_ID) String fileId, @RequestBody RemoveRedactionRequest removeRedactionRequest) { - var resp = manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequest); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequest); } @@ -49,9 +43,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(FILE_ID) String fileId, @RequestBody ForceRedactionRequest forceRedactionRequest) { - var resp = manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequest); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequest); } @@ -60,9 +52,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(FILE_ID) String fileId, @RequestBody LegalBasisChangeRequest legalBasisChangeRequest) { - var resp = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequest); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequest); } @@ -71,9 +61,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(FILE_ID) String fileId, @RequestBody ImageRecategorizationRequest imageRecategorizationRequest) { - var resp = manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequest); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequest); } @@ -82,9 +70,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId, @RequestBody CommentRequest comment) { - var resp = convert(manualRedactionService.addComment(fileId, annotationId, comment), Comment.class); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - return resp; + return convert(manualRedactionService.addComment(fileId, annotationId, comment), Comment.class); } @@ -138,7 +124,6 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId) { manualRedactionService.deleteAddRedaction(dossierId, fileId, annotationId); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -147,7 +132,6 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId) { manualRedactionService.deleteRemoveRedaction(dossierId, fileId, annotationId); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -156,7 +140,6 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId) { manualRedactionService.deleteForceRedaction(dossierId, fileId, annotationId); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -165,7 +148,6 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId) { manualRedactionService.deleteLegalBasisChange(dossierId, fileId, annotationId); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -175,7 +157,6 @@ public class ManualRedactionController implements ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId) { manualRedactionService.deleteImageRecategorization(dossierId, fileId, annotationId); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -183,7 +164,6 @@ public class ManualRedactionController implements ManualRedactionResource { public void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId) { manualRedactionService.deleteComment(fileId, commentId); - // TODO analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -194,7 +174,6 @@ public class ManualRedactionController implements ManualRedactionResource { @RequestBody JSONPrimitive updateStatusRequest) { manualRedactionService.updateAddRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -205,7 +184,6 @@ public class ManualRedactionController implements ManualRedactionResource { @RequestBody JSONPrimitive updateStatusRequest) { manualRedactionService.updateRemoveRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -216,7 +194,6 @@ public class ManualRedactionController implements ManualRedactionResource { @RequestBody JSONPrimitive updateStatusRequest) { manualRedactionService.updateForceRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -226,7 +203,6 @@ public class ManualRedactionController implements ManualRedactionResource { @RequestBody JSONPrimitive updateStatusRequest) { manualRedactionService.updateLegalBasisChangeStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -237,7 +213,6 @@ public class ManualRedactionController implements ManualRedactionResource { @RequestBody JSONPrimitive updateStatusRequest) { manualRedactionService.updateImageRecategorizationStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index 717ed983d..cd6004534 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -1,5 +1,6 @@ package com.iqser.red.service.peristence.v1.server.service; +import com.google.common.collect.Sets; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; @@ -13,6 +14,7 @@ import org.springframework.stereotype.Service; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; @@ -28,6 +30,11 @@ public class AnalysisFlagsCalculationService { @Async public void calculateFlags(String dossierId, String fileId) { + this.calculateFlags(dossierId,fileId, Sets.newHashSet()); + } + + @Async + public void calculateFlags(String dossierId, String fileId, Set pagesToSkip) { long startTime = System.currentTimeMillis(); @@ -89,6 +96,8 @@ public class AnalysisFlagsCalculationService { } + viewedPagesToReset.removeAll(pagesToSkip); + viewedPagesPersistenceService.resetViewedPages(fileId, file.getCurrentReviewer(), viewedPagesToReset); fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); 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 19f5ae77b..0b75982be 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 @@ -1,5 +1,6 @@ package com.iqser.red.service.peristence.v1.server.service; +import com.google.common.collect.Sets; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import com.iqser.red.service.peristence.v1.server.controller.DictionaryController; @@ -41,6 +42,7 @@ public class ManualRedactionService { private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; private final FileStatusService fileStatusService; private final ManualRedactionProviderService manualRedactionProviderService; + private final AnalysisFlagsCalculationService analysisFlagsCalculationService; private final StopwordService stopwordService; private final HashFunction hashFunction = Hashing.murmur3_128(); @@ -85,6 +87,10 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } + if (!addRedactionRequest.getPositions().isEmpty()) { + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(addRedactionRequest.getPositions().get(0).getPage())); + } + return ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build(); } @@ -113,6 +119,10 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } + if (!removeRedactionRequest.isRemoveFromDictionary()) { + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(removeRedactionRequest.getPage())); + } + return ManualAddResponse.builder() .annotationId(removeRedactionRequest.getAnnotationId()) .commentId(commentId) @@ -141,6 +151,8 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(forceRedactionRequest.getPage())); + return ManualAddResponse.builder() .annotationId(forceRedactionRequest.getAnnotationId()) .commentId(commentId) @@ -169,6 +181,8 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(legalBasisChangeRequest.getPage())); + return ManualAddResponse.builder() .annotationId(legalBasisChangeRequest.getAnnotationId()) .commentId(commentId) @@ -198,6 +212,8 @@ public class ManualRedactionService { fileStatusService.setStatusReprocess(dossierId, fileId, 2); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + return ManualAddResponse.builder() .annotationId(imageRecategorizationRequest.getAnnotationId()) .commentId(commentId) @@ -210,6 +226,8 @@ public class ManualRedactionService { var createdComment = addComment(fileId, annotationId, commentRequest.getText(), commentRequest.getUser()); fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); + fileStatusPersistenceService.updateHasComments(fileId, true); + return createdComment; } @@ -266,6 +284,10 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } + + if (!addRedaction.getPositions().isEmpty()) { + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(addRedaction.getPositions().get(0).getPage())); + } } @@ -285,6 +307,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(removeRedaction.getPage())); } @@ -300,6 +323,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(forceRedaction.getPage())); } @@ -314,6 +338,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(legalBasisChange.getPage())); } @@ -330,6 +355,7 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); fileStatusService.setStatusReprocess(dossierId, fileId, 2); } + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -340,6 +366,7 @@ public class ManualRedactionService { // update indicator fileStatusPersistenceService.updateHasComments(fileId, commentPersistenceService.fileHasComments(fileId)); + } @@ -379,6 +406,8 @@ public class ManualRedactionService { boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(idRemoval.getPage())); } private String buildTypeId(RedactionLogEntry redactionLogEntry, DossierEntity dossier) { @@ -396,6 +425,7 @@ public class ManualRedactionService { forceRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -405,16 +435,17 @@ public class ManualRedactionService { 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) { + ManualImageRecategorizationEntity imageRecategorization = recategorizationPersistenceService.findRecategorization(fileId, annotationId); if (annotationStatus.equals(AnnotationStatus.DECLINED)) { - ManualImageRecategorizationEntity imageRecategorization = recategorizationPersistenceService.findRecategorization(fileId, annotationId); // if it was previously approved, revert the delete if (imageRecategorization.getStatus() == AnnotationStatus.APPROVED) { fileStatusService.setStatusReprocess(dossierId, fileId, 2); @@ -427,6 +458,7 @@ public class ManualRedactionService { recategorizationPersistenceService.updateStatus(fileId, annotationId, annotationStatus); boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(imageRecategorization.getPage())); } @@ -451,6 +483,9 @@ public class ManualRedactionService { boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + if (!manualRedactionEntry.getPositions().isEmpty()) { + analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(manualRedactionEntry.getPositions().get(0).getPage())); + } } From 105f48f30894f356c936fc3cda94caf9a2328218 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Tue, 12 Oct 2021 10:46:13 +0300 Subject: [PATCH 51/79] cyclic dep --- .../peristence/v1/server/service/RedactionLogService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java index 5b9344a82..910962fc7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java @@ -14,7 +14,7 @@ import org.springframework.stereotype.Service; public class RedactionLogService { private final FileManagementStorageService fileManagementStorageService; - private final ManualRedactionService manualRedactionService; + private final ManualRedactionProviderService manualRedactionService; private final RedactionClient redactionClient; private final DossierPersistenceService dossierPersistenceService; private final FileStatusService fileStatusService; From e0aa7838aa2db324927f88fd44b2c6e752ce6377 Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Tue, 12 Oct 2021 14:36:41 +0200 Subject: [PATCH 52/79] RED-2422: Port DeletedFilesCleanupService from filemanagement service --- .../scheduler/DeletedFilesCleanupService.java | 55 +++++++++++++++++++ .../FileManagementServiceSettings.java | 1 + 2 files changed, 56 insertions(+) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java new file mode 100644 index 000000000..059f77b87 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java @@ -0,0 +1,55 @@ +package com.iqser.red.service.peristence.v1.server.service.scheduler; + +import java.time.OffsetDateTime; +import java.util.List; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.peristence.v1.server.service.DossierService; +import com.iqser.red.service.peristence.v1.server.service.FileService; +import com.iqser.red.service.peristence.v1.server.service.FileStatusService; +import com.iqser.red.service.peristence.v1.server.settings.FileManagementServiceSettings; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class DeletedFilesCleanupService { + + private final DossierService dossierService; + private final FileStatusService fileStatusService; + private final FileService fileService; + private final FileManagementServiceSettings settings; + + + @Scheduled(fixedDelay = 300000, initialDelay = 300000) + public void timedDeletion() { + + var now = OffsetDateTime.now(); + List dossiers = dossierService.getAllDossiers(); + + for (DossierEntity dossierEntity : dossiers) { + if (dossierEntity.getSoftDeletedTime() != null && dossierEntity.getHardDeletedTime() == null) { + if (dossierEntity.getSoftDeletedTime().isBefore(now.minusHours(settings.getSoftDeleteCleanupTime()))) { + dossierService.hardDeleteDossier(dossierEntity.getId()); + log.info("Hard deleted dossier with dossier id {} ", dossierEntity.getId()); + } + } else { + var fileEntities = fileStatusService.getDossierStatus(dossierEntity.getId()); + for (FileEntity fileEntity : fileEntities) { + if (fileEntity.getHardDeletedTime() == null && fileEntity.getDeleted() != null && fileEntity.getDeleted() + .isBefore(now.minusHours(settings.getSoftDeleteCleanupTime()))) { + fileService.hardDeleteFile(dossierEntity.getId(), fileEntity.getId()); + log.info("Hard deleted file with dossier id {} and file id {}", dossierEntity.getId(), fileEntity.getId()); + } + } + } + } + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/settings/FileManagementServiceSettings.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/settings/FileManagementServiceSettings.java index 6608279ed..36b550f39 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/settings/FileManagementServiceSettings.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/settings/FileManagementServiceSettings.java @@ -17,5 +17,6 @@ public class FileManagementServiceSettings { private int downloadCleanupDownloadFilesHours = 8; private int downloadCleanupNotDownloadFilesHours = 72; + private int softDeleteCleanupTime = 96; } From a0c6180eb9ff5916ec2e8b9a48a6b417c7fcb0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Tue, 12 Oct 2021 15:21:26 +0200 Subject: [PATCH 53/79] RED-2411: Fixed reupload of csv file --- .../FileStatusPersistenceService.java | 23 +++++++++++-------- .../integration/tests/FileAttributeTest.java | 1 + 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 4889ea3b6..54eff0cc2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -1,5 +1,16 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; @@ -9,16 +20,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import javax.transaction.Transactional; -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; @Service @@ -186,7 +189,7 @@ public class FileStatusPersistenceService { } - @Transactional + @Transactional(value = Transactional.TxType.REQUIRES_NEW) public void setFileAttributes(String dossierId, String fileId, Map fileAttributes) { fileAttributesRepository.deleteByFileId(fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index f9e673294..6cc7e209f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -118,6 +118,7 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { var request = new ImportCsvRequest(); request.setCsvFile(IOUtils.toByteArray(new ClassPathResource("files/test.csv").getInputStream())); fileAttributeClient.importCsv(dossier.getId(), request); + fileAttributeClient.importCsv(dossier.getId(), request); fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); From 6122080fc94cc1479e52951e82f504f146fb29c3 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 13 Oct 2021 10:18:40 +0300 Subject: [PATCH 54/79] RED-2313 --- .../persistence/DossierTemplatePersistenceService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 063776106..a21bfec6d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -31,9 +31,10 @@ public class DossierTemplatePersistenceService { if (createOrUpdateDossierRequest.getDossierTemplateId() != null) { Optional dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId()); if (dossierTemplate.isPresent()) { + // order is important + BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get()); dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.get().setModifiedBy(createOrUpdateDossierRequest.getRequestingUser()); - BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get()); return dossierTemplate.get(); } else { throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId())); @@ -41,9 +42,10 @@ public class DossierTemplatePersistenceService { } else { DossierTemplateEntity dossierTemplate = new DossierTemplateEntity(); dossierTemplate.setId(UUID.randomUUID().toString()); + // order is important + BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate); dossierTemplate.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setCreatedBy(createOrUpdateDossierRequest.getRequestingUser()); - BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate); return dossierTemplateRepository.save(dossierTemplate); } From 6b707936ef4ee3fb4fbc2c9ae7ec8f313a6b1e8b Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Wed, 13 Oct 2021 12:27:20 +0200 Subject: [PATCH 55/79] RED-2422: Port DeletedFilesCleanupService from filemanagement service --- .../v1/server/service/scheduler/DeletedFilesCleanupService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java index 059f77b87..54c433bb9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/DeletedFilesCleanupService.java @@ -45,6 +45,7 @@ public class DeletedFilesCleanupService { if (fileEntity.getHardDeletedTime() == null && fileEntity.getDeleted() != null && fileEntity.getDeleted() .isBefore(now.minusHours(settings.getSoftDeleteCleanupTime()))) { fileService.hardDeleteFile(dossierEntity.getId(), fileEntity.getId()); + fileStatusService.setFileStatusHardDeleted(fileEntity.getId()); log.info("Hard deleted file with dossier id {} and file id {}", dossierEntity.getId(), fileEntity.getId()); } } From 9c8fc0b5d95591e2a6fc09cf51402170b48fefa2 Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Wed, 13 Oct 2021 17:25:27 +0200 Subject: [PATCH 56/79] RED-2250: updating dependency --- persistence-service-v1/persistence-service-processor-v1/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/pom.xml b/persistence-service-v1/persistence-service-processor-v1/pom.xml index 3347fd5a6..bcca653f1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/pom.xml +++ b/persistence-service-v1/persistence-service-processor-v1/pom.xml @@ -98,7 +98,6 @@ com.google.guava guava - 29.0-jre compile From cee9ef35cab36356b4ee9435191d7d40a63e652c Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 14 Oct 2021 07:51:02 +0300 Subject: [PATCH 57/79] removed cleanup of viewed pages --- .../AnalysisFlagsCalculationService.java | 15 ------------- .../service/ManualRedactionService.java | 22 +++++++++---------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java index cd6004534..311fbf9e0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/AnalysisFlagsCalculationService.java @@ -1,6 +1,5 @@ package com.iqser.red.service.peristence.v1.server.service; -import com.google.common.collect.Sets; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ViewedPageEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; @@ -12,9 +11,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.time.OffsetDateTime; -import java.util.ArrayList; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; @@ -30,11 +27,6 @@ public class AnalysisFlagsCalculationService { @Async public void calculateFlags(String dossierId, String fileId) { - this.calculateFlags(dossierId,fileId, Sets.newHashSet()); - } - - @Async - public void calculateFlags(String dossierId, String fileId, Set pagesToSkip) { long startTime = System.currentTimeMillis(); @@ -53,9 +45,6 @@ public class AnalysisFlagsCalculationService { boolean hasComments = false; - var viewedPagesToReset = new ArrayList(); - - for (RedactionLogEntry entry : redactionLog.getRedactionLogEntry()) { if (entry.isExcluded()) { continue; @@ -89,16 +78,12 @@ public class AnalysisFlagsCalculationService { var viewedPage = entry.getPositions().isEmpty() ? null : viewedPages.get(entry.getPositions().get(0).getPage()); if (lastChange != null && lastChange.getDateTime() != null && viewedPage != null && viewedPage.isBefore(lastChange.getDateTime())) { - viewedPagesToReset.add(entry.getPositions().get(0).getPage()); hasUpdates = true; } } - viewedPagesToReset.removeAll(pagesToSkip); - - viewedPagesPersistenceService.resetViewedPages(fileId, file.getCurrentReviewer(), viewedPagesToReset); fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); log.info("Flag Calculations for file: {} took: {}ms", fileId, System.currentTimeMillis() - startTime); 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 0b75982be..ddee6d382 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 @@ -88,7 +88,7 @@ public class ManualRedactionService { } if (!addRedactionRequest.getPositions().isEmpty()) { - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(addRedactionRequest.getPositions().get(0).getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } return ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build(); @@ -120,7 +120,7 @@ public class ManualRedactionService { } if (!removeRedactionRequest.isRemoveFromDictionary()) { - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(removeRedactionRequest.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } return ManualAddResponse.builder() @@ -151,7 +151,7 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(forceRedactionRequest.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); return ManualAddResponse.builder() .annotationId(forceRedactionRequest.getAnnotationId()) @@ -181,7 +181,7 @@ public class ManualRedactionService { fileStatusPersistenceService.updateLastManualRedaction(fileId, now); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(legalBasisChangeRequest.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); return ManualAddResponse.builder() .annotationId(legalBasisChangeRequest.getAnnotationId()) @@ -286,7 +286,7 @@ public class ManualRedactionService { } if (!addRedaction.getPositions().isEmpty()) { - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(addRedaction.getPositions().get(0).getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } } @@ -307,7 +307,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(removeRedaction.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -323,7 +323,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(forceRedaction.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -338,7 +338,7 @@ public class ManualRedactionService { } else { fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now()); } - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(legalBasisChange.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -407,7 +407,7 @@ public class ManualRedactionService { boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(idRemoval.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } private String buildTypeId(RedactionLogEntry redactionLogEntry, DossierEntity dossier) { @@ -458,7 +458,7 @@ public class ManualRedactionService { recategorizationPersistenceService.updateStatus(fileId, annotationId, annotationStatus); boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(imageRecategorization.getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -484,7 +484,7 @@ public class ManualRedactionService { boolean hasSuggestions = calculateHasSuggestions(fileId); fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); if (!manualRedactionEntry.getPositions().isEmpty()) { - analysisFlagsCalculationService.calculateFlags(dossierId, fileId, Sets.newHashSet(manualRedactionEntry.getPositions().get(0).getPage())); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } } From 1b77a6a9b90345b5e601fac06ebe7d6d7f1fc25e Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 14 Oct 2021 09:09:38 +0300 Subject: [PATCH 58/79] num analysis set now --- .../service/persistence/FileStatusPersistenceService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 4889ea3b6..6643e0c63 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -61,6 +61,7 @@ public class FileStatusPersistenceService { file.setLegalBasisVersion(legalBasisVersion); file.setAnalysisDuration(duration); file.setDossierDictionaryVersion(dossierDictionaryVersion); + file.setNumberOfAnalyses(file.getNumberOfAnalyses()+1); file.setAnalysisVersion(analysisVersion); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); From 3105367aa9d1fce44c537ef9ba5292012dba18e0 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 08:55:46 +0200 Subject: [PATCH 59/79] RED-2403 Fixed issue with file collision for multi file report template uploads --- .../controller/ReportTemplateController.java | 65 ++- .../integration/tests/ReportTemplateTest.java | 395 +++++++++++++++++- 2 files changed, 430 insertions(+), 30 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 026ba049b..89903e147 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -1,7 +1,20 @@ package com.iqser.red.service.peristence.v1.server.controller; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +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.StorageIdUtils; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; @@ -11,17 +24,9 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Re import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; + +import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.apache.commons.io.IOUtils; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import java.io.IOException; -import java.util.List; -import java.util.UUID; - -import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; @RestController @RequiredArgsConstructor @@ -33,18 +38,17 @@ public class ReportTemplateController implements ReportTemplateResource { public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) { + String fileName = parseFileName(reportTemplateUploadRequest); + List reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId()); - for (ReportTemplateEntity reportTemplate : reportTemplates) { - if (reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName())) { - throw new ConflictException("Template already exists."); - } + if (doesFileNameExists(reportTemplates, fileName)) { + throw new ConflictException("Template already exists."); } - String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest - .getFileName()); + + String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), fileName); storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate()); String templateId = UUID.randomUUID().toString(); - reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest - .getFileName(), reportTemplateUploadRequest.isMultiFileReport(), reportTemplateUploadRequest.isActiveByDefault()); + reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isMultiFileReport(), reportTemplateUploadRequest.isActiveByDefault()); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); @@ -87,4 +91,29 @@ public class ReportTemplateController implements ReportTemplateResource { } + + private boolean doesFileNameExists(List reportTemplates, String fileName) { + + for (ReportTemplateEntity reportTemplate : reportTemplates) { + if (reportTemplate.getFileName().equals(fileName)) { + return true; + } + } + return false; + } + + + private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) { + + String fileName = reportTemplateUploadRequest.getFileName(); + if (reportTemplateUploadRequest.isMultiFileReport()) { + String[] splitFileName = StringUtils.split(fileName, "."); + if (splitFileName.length != 2) { + throw new BadRequestException("FileName is not correct."); + } + fileName = splitFileName[0] + "(multifile)." + splitFileName[1]; + } + return fileName; + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 66f46ddc1..6b4d82c63 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,13 +1,15 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import static org.assertj.core.api.Assertions.assertThat; public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { @@ -17,38 +19,407 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { @Autowired private ReportTemplateClient reportTemplateClient; + + /* + * Upload report, verify it exist and delete afterwards + */ @Test public void testReportTemplate() { + // Arrange + String fileName = "report.xlsx"; var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + // Act & Assert var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isEmpty(); reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() .activeByDefault(true) .dossierTemplateId(dossierTemplate.getId()) - .multiFileReport(true) - .fileName("test.docx") - .template(new byte[]{1, 2, 3, 4}).build()); - + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - - var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator().next().getTemplateId()); + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); assertThat(download.getFile().length).isEqualTo(4); - reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isEmpty(); } + + + /* + * Upload multiFile report, verify it exist with correct fileName and delete afterwards + */ + @Test + public void testMultiFileReportTemplate() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + } + + + /* + * Try to upload template two times + */ + @Test + public void testReportTemplateTwoTimes() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("Template already exists"); + + } + + + /* + * Try to upload multi file template two times + */ + @Test + public void testMultiFileReportTemplateTwoTimes() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("Template already exists"); + + } + + + /* + * Upload template file and then multi file template with the same name + */ + @Test + public void testReportTemplateAndThenMultiFileReportTemple() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + assertThat(availableTemplates.size()).isEqualTo(2); + + var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1) + .getTemplateId()); + assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate); + assertThat(secondTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + } + + + /* + * Upload multi file template and then template file with the same name + */ + @Test + public void testMultiFileReportTemplateAndThenReportTemple() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + assertThat(availableTemplates.size()).isEqualTo(2); + + var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1) + .getTemplateId()); + assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate); + assertThat(secondTemplate.getFileName()).isEqualTo(fileName); + + } + + + /* + * Upload MF with ending xlsx + */ + @Test + public void testMultiFileReportTemplateAsExcel() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload MF with ending docx + */ + @Test + public void testMultiFileReportTemplateAsWord() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".docx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload multiFile report with fantasy fileEnding + */ + @Test + public void testMultiFileReportTemplateWithFantasyName() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".fantasyEnding"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload multiFile report with corrupt fileName + */ + @Test + public void testMultiFileReportTemplateWithCorruptFileName() { + // Arrange + String fileName = "report"; + String fileEnding = "endingWithoutDot"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("FileName is not correct"); + + } + } From 8b0d5b63d5b77e74e2ae4280ce4f094c53b3c602 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 10:03:18 +0200 Subject: [PATCH 60/79] RED-2403 Adopted controller and test to handle fileNames containing dots --- .../controller/ReportTemplateController.java | 18 +++++++--- .../integration/tests/ReportTemplateTest.java | 34 +++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 89903e147..709b99927 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -105,15 +105,23 @@ public class ReportTemplateController implements ReportTemplateResource { private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) { - String fileName = reportTemplateUploadRequest.getFileName(); if (reportTemplateUploadRequest.isMultiFileReport()) { - String[] splitFileName = StringUtils.split(fileName, "."); - if (splitFileName.length != 2) { + String fileName = reportTemplateUploadRequest.getFileName(); + + int index = StringUtils.lastIndexOf(fileName, "."); + if (index < 1) { throw new BadRequestException("FileName is not correct."); } - fileName = splitFileName[0] + "(multifile)." + splitFileName[1]; + String fileNameWithoutEnding = StringUtils.substring(fileName, 0, index); + String fileEnding = StringUtils.substring(fileName, index); + + if (StringUtils.isEmpty(fileNameWithoutEnding) || StringUtils.isEmpty(fileEnding)) { + throw new BadRequestException("FileName is not correct."); + } + return fileNameWithoutEnding + "(multifile)" + fileEnding; + } else { + return reportTemplateUploadRequest.getFileName(); } - return fileName; } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 6b4d82c63..e2028b4c5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -394,6 +394,40 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + /* + * Upload multiFile report with fantasy fileEnding + */ + @Test + public void testMultiFileReportTemplateWithDotsInName() { + // Arrange + String fileName = "awesome.report.with.many.dots"; + String fileEnding = ".xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + /* * Upload multiFile report with corrupt fileName */ From 939a2a5752a82862ddfe2a6a72f0f4a945f07941 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 10:04:48 +0200 Subject: [PATCH 61/79] RED-2403 Removed blank --- .../v1/server/controller/ReportTemplateController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 709b99927..bc0f186a2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -118,7 +118,7 @@ public class ReportTemplateController implements ReportTemplateResource { if (StringUtils.isEmpty(fileNameWithoutEnding) || StringUtils.isEmpty(fileEnding)) { throw new BadRequestException("FileName is not correct."); } - return fileNameWithoutEnding + "(multifile)" + fileEnding; + return fileNameWithoutEnding + "(multifile)" + fileEnding; } else { return reportTemplateUploadRequest.getFileName(); } From eef1459f0b56bb53b8595ec7cf03121d559b7a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 14 Oct 2021 12:42:32 +0200 Subject: [PATCH 62/79] RED-2252: Use compliant encryption algorithm AES/GCM/NoPadding --- .../service/EncryptionDecryptionService.java | 98 ++++++++++++++----- 1 file changed, 72 insertions(+), 26 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java index be071f77f..88913d646 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EncryptionDecryptionService.java @@ -1,61 +1,107 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import lombok.SneakyThrows; + import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; + +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; +import java.security.SecureRandom; +import java.security.spec.KeySpec; import java.util.Arrays; import java.util.Base64; @Service public class EncryptionDecryptionService { - @Value("${configuration-service.crypto.key:redaction}") + @Value("${persistence-service.crypto.key:redaction}") private String key; - private SecretKeySpec secretKey; + + private SecretKey secretKey; + private byte[] iv; + @SneakyThrows @PostConstruct protected void postConstruct() { - byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); - var sha = MessageDigest.getInstance("SHA-1"); - keyBytes = sha.digest(keyBytes); - keyBytes = Arrays.copyOf(keyBytes, 16); - secretKey = new SecretKeySpec(keyBytes, "AES"); + + SecureRandom secureRandom = new SecureRandom(); + iv = new byte[12]; + secureRandom.nextBytes(iv); + secretKey = generateSecretKey(key, iv); } + @SneakyThrows public String encrypt(String strToEncrypt) { - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, secretKey); - return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); + + return Base64.getEncoder().encodeToString(encrypt(strToEncrypt.getBytes())); } - @SneakyThrows - public byte[] encrypt(byte[] bytes) { - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, secretKey); - return cipher.doFinal(bytes); - } - - @SneakyThrows - public byte[] decrypt(byte[] bytes) { - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.ENCRYPT_MODE, secretKey); - return cipher.doFinal(bytes); - } @SneakyThrows public String decrypt(String strToDecrypt) { - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); - cipher.init(Cipher.DECRYPT_MODE, secretKey); - return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)), StandardCharsets.UTF_8); + + byte[] bytes = Base64.getDecoder().decode(strToDecrypt); + return new String(decrypt(bytes), StandardCharsets.UTF_8); } + @SneakyThrows + public byte[] encrypt(byte[] data) { + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec parameterSpec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec); + byte[] encryptedData = cipher.doFinal(data); + ByteBuffer byteBuffer = ByteBuffer.allocate(4 + iv.length + encryptedData.length); + byteBuffer.putInt(iv.length); + byteBuffer.put(iv); + byteBuffer.put(encryptedData); + return byteBuffer.array(); + } + + + @SneakyThrows + public byte[] decrypt(byte[] encryptedData) { + + ByteBuffer byteBuffer = ByteBuffer.wrap(encryptedData); + int noonceSize = byteBuffer.getInt(); + if (noonceSize < 12 || noonceSize >= 16) { + throw new IllegalArgumentException("Nonce size is incorrect. Make sure that the incoming data is an AES encrypted file."); + } + byte[] iv = new byte[noonceSize]; + byteBuffer.get(iv); + + SecretKey secretKey = generateSecretKey(key, iv); + + byte[] cipherBytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(cipherBytes); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec parameterSpec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec); + return cipher.doFinal(cipherBytes); + } + + + @SneakyThrows + public SecretKey generateSecretKey(String password, byte[] iv) { + + KeySpec spec = new PBEKeySpec(password.toCharArray(), iv, 65536, 128); // AES-128 + SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + byte[] key = secretKeyFactory.generateSecret(spec).getEncoded(); + return new SecretKeySpec(key, "AES"); + } + } From bda8893c6c8df3f86287d3f0c2b4fc7d76201220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 14 Oct 2021 13:27:23 +0200 Subject: [PATCH 63/79] RED-2466: Fixed store multifile flag on report upload --- .../v1/server/controller/ReportTemplateController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index bc0f186a2..1c4b8a018 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -48,7 +48,7 @@ public class ReportTemplateController implements ReportTemplateResource { String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), fileName); storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate()); String templateId = UUID.randomUUID().toString(); - reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isMultiFileReport(), reportTemplateUploadRequest.isActiveByDefault()); + reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport()); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); From f82bbf76f99ee34a0d1bdb85cb21756997f07fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 14 Oct 2021 13:58:40 +0200 Subject: [PATCH 64/79] RED-2403: Fixed duplicate multifile nameing in downloads --- .../controller/ReportTemplateController.java | 45 +++---------------- .../integration/tests/ReportTemplateTest.java | 43 +++--------------- 2 files changed, 14 insertions(+), 74 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 1c4b8a018..4c2a4586b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -38,17 +38,19 @@ public class ReportTemplateController implements ReportTemplateResource { public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) { - String fileName = parseFileName(reportTemplateUploadRequest); List reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId()); - if (doesFileNameExists(reportTemplates, fileName)) { - throw new ConflictException("Template already exists."); + for (ReportTemplateEntity reportTemplate : reportTemplates) { + if (reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest.isMultiFileReport() + || reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest.isMultiFileReport()) { + throw new ConflictException("Template already exists."); + } } - String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), fileName); + String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest.getFileName()); storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate()); String templateId = UUID.randomUUID().toString(); - reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport()); + reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest.getFileName(), reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport()); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); @@ -91,37 +93,4 @@ public class ReportTemplateController implements ReportTemplateResource { } - - private boolean doesFileNameExists(List reportTemplates, String fileName) { - - for (ReportTemplateEntity reportTemplate : reportTemplates) { - if (reportTemplate.getFileName().equals(fileName)) { - return true; - } - } - return false; - } - - - private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) { - - if (reportTemplateUploadRequest.isMultiFileReport()) { - String fileName = reportTemplateUploadRequest.getFileName(); - - int index = StringUtils.lastIndexOf(fileName, "."); - if (index < 1) { - throw new BadRequestException("FileName is not correct."); - } - String fileNameWithoutEnding = StringUtils.substring(fileName, 0, index); - String fileEnding = StringUtils.substring(fileName, index); - - if (StringUtils.isEmpty(fileNameWithoutEnding) || StringUtils.isEmpty(fileEnding)) { - throw new BadRequestException("FileName is not correct."); - } - return fileNameWithoutEnding + "(multifile)" + fileEnding; - } else { - return reportTemplateUploadRequest.getFileName(); - } - } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index e2028b4c5..6f67c7608 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -91,7 +91,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx"); var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); assertThat(download.getFile().length).isEqualTo(4); @@ -233,7 +233,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1) .getTemplateId()); assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate); - assertThat(secondTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + assertThat(secondTemplate.getFileName()).isEqualTo("report.xlsx"); } @@ -267,7 +267,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx"); var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); assertThat(download.getFile().length).isEqualTo(4); @@ -321,7 +321,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding); } @@ -355,7 +355,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding); } @@ -389,7 +389,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding); } @@ -423,36 +423,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { .next() .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); - - } - - - /* - * Upload multiFile report with corrupt fileName - */ - @Test - public void testMultiFileReportTemplateWithCorruptFileName() { - // Arrange - String fileName = "report"; - String fileEnding = "endingWithoutDot"; - var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - - // Act & Assert - var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); - assertThat(availableTemplates).isEmpty(); - - final Throwable thrown = catchThrowable(() -> { - reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() - .activeByDefault(true) - .dossierTemplateId(dossierTemplate.getId()) - .multiFileReport(true) - .fileName(fileName + fileEnding) - .template(new byte[]{1, 2, 3, 4}) - .build()); - }); - - assertThat(thrown.getMessage()).contains("FileName is not correct"); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding); } From 00116d93469dbcfc05c4226d12555fd915701be6 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 15 Oct 2021 09:31:22 +0300 Subject: [PATCH 65/79] fixed createdDated/ModifiedDate dossierTemplate update --- .../CreateOrUpdateDossierTemplateRequest.java | 8 -------- .../service/persistence/FileStatusPersistenceService.java | 2 +- .../service/DossierTemplateTesterAndProvider.java | 3 --- 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java index 1d1ead5e8..487604081 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/CreateOrUpdateDossierTemplateRequest.java @@ -22,14 +22,6 @@ public class CreateOrUpdateDossierTemplateRequest { private String description; - private OffsetDateTime dateAdded; - - private OffsetDateTime dateModified; - - private String createdBy; - - private String modifiedBy; - private OffsetDateTime validFrom; private OffsetDateTime validTo; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 6643e0c63..c3d71ed2c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -61,8 +61,8 @@ public class FileStatusPersistenceService { file.setLegalBasisVersion(legalBasisVersion); file.setAnalysisDuration(duration); file.setDossierDictionaryVersion(dossierDictionaryVersion); - file.setNumberOfAnalyses(file.getNumberOfAnalyses()+1); file.setAnalysisVersion(analysisVersion); + file.setNumberOfAnalyses(file.getNumberOfAnalyses()+1); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java index 3767b1dcb..ba6f4ad77 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTemplateTesterAndProvider.java @@ -21,9 +21,6 @@ public class DossierTemplateTesterAndProvider { public DossierTemplate provideTestTemplate() { CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); - cru.setCreatedBy("1"); - cru.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - cru.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); cru.setName("Template 1"); cru.setDescription("Template 1"); From 7bd8214a3237ab3ac58ba17c1f4e3d8e35743a77 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 15 Oct 2021 18:23:36 +0300 Subject: [PATCH 66/79] enumerated type -> int to string in db --- .../v1/processor/entity/annotations/IdRemovalEntity.java | 1 + .../entity/annotations/ManualForceRedactionEntity.java | 1 + .../entity/annotations/ManualImageRecategorizationEntity.java | 1 + .../entity/annotations/ManualLegalBasisChangeEntity.java | 1 + .../entity/annotations/ManualRedactionEntryEntity.java | 1 + .../v1/processor/entity/configuration/WatermarkEntity.java | 1 + .../processor/entity/dossier/DossierAttributeConfigEntity.java | 1 + .../management/v1/processor/entity/dossier/DossierEntity.java | 1 + .../v1/processor/entity/dossier/DossierTemplateEntity.java | 1 + .../v1/processor/entity/dossier/FileAttributeConfigEntity.java | 1 + .../management/v1/processor/entity/dossier/FileEntity.java | 2 ++ .../v1/processor/entity/download/DownloadStatusEntity.java | 2 ++ 12 files changed, 14 insertions(+) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java index 1ec9161cc..19601aeb1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/IdRemovalEntity.java @@ -23,6 +23,7 @@ public class IdRemovalEntity { @Column(name = "user_id") private String user; @Column + @Enumerated(EnumType.STRING) private AnnotationStatus status; @Column private boolean removeFromDictionary; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java index 807820b72..a4f4fb7b2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualForceRedactionEntity.java @@ -23,6 +23,7 @@ public class ManualForceRedactionEntity { @Column(name = "user_id") private String user; @Column + @Enumerated(EnumType.STRING) private AnnotationStatus status; @Column(length = 4000) private String legalBasis; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java index bab2933b4..8e85d596f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualImageRecategorizationEntity.java @@ -23,6 +23,7 @@ public class ManualImageRecategorizationEntity { @Column(name = "user_id") private String user; @Column + @Enumerated(EnumType.STRING) private AnnotationStatus status; @Column private String typeId; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java index 259a79064..9161c6251 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java @@ -24,6 +24,7 @@ public class ManualLegalBasisChangeEntity { @Column(name = "user_id") private String user; @Column + @Enumerated(EnumType.STRING) private AnnotationStatus status; @Column private String legalBasis; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index 71e05b523..2a73486a1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -33,6 +33,7 @@ public class ManualRedactionEntryEntity { @Column private String legalBasis; @Column + @Enumerated(EnumType.STRING) private AnnotationStatus status; @Column private boolean addToDictionary; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java index 6b685649a..6e5b0f037 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java @@ -32,6 +32,7 @@ public class WatermarkEntity { @Column private String fontType; @Column + @Enumerated(EnumType.STRING) private WatermarkOrientation orientation; @JsonIgnore diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java index b3d818cda..c64ab6a4a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierAttributeConfigEntity.java @@ -27,6 +27,7 @@ public class DossierAttributeConfigEntity { private String placeholder; @Column + @Enumerated(EnumType.STRING) private DossierAttributeType type = DossierAttributeType.TEXT; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java index 423964b93..673ebf04e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java @@ -52,6 +52,7 @@ public class DossierEntity { @Builder.Default @ElementCollection + @Enumerated(EnumType.STRING) private Set downloadFileTypes = new HashSet<>(); @Column diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java index a57939915..8ceceb541 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java @@ -55,6 +55,7 @@ public class DossierTemplateEntity { private boolean deleted; @ElementCollection + @Enumerated(EnumType.STRING) private Set downloadFileTypes = new HashSet<>(); @JsonIgnore diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java index 5b2b318f4..5d9113454 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileAttributeConfigEntity.java @@ -34,6 +34,7 @@ public class FileAttributeConfigEntity { @Column private String placeholder; @Column + @Enumerated(EnumType.STRING) private FileAttributeType type = FileAttributeType.TEXT; @ManyToOne diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java index 653613fe5..faaa67166 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java @@ -29,9 +29,11 @@ public class FileEntity { private String filename; @Column + @Enumerated(EnumType.STRING) private FileStatus status; @Column + @Enumerated(EnumType.STRING) private FileStatus lastSuccessfulStatus; @Column diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java index 96a64374d..f94e97d19 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusEntity.java @@ -31,6 +31,7 @@ public class DownloadStatusEntity { @Column private String mimeType; @Column + @Enumerated(EnumType.STRING) private DownloadStatusValue status; @Column private OffsetDateTime creationDate; @@ -46,6 +47,7 @@ public class DownloadStatusEntity { private List files = new ArrayList<>(); @ElementCollection + @Enumerated(EnumType.STRING) private List downloadFileTypes = new ArrayList<>(); From 0a6dc82e63e2a52b43207a5656521b2e5f86227c Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 15 Oct 2021 19:04:21 +0300 Subject: [PATCH 67/79] unique constraint fix --- .../entity/dossier/DossierTemplateEntity.java | 2 +- .../v1/server/controller/ControllerAdvice.java | 13 +++++++++++++ .../integration/tests/DossierTemplateTest.java | 7 ++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java index 8ceceb541..326cb7334 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java @@ -27,7 +27,7 @@ public class DossierTemplateEntity { @Id private String id; - @Column + @Column(unique = true) private String name; @Column(length = 4000) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index dab624c78..c71b27697 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -6,7 +6,9 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import lombok.extern.slf4j.Slf4j; +import org.postgresql.util.PSQLException; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -55,4 +57,15 @@ public class ControllerAdvice { public ErrorMessage handleIBadRequestException(BadRequestException e) { return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); } + + @ResponseBody + @ExceptionHandler(value = PSQLException.class) + public ResponseEntity handleSQLException(PSQLException e) { + if (e.getMessage().contains("violates unique constraint")) { + return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "Unique constraint violation"), HttpStatus.CONFLICT); + } else { + log.error("PLSQL Exception occurred: {}", e.getMessage(), e); + return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "SQL Exception"), HttpStatus.INTERNAL_SERVER_ERROR); + } + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 09fc5ce53..48bcc1d2e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -4,6 +4,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; +import feign.FeignException; import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -21,9 +22,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @Test public void testDossierTemplate() { - var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + try { + dossierTemplateTesterAndProvider.provideTestTemplate(); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(409); + } var allTemplates = dossierTemplateClient.getAllDossierTemplates(); assertThat(allTemplates.size()).isEqualTo(1); From 693a92bf10960a0e4664964a0e1e696792a0df7d Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Sun, 17 Oct 2021 17:41:17 +0300 Subject: [PATCH 68/79] unique constraint fix --- .../integration/service/DossierTesterAndProvider.java | 8 ++++---- .../v1/server/integration/tests/DossierStatsTest.java | 9 +++++++-- .../integration/tests/DownloadPreparationTest.java | 2 +- .../peristence/v1/server/integration/tests/TypeTest.java | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index c1f65aa36..77d67b450 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -29,11 +29,11 @@ public class DossierTesterAndProvider { return provideTestDossier(testTemplate, "Dossier1"); } - public Dossier provideTestDossier(DossierTemplate testTemplate, String filename) { + public Dossier provideTestDossier(DossierTemplate testTemplate, String dossierName) { CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); - cru.setDossierName(filename); - cru.setDescription(filename); + cru.setDossierName(dossierName); + cru.setDescription(dossierName); cru.setWatermarkEnabled(true); cru.setMemberIds(Sets.newHashSet("1")); cru.setOwnerId("1"); @@ -45,7 +45,7 @@ public class DossierTesterAndProvider { Dossier result = dossierClient.addDossier(cru); - assertThat(result.getDossierName()).isEqualTo(filename); + assertThat(result.getDossierName()).isEqualTo(dossierName); Dossier loadedDossier = dossierClient.getDossierById(result.getId(),false); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java index 1eccb1052..22320776c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatsClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +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; @@ -22,6 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat; public class DossierStatsTest extends AbstractPersistenceServerServiceTest { private static final int NUMBER_PAGES_ANALYZED = 5; + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired private DossierTesterAndProvider dossierTesterAndProvider; @@ -40,7 +44,8 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { @Before public void setupData() { - dossier1 = dossierTesterAndProvider.provideTestDossier(); + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + dossier1 = dossierTesterAndProvider.provideTestDossier(dossierTemplate); //provides 2 files var file1 = fileTesterAndProvider.testAndProvideFile(dossier1, "file1"); var file2 = fileTesterAndProvider.testAndProvideFile(dossier1, "file2"); @@ -66,7 +71,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { }); // second dossier - dossier2 = dossierTesterAndProvider.provideTestDossier("Dossier2"); + dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate,"Dossier2"); var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, "file3"); var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, "file4"); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 006844b27..ba729cc99 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -69,7 +69,7 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - var dossier = dossierTesterAndProvider.provideTestDossier(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); var file = fileTesterAndProvider.testAndProvideFile(dossier); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java index 5ff037ced..058a9e759 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -78,7 +78,7 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { assertThat(typesForTemplate).isEmpty(); - var dossier = dossierTesterAndProvider.provideTestDossier(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); var dossierType = typeProvider.testAndProvideType(dossierTemplate, dossier, "dossier-dict"); var typesForDossier = dictionaryClient.getAllTypesForDossier(dossierType.getDossierId()); From b7107e35207736d9b18f139160daa233e450f321 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Mon, 18 Oct 2021 11:02:53 +0200 Subject: [PATCH 69/79] RED-2455 Bugfix: Delete file attributes if hard deleting file. And added test --- .../FileStatusPersistenceService.java | 2 + .../integration/tests/FileAttributeTest.java | 150 +++++++++++++----- .../v1/server/integration/tests/FileTest.java | 2 +- 3 files changed, 117 insertions(+), 37 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index f3132f39a..c58e05441 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -254,6 +254,8 @@ public class FileStatusPersistenceService { file.setStatus(FileStatus.DELETED); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + + fileAttributesRepository.deleteByFileId(fileId); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 6cc7e209f..d57a99b37 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -1,31 +1,34 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; -import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeClient; -import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient; -import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; -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.dossiertemplate.FileAttributesGeneralConfiguration; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; -import lombok.SneakyThrows; -import org.apache.commons.io.IOUtils; -import org.assertj.core.util.Lists; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; +import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.assertj.core.api.Assertions.assertThat; +import org.apache.commons.io.IOUtils; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; + +import com.google.common.collect.Sets; +import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; +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.dossiertemplate.FileAttributesGeneralConfiguration; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; + +import lombok.SneakyThrows; public class FileAttributeTest extends AbstractPersistenceServerServiceTest { - @Autowired private FileTesterAndProvider fileTesterAndProvider; @@ -41,15 +44,18 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; + @Autowired + private UploadClient uploadClient; + @SneakyThrows @Test public void testFileAttributes() { + var dossier = dossierTesterAndProvider.provideTestDossier(); var file = fileTesterAndProvider.testAndProvideFile(dossier); - FileAttributesGeneralConfiguration generalConfig = new FileAttributesGeneralConfiguration(); generalConfig.setDelimiter(","); generalConfig.setFilenameMappingColumnHeaderName("Name"); @@ -61,36 +67,48 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { List configs = new ArrayList<>(); configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(false).label("Attribute A").build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(false).label("Attribute B").build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C").build()); - configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D").build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute A") + .primaryAttribute(false) + .label("Attribute A") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute B") + .primaryAttribute(false) + .label("Attribute B") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute C") + .primaryAttribute(false) + .label("Attribute C") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute D") + .primaryAttribute(false) + .label("Attribute D") + .build()); fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), configs); - List loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); assertThat(loadedConfigs.size()).isEqualTo(5); - fileAttributeConfigClient.deleteFileAttributeConfigs(loadedConfigs.stream() .filter(a -> a.getCsvColumnHeader().equalsIgnoreCase("Attribute C")) .findAny() .map(FileAttributeConfig::getId) .orElseThrow(() -> new IllegalArgumentException("Should exists!"))); - fileAttributeConfigClient.deleteFileAttributeConfigs(loadedConfigs.stream() .filter(a -> a.getCsvColumnHeader().equalsIgnoreCase("Attribute D")) .findAny() .map(FileAttributeConfig::getId) - .stream().collect(Collectors.toList())); - + .stream() + .collect(Collectors.toList())); loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); assertThat(loadedConfigs.size()).isEqualTo(3); - FileAttributeConfig newConfig = new FileAttributeConfig(); newConfig.setPrimaryAttribute(true); newConfig.setLabel("Test Attribute"); @@ -98,7 +116,6 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); assertThat(loadedConfigs.size()).isEqualTo(4); - newConfig.setId(created.getId()); newConfig.setLabel("Test Attribute Update"); var updated = fileAttributeConfigClient.addOrUpdateFileAttributeConfig(dossier.getDossierTemplateId(), newConfig); @@ -106,21 +123,18 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfigs.size()).isEqualTo(4); assertThat(updated.getLabel()).isEqualTo("Test Attribute Update"); - fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), Map.of(updated.getId(), "Lorem Ipsum")); - - Map fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + Map fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()) + .getFileAttributes(); assertThat(fileAttributes.size()).isEqualTo(1); assertThat(fileAttributes.entrySet().iterator().next().getValue()).isEqualTo("Lorem Ipsum"); - var request = new ImportCsvRequest(); request.setCsvFile(IOUtils.toByteArray(new ClassPathResource("files/test.csv").getInputStream())); fileAttributeClient.importCsv(dossier.getId(), request); fileAttributeClient.importCsv(dossier.getId(), request); - fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); assertThat(fileAttributes.size()).isEqualTo(2); @@ -130,7 +144,6 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); assertThat(fileAttributes.size()).isEqualTo(2); - fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList()); loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); @@ -138,8 +151,73 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); assertThat(fileAttributes.size()).isEqualTo(0); - } + @SneakyThrows + @Test + public void testDeleteFile() { + // Create file with attributes + var dossier = dossierTesterAndProvider.provideTestDossier(); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + FileAttributesGeneralConfiguration generalConfig = new FileAttributesGeneralConfiguration(); + generalConfig.setDelimiter(","); + generalConfig.setFilenameMappingColumnHeaderName("Name"); + generalConfig.setDossierTemplateId(dossier.getDossierTemplateId()); + + fileAttributeConfigClient.setFileAttributesGeneralConfig(dossier.getDossierTemplateId(), generalConfig); + var loadedConfig = fileAttributeConfigClient.getFileAttributesGeneralConfig(dossier.getDossierTemplateId()); + assertThat(loadedConfig.getDelimiter()).isEqualTo(","); + + List configs = new ArrayList<>(); + configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute A") + .primaryAttribute(false) + .label("Attribute A") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute B") + .primaryAttribute(false) + .label("Attribute B") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute C") + .primaryAttribute(false) + .label("Attribute C") + .build()); + configs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute D") + .primaryAttribute(false) + .label("Attribute D") + .build()); + + fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), configs); + + List loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); + assertThat(loadedConfigs.size()).isEqualTo(5); + + fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), Map.of(loadedConfigs.get(0) + .getId(), "Lorem Ipsum")); + + Map fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()) + .getFileAttributes(); + assertThat(fileAttributes.size()).isEqualTo(1); + assertThat(fileAttributes.entrySet().iterator().next().getValue()).isEqualTo("Lorem Ipsum"); + + // Delete file + uploadClient.deleteFile(dossier.getId(), file.getId()); + uploadClient.hardDeleteFiles(dossier.getId(), Sets.newHashSet(file.getId())); + var deletedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(deletedFile.getFileAttributes()).isEmpty(); + + // Reupload file + var newFile = fileTesterAndProvider.testAndProvideFile(dossier); + assertThat(file.getId()).isEqualTo(newFile.getId()); + + var loadedFile = fileClient.getFileStatus(dossier.getId(), newFile.getId()); + assertThat(loadedFile.getFileAttributes()).isEmpty(); + } + } 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 b8ea9a261..07767d080 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 @@ -141,7 +141,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { } @Test - public void testFilewithRedactions() { + public void testFileWithRedactions() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); From 3f7f27c791614a9a53e08447ad5c23c773d85125 Mon Sep 17 00:00:00 2001 From: devplant Date: Tue, 19 Oct 2021 10:32:41 +0300 Subject: [PATCH 70/79] RED-2437 Notification Preferences Persistence -first implementation, including integration tests --- .../notification/EmailNotificationType.java | 5 ++ .../notification/NotificationPreferences.java | 25 ++++++ .../NotificationPreferencesResource.java | 25 ++++++ .../NotificationPreferencesEntity.java | 38 +++++++++ ...ficationPreferencesPersistenceService.java | 42 ++++++++++ .../NotificationPreferencesRepository.java | 7 ++ .../NotificationPreferencesController.java | 31 ++++++++ .../client/NotificationPreferencesClient.java | 8 ++ .../tests/NotificationPreferencesTest.java | 79 +++++++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 3 + 10 files changed, 263 insertions(+) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/EmailNotificationType.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/NotificationPreferences.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationPreferencesResource.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.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/NotificationPreferencesRepository.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationPreferencesController.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/NotificationPreferencesClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/EmailNotificationType.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/EmailNotificationType.java new file mode 100644 index 000000000..7875f1b2e --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/EmailNotificationType.java @@ -0,0 +1,5 @@ +package com.iqser.red.service.persistence.service.v1.api.model.notification; + +public enum EmailNotificationType { + DAILY, DAILY_SUMMARY, WEEKLY_SUMMARY +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/NotificationPreferences.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/NotificationPreferences.java new file mode 100644 index 000000000..8a98bac17 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/notification/NotificationPreferences.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.persistence.service.v1.api.model.notification; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NotificationPreferences { + + private String userId; + private boolean inAppNotificationsEnabled; + private boolean emailNotificationsEnabled; + private EmailNotificationType emailNotificationType; + @Builder.Default + private List emailNotifications = new ArrayList<>(); + @Builder.Default + private List inAppNotifications = new ArrayList<>(); +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationPreferencesResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationPreferencesResource.java new file mode 100644 index 000000000..44831c77f --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationPreferencesResource.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.persistence.service.v1.api.resources; + +import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationPreferences; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +public interface NotificationPreferencesResource { + + String REST_PATH = "/notification-preferences"; + + String USER_ID_PARAM = "userId"; + String USER_ID_PATH_PARAM = "/{" + USER_ID_PARAM + "}"; + + + @PostMapping(value = REST_PATH + USER_ID_PATH_PARAM, consumes = MediaType.APPLICATION_JSON_VALUE) + void setNotificationPreferences(@PathVariable(USER_ID_PARAM) String userId, @RequestBody NotificationPreferences notificationRequest); + + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = REST_PATH + USER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) + NotificationPreferences getNotificationPreferences(@PathVariable(USER_ID_PARAM) String userId); + + @DeleteMapping(value = REST_PATH + USER_ID_PATH_PARAM, consumes = MediaType.APPLICATION_JSON_VALUE) + void deleteNotificationPreferences(@PathVariable(USER_ID_PARAM) String userId); +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java new file mode 100644 index 000000000..b0f48b6cd --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/notification/NotificationPreferencesEntity.java @@ -0,0 +1,38 @@ +package com.iqser.red.service.persistence.management.v1.processor.entity.notification; + +import com.iqser.red.service.persistence.service.v1.api.model.notification.EmailNotificationType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "notification_preference") +public class NotificationPreferencesEntity { + + @Id + private String userId; + + @Column + private boolean inAppNotificationsEnabled; + + @Column + private boolean emailNotificationsEnabled; + + @Column + private EmailNotificationType emailNotificationType; + + @ElementCollection + private List emailNotifications = new ArrayList<>(); + + @ElementCollection + private List inAppNotifications = new ArrayList<>(); +} \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java new file mode 100644 index 000000000..bb2dfd1e8 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java @@ -0,0 +1,42 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationPreferencesEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationPreferencesRepository; +import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationPreferences; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Service +@RequiredArgsConstructor +public class NotificationPreferencesPersistenceService { + + private final NotificationPreferencesRepository notificationPreferencesRepository; + + @Transactional + public void setNotificationPreference(String userId, NotificationPreferences notification) { + notificationPreferencesRepository.findById(userId) + .ifPresentOrElse(n -> { + BeanUtils.copyProperties(notification, n); + }, () -> { + NotificationPreferencesEntity notificationPreferencesEntity = new NotificationPreferencesEntity(); + BeanUtils.copyProperties(notification, notificationPreferencesEntity); + notificationPreferencesRepository.save(notificationPreferencesEntity); + }); + } + + @Transactional + public void deleteNotificationPreferences(String userId) { + notificationPreferencesRepository.deleteById(userId); + } + + @Transactional + public NotificationPreferencesEntity getNotificationPreferences(String userId) { + return notificationPreferencesRepository.findById(userId).orElseThrow(() -> { + throw new NotFoundException("Notification preferences not found for userId: " + userId); + }); + } +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java new file mode 100644 index 000000000..206736d0d --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationPreferencesRepository.java @@ -0,0 +1,7 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationPreferencesEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NotificationPreferencesRepository extends JpaRepository { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationPreferencesController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationPreferencesController.java new file mode 100644 index 000000000..567e7fdf2 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationPreferencesController.java @@ -0,0 +1,31 @@ +package com.iqser.red.service.peristence.v1.server.controller; + +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationPreferences; +import com.iqser.red.service.persistence.service.v1.api.resources.NotificationPreferencesResource; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +@RestController +@RequiredArgsConstructor +public class NotificationPreferencesController implements NotificationPreferencesResource { + + private final NotificationPreferencesPersistenceService notificationPreferencesPersistenceService; + + @Override + public void setNotificationPreferences(String userId, NotificationPreferences notificationRequest) { + notificationPreferencesPersistenceService.setNotificationPreference(userId, notificationRequest); + } + + @Override + public NotificationPreferences getNotificationPreferences(String userId) { + return convert(notificationPreferencesPersistenceService.getNotificationPreferences(userId), NotificationPreferences.class); + } + + @Override + public void deleteNotificationPreferences(String userId) { + notificationPreferencesPersistenceService.deleteNotificationPreferences(userId); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/NotificationPreferencesClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/NotificationPreferencesClient.java new file mode 100644 index 000000000..c137e1a5c --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/NotificationPreferencesClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.NotificationPreferencesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "NotificationPreferencesClient", url = "http://localhost:${server.port}") +public interface NotificationPreferencesClient extends NotificationPreferencesResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesTest.java new file mode 100644 index 000000000..73b7b7314 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationPreferencesTest.java @@ -0,0 +1,79 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.NotificationPreferencesClient; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.notification.EmailNotificationType; +import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationPreferences; +import feign.FeignException; +import org.junit.Before; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class NotificationPreferencesTest extends AbstractPersistenceServerServiceTest { + + private static final String USER_ID = "1234"; + private static final String DOSSIER_YOU_OWN_NOTIFICATION_1 = "Dossier status changes"; + private static final String DOSSIER_YOU_OWN_NOTIFICATION_2 = "Requests to join dossier"; + private static final String DOSSIER_YOU_OWN_NOTIFICATION_3 = "Document status changes"; + private static final String DOSSIER_YOU_OWN_NOTIFICATION_4 = "Document is sent for approval"; + + @Autowired + private NotificationPreferencesClient notificationPreferencesClient; + + private NotificationPreferences notificationPreferences; + List inAppNotifications = new ArrayList<>(); + List emailNotifications = new ArrayList<>(); + + @Before + public void setupData() { + inAppNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_1); + inAppNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_2); + inAppNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_3); + emailNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_1); + emailNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_2); + emailNotifications.add(DOSSIER_YOU_OWN_NOTIFICATION_4); + notificationPreferences = new NotificationPreferences(USER_ID, true, true, EmailNotificationType.DAILY, emailNotifications, inAppNotifications); + } + + @Test + public void testNotificationPreferences() { + // add notification + notificationPreferencesClient.setNotificationPreferences(USER_ID, notificationPreferences); + + NotificationPreferences notificationReceived = notificationPreferencesClient.getNotificationPreferences(USER_ID); + + assertThat(notificationReceived.getEmailNotificationType()).isEqualTo(EmailNotificationType.DAILY); + assertThat(notificationReceived.isEmailNotificationsEnabled()).isTrue(); + assertThat(notificationReceived.isInAppNotificationsEnabled()).isTrue(); + assertThat(notificationReceived.getInAppNotifications().size()).isEqualTo(notificationPreferences.getInAppNotifications().size()); + assertThat(notificationReceived.getEmailNotifications().size()).isEqualTo(notificationPreferences.getEmailNotifications().size()); + + // update notification + notificationPreferences.getInAppNotifications().add(DOSSIER_YOU_OWN_NOTIFICATION_4); + notificationPreferences.setEmailNotificationsEnabled(false); + + notificationPreferencesClient.setNotificationPreferences(USER_ID, notificationPreferences); + + notificationReceived = notificationPreferencesClient.getNotificationPreferences(USER_ID); + + assertThat(notificationReceived.getEmailNotificationType()).isEqualTo(EmailNotificationType.DAILY); + assertThat(notificationReceived.isEmailNotificationsEnabled()).isFalse(); + assertThat(notificationReceived.isInAppNotificationsEnabled()).isTrue(); + assertThat(notificationReceived.getInAppNotifications().size()).isEqualTo(notificationPreferences.getInAppNotifications().size()); + assertThat(notificationReceived.getEmailNotifications().size()).isEqualTo(notificationPreferences.getEmailNotifications().size()); + + + // delete notification + notificationPreferencesClient.deleteNotificationPreferences(USER_ID); + try { + notificationReceived = notificationPreferencesClient.getNotificationPreferences(USER_ID); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(404); + } + } +} 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 00a2d5597..8d148e7fa 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 @@ -105,6 +105,8 @@ public abstract class AbstractPersistenceServerServiceTest { private DossierAttributeRepository dossierAttributeRepository; @Autowired private DossierAttributeConfigRepository dossierAttributeConfigRepository; + @Autowired + private NotificationPreferencesRepository notificationPreferencesRepository; @Before public void setupOptimize() { @@ -160,6 +162,7 @@ public abstract class AbstractPersistenceServerServiceTest { fileRepository.deleteAll(); dossierRepository.deleteAll(); dossierTemplateRepository.deleteAll(); + notificationPreferencesRepository.deleteAll(); } static class Initializer implements ApplicationContextInitializer { From 87157cc19f21ad96a92c6c8bb36f4c863d0938cf Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 20 Oct 2021 10:36:06 +0300 Subject: [PATCH 71/79] sample migration for digitalSignature update --- .../service/DigitalSignatureService.java | 15 ++++++++------- .../repository/DigitalSignatureRepository.java | 11 +++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java index 0263da393..5c4f17ef5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java @@ -56,14 +56,15 @@ public class DigitalSignatureService { @Transactional public void updateDigitalSignature(DigitalSignatureEntity digitalSignatureModel) { - digitalSignatureRepository.findById(DigitalSignatureEntity.ID).ifPresentOrElse(digitalSignature -> { - digitalSignature.setCertificateName(digitalSignatureModel.getCertificateName()); - digitalSignature.setLocation(digitalSignatureModel.getLocation()); - digitalSignature.setContactInfo(digitalSignatureModel.getContactInfo()); - digitalSignature.setReason(digitalSignatureModel.getReason()); - }, () -> { + int updateCount = digitalSignatureRepository.updateDigitalSignature(DigitalSignatureEntity.ID, + digitalSignatureModel.getReason(), + digitalSignatureModel.getLocation(), + digitalSignatureModel.getContactInfo(), + digitalSignatureModel.getCertificateName()); + if (updateCount == 0) { throw new NotFoundException("Digital Signature Not found"); - }); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java index 58fab317e..3243618ee 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java @@ -2,6 +2,17 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import javax.persistence.Column; public interface DigitalSignatureRepository extends JpaRepository { + + + @Modifying + @Query("update DigitalSignatureEntity e set e.reason = :reason, e.location = :location, e.contactInfo = :contactInfo, e.certificateName= :certificateName " + + "where e.id = :id") + int updateDigitalSignature(String id, String reason, String location, String contactInfo, String certificateName); + } From 2c06826c52665f28b2b6b7b932fc90b819e3064d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Wed, 20 Oct 2021 12:52:10 +0200 Subject: [PATCH 72/79] RED-2187: Splitted processing status from workflow status --- .../dossiertemplate/dossier/DossierStats.java | 8 ++- .../dossier/file/FileModel.java | 4 +- .../dossier/file/FileStatus.java | 5 -- .../dossier/file/ProcessingStatus.java | 5 ++ .../dossier/file/WorkflowStatus.java | 5 ++ .../v1/api/model/license/ReportData.java | 5 +- .../processor/entity/dossier/FileEntity.java | 8 ++- .../FileStatusPersistenceService.java | 60 +++++++------------ .../controller/FileAttributesController.java | 4 +- .../controller/FileStatusController.java | 17 +++--- .../controller/ReanalysisController.java | 11 ++-- .../server/service/DossierStatsService.java | 9 ++- .../service/ExcludeFromAnalysisService.java | 14 ++--- .../v1/server/service/FileService.java | 4 +- .../FileStatusProcessingUpdateService.java | 4 +- .../v1/server/service/FileStatusService.java | 37 ++++++------ .../v1/server/service/IndexingService.java | 4 +- .../server/service/LicenseReportService.java | 3 +- .../ReanalysisRequiredStatusService.java | 41 ++++++++----- .../scheduler/AutomaticAnalysisScheduler.java | 35 ++++++----- .../integration/tests/DossierStatsTest.java | 13 ++-- .../integration/tests/FileProcessingTest.java | 17 +++--- .../v1/server/integration/tests/FileTest.java | 15 ++--- .../integration/tests/ReanalysisTest.java | 48 ++++++--------- 24 files changed, 190 insertions(+), 186 deletions(-) delete mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileStatus.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/ProcessingStatus.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/WorkflowStatus.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java index 31e7ed4b8..90ca2c83b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStats.java @@ -1,7 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,6 +7,9 @@ import lombok.NoArgsConstructor; import java.util.Map; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + @Data @Builder @NoArgsConstructor @@ -22,5 +23,6 @@ public class DossierStats { private boolean hasSuggestionsFilePresent; // true if at least one file in the dossier has suggestions private boolean hasUpdatesFilePresent; //true if at least one file in the dossier has updates private boolean hasNoFlagsFilePresent; // true if at least one file in the dossier has none of the other flags - private Map fileCountPerStatus; + private Map fileCountPerProcessingStatus; + private Map fileCountPerWorkflowStatus; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java index db8e730a9..83bc8aa8b 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java @@ -21,8 +21,8 @@ public class FileModel { @JsonProperty("fileId") private String id; private String filename; - private FileStatus status; - private FileStatus lastSuccessfulStatus; + private ProcessingStatus processingStatus; + private WorkflowStatus workflowStatus; private int numberOfPages; private OffsetDateTime added; private OffsetDateTime lastUpdated; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileStatus.java deleted file mode 100644 index 2f91739a8..000000000 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; - -public enum FileStatus { - UNPROCESSED, REPROCESS, PROCESSING, ERROR, DELETED, UNASSIGNED, UNDER_REVIEW, UNDER_APPROVAL, APPROVED, FULLREPROCESS, OCR_PROCESSING, INDEXING -} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/ProcessingStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/ProcessingStatus.java new file mode 100644 index 000000000..f70270a68 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/ProcessingStatus.java @@ -0,0 +1,5 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; + +public enum ProcessingStatus { + UNPROCESSED, REPROCESS, PROCESSING, PROCESSED, ERROR, DELETED, FULLREPROCESS, OCR_PROCESSING, INDEXING +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/WorkflowStatus.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/WorkflowStatus.java new file mode 100644 index 000000000..9fa433590 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/WorkflowStatus.java @@ -0,0 +1,5 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; + +public enum WorkflowStatus { + UNASSIGNED, UNDER_REVIEW, UNDER_APPROVAL, APPROVED +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java index 1aefd3a95..db697af60 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/license/ReportData.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.model.license; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -8,6 +7,8 @@ import lombok.NoArgsConstructor; import java.time.Instant; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + @Data @Builder @AllArgsConstructor @@ -21,7 +22,7 @@ public class ReportData { private Instant deletedDate; private int numberOfAnalyzedPages; private int numberOfOcrPages; - private FileStatus status; + private WorkflowStatus workflowStatus; private int analysisCount; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java index faaa67166..4507935c9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java @@ -1,7 +1,9 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -30,11 +32,11 @@ public class FileEntity { @Column @Enumerated(EnumType.STRING) - private FileStatus status; + private ProcessingStatus processingStatus; @Column @Enumerated(EnumType.STRING) - private FileStatus lastSuccessfulStatus; + private WorkflowStatus workflowStatus; @Column private int numberOfPages; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index c58e05441..53f1c1a35 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -19,7 +19,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import lombok.RequiredArgsConstructor; @@ -40,7 +41,8 @@ public class FileStatusPersistenceService { file.setId(fileId); file.setDossier(dossierRepository.getOne(dossierId)); file.setFilename(filename); - file.setStatus(FileStatus.UNPROCESSED); + file.setProcessingStatus(ProcessingStatus.UNPROCESSED); + file.setWorkflowStatus(WorkflowStatus.UNASSIGNED); file.setNumberOfPages(0); file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setUploader(uploader); @@ -51,14 +53,13 @@ public class FileStatusPersistenceService { @Transactional - public void updateStatusSuccessful(String fileId, int numberOfPages, FileStatus status, long dictionaryVersion, long rulesVersion, - long legalBasisVersion, long duration, long dossierDictionaryVersion, - int analysisVersion) { + public void updateWorkflowStatus(String fileId, int numberOfPages, long dictionaryVersion, long rulesVersion, + long legalBasisVersion, long duration, long dossierDictionaryVersion, + int analysisVersion) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setNumberOfPages(numberOfPages); - file.setStatus(status); - file.setLastSuccessfulStatus(status); + file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setDictionaryVersion(dictionaryVersion); file.setRulesVersion(rulesVersion); file.setLegalBasisVersion(legalBasisVersion); @@ -91,11 +92,10 @@ public class FileStatusPersistenceService { @Transactional - public void updateStatusSuccessful(String fileId, FileStatus status, boolean approval) { + public void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, boolean approval) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(status); - file.setLastSuccessfulStatus(status); + file.setWorkflowStatus(workflowStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); }, () -> { @@ -107,27 +107,9 @@ public class FileStatusPersistenceService { @Transactional - public void updateStatus(String fileId, FileStatus status, String uploader) { - - if (status.equals(FileStatus.UNASSIGNED) || status.equals(FileStatus.UNPROCESSED)) { - throw new IllegalArgumentException("please use specific methods for these calls!"); - } - + public void updateProcessingStatus(String fileId, ProcessingStatus processingStatus) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(status); - file.setUploader(uploader); - file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - }, () -> { - throw new NotFoundException("Unknown file=" + fileId); - }); - - } - - @Transactional - public void updateStatus(String fileId, FileStatus status) { - fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(status); + file.setProcessingStatus(processingStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -135,10 +117,10 @@ public class FileStatusPersistenceService { } @Transactional - public void setUpdateStatusIndexingSuccessful(String fileId, FileStatus status) { + public void setUpdateStatusIndexingSuccessful(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(status); + file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -238,7 +220,7 @@ public class FileStatusPersistenceService { public void softDelete(String fileId, OffsetDateTime softDeletedTime) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(FileStatus.DELETED); + file.setProcessingStatus(ProcessingStatus.DELETED); file.setDeleted(softDeletedTime); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -251,7 +233,7 @@ public class FileStatusPersistenceService { public void hardDelete(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setStatus(FileStatus.DELETED); + file.setProcessingStatus(ProcessingStatus.DELETED); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -263,13 +245,13 @@ public class FileStatusPersistenceService { } @Transactional - public void undelete(String fileId, FileStatus statusBefore) { + public void undelete(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { if (file.getHardDeletedTime() != null) { throw new BadRequestException("Cannot undelete a hard-deleted dossier file!"); } - file.setStatus(statusBefore != null ? statusBefore : FileStatus.UNASSIGNED); + file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setDeleted(null); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -282,7 +264,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setCurrentReviewer(currentReviewer); file.setLastReviewer(lastReviewer); - file.setStatus(currentReviewer == null ? FileStatus.UNASSIGNED :FileStatus.UNDER_REVIEW); + file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); @@ -319,8 +301,8 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setFilename(filename); file.setUploader(uploader); - file.setStatus(FileStatus.FULLREPROCESS); - file.setLastSuccessfulStatus(null); + file.setProcessingStatus(ProcessingStatus.FULLREPROCESS); + file.setWorkflowStatus(WorkflowStatus.UNASSIGNED); file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastOCRTime(null); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java index f43a53dfb..716acbc05 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java @@ -12,7 +12,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvResponse; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesResource; import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings; import com.opencsv.CSVParser; @@ -58,7 +58,7 @@ public class FileAttributesController implements FileAttributesResource { Map fileStatusByFilename = fileStatusService.getDossierStatus(dossierId) .stream() - .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) + .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED)) .collect(Collectors.toMap(FileEntity::getFilename, Function.identity())); List> rows = getCsvRecords(importCsvRequest.getCsvFile(), generalConfiguration.getDelimiter()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index d02d7184b..9707c9637 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -4,7 +4,8 @@ import com.iqser.red.service.peristence.v1.server.service.*; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PathVariable; @@ -32,7 +33,7 @@ public class FileStatusController implements StatusResource { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() .stream() - .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) + .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED)) .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @@ -42,7 +43,7 @@ public class FileStatusController implements StatusResource { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) .stream() - .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) + .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED)) .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @@ -51,7 +52,7 @@ public class FileStatusController implements StatusResource { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getDossierStatus(dossierId) .stream() - .filter(f -> f.getStatus().equals(FileStatus.DELETED) && f.getHardDeletedTime() == null) + .filter(f -> f.getProcessingStatus().equals(ProcessingStatus.DELETED) && f.getHardDeletedTime() == null) .collect(Collectors.toList()), FileModel.class, new FileModelMapper())); } @@ -71,7 +72,7 @@ public class FileStatusController implements StatusResource { @RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) { fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId); - fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); + fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -83,7 +84,7 @@ public class FileStatusController implements StatusResource { FileEntity fileStatus = fileStatusService.getStatus(fileId); String lastReviewer = fileStatus.getLastReviewer(); fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer); - fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED); + fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -93,7 +94,7 @@ public class FileStatusController implements StatusResource { @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { fileStatusService.setCurrentReviewer(dossierId, fileId, approverId); - fileStatusService.setStatusSuccessful(fileId, approverId != null ? FileStatus.UNDER_APPROVAL : FileStatus.UNASSIGNED); + fileStatusService.setStatusSuccessful(fileId, approverId != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.UNASSIGNED); analysisFlagsCalculationService.calculateFlags(dossierId, fileId); } @@ -101,7 +102,7 @@ public class FileStatusController implements StatusResource { public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { - fileStatusService.setApprovalStatusSuccessful(fileId, FileStatus.APPROVED); + fileStatusService.setApprovalStatusSuccessful(fileId, WorkflowStatus.APPROVED); } public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index c5ca7d777..938efb663 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -10,7 +10,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -103,7 +104,7 @@ public class ReanalysisController implements ReanalysisResource { fileStatusService.setStatusOcrProcessing(dossierId, fileId); } else { FileEntity dossierFile = fileStatusService.getStatus(fileId); - if (dossierFile.getStatus().equals(FileStatus.DELETED) || dossierFile.getStatus().equals(FileStatus.APPROVED)) { + if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) { throw new ConflictException("Cannot analyse a deleted/approved file"); } if (dossierFile.getLastOCRTime() != null) { @@ -119,8 +120,8 @@ public class ReanalysisController implements ReanalysisResource { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); return fileStatusService.getDossierStatus(dossier.getId()) .stream() - .filter(fileStatus -> !fileStatus.getStatus().equals(FileStatus.DELETED)) - .filter(fileStatus -> !fileStatus.getStatus().equals(FileStatus.APPROVED)) + .filter(fileStatus -> !fileStatus.getProcessingStatus().equals(ProcessingStatus.DELETED)) + .filter(fileStatus -> !fileStatus.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) .collect(Collectors.toList()); } @@ -139,7 +140,7 @@ public class ReanalysisController implements ReanalysisResource { var dossierFile = dossierFileOptional.get(); - if (dossierFile.getStatus().equals(FileStatus.DELETED) || dossierFile.getStatus().equals(FileStatus.APPROVED)) { + if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) { throw new ConflictException("Cannot analyse a deleted/approved file"); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java index 986d94b83..28b9e33cb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java @@ -5,7 +5,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -55,8 +55,11 @@ public class DossierStatsService { .findAny().ifPresent( (v) -> dossierStats.setHasNoFlagsFilePresent(true) ); - Map fileCountPerStatus = files.stream().collect(Collectors.toMap(FileEntity::getStatus, e -> 1, Math::addExact)); - dossierStats.setFileCountPerStatus(fileCountPerStatus); + var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileEntity::getProcessingStatus, e -> 1, Math::addExact)); + dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus); + + var fileCountPerWorkflowStatus = files.stream().collect(Collectors.toMap(FileEntity::getWorkflowStatus, e -> 1, Math::addExact)); + dossierStats.setFileCountPerWorkflowStatus(fileCountPerWorkflowStatus); return dossierStats; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java index 8d014d6a5..f471dfea4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ExcludeFromAnalysisService.java @@ -1,18 +1,16 @@ package com.iqser.red.service.peristence.v1.server.service; -import com.google.common.collect.Sets; -import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; -import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.Set; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + +import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class ExcludeFromAnalysisService { - private final static Set VALID_STATES_FOR_EXCLUSION = Sets.newHashSet(FileStatus.UNASSIGNED, FileStatus.UNDER_REVIEW, FileStatus.UNDER_APPROVAL); private final FileStatusService fileStatusService; @@ -21,8 +19,8 @@ public class ExcludeFromAnalysisService { var status = fileStatusService.getStatus(fileId); - if (!VALID_STATES_FOR_EXCLUSION.contains(status.getStatus())) { - throw new BadRequestException("Files in status " + status.getStatus() + " cannot be excluded/included"); + if (WorkflowStatus.APPROVED.equals(status.getWorkflowStatus())) { + throw new BadRequestException("File in workflow status " + status.getWorkflowStatus() + " cannot be excluded/included"); } // toggle status 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 65f7948c2..4b020fc02 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 @@ -13,6 +13,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.annotations.Annota import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -53,7 +55,7 @@ public class FileService { var existingStatus = retrieveStatus(fileId); if (existingStatus != null) { - if (existingStatus.getStatus().name().equals(AnnotationStatus.APPROVED.name())) { + if (existingStatus.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) { throw new ConflictException("File already exists in status APPROVED"); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusProcessingUpdateService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusProcessingUpdateService.java index 09733d155..178aad519 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusProcessingUpdateService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusProcessingUpdateService.java @@ -1,7 +1,6 @@ package com.iqser.red.service.peristence.v1.server.service; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,12 +24,11 @@ public class FileStatusProcessingUpdateService { public void analysisSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - var lastSuccessfulStatus = fileStatusService.getStatus(fileId).getLastSuccessfulStatus(); retryTemplate.execute(retryContext -> { log.info("Analysis Successful for dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext .getRetryCount()); - fileStatusService.setStatusSuccessful(dossierId, fileId, Objects.requireNonNullElse(lastSuccessfulStatus, FileStatus.UNASSIGNED), analyzeResult); + fileStatusService.setStatusSuccessful(dossierId, fileId, analyzeResult); return null; }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index f1f89efbb..1ab9945fa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -10,8 +10,9 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import lombok.RequiredArgsConstructor; @@ -68,25 +69,25 @@ public class FileStatusService { public void setStatusProcessing(String fileId) { - fileStatusPersistenceService.updateStatus(fileId, FileStatus.PROCESSING); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.PROCESSING); } - public void setStatusSuccessful(String dossierId, String fileId, FileStatus status, AnalyzeResult analyzeResult) { + public void setStatusSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) { - fileStatusPersistenceService.updateStatusSuccessful(fileId, analyzeResult.getNumberOfPages(), status, analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); + fileStatusPersistenceService.updateWorkflowStatus(fileId, analyzeResult.getNumberOfPages(), analyzeResult.getDictionaryVersion(), analyzeResult.getRulesVersion(), analyzeResult.getLegalBasisVersion(), analyzeResult.getDuration(), analyzeResult.getDossierDictionaryVersion(), analyzeResult.getAnalysisVersion()); } - public void setStatusSuccessful(String fileId, FileStatus status) { + public void setStatusSuccessful(String fileId, WorkflowStatus workflowStatus) { - fileStatusPersistenceService.updateStatusSuccessful(fileId, status, false); + fileStatusPersistenceService.updateWorkflowStatus(fileId, workflowStatus, false); } - public void setApprovalStatusSuccessful(String fileId, FileStatus status) { + public void setApprovalStatusSuccessful(String fileId, WorkflowStatus workflowStatus) { - fileStatusPersistenceService.updateStatusSuccessful(fileId, status, true); + fileStatusPersistenceService.updateWorkflowStatus(fileId, workflowStatus, true); } @@ -117,7 +118,7 @@ public class FileStatusService { return; } - fileStatusPersistenceService.updateStatus(fileId, FileStatus.REPROCESS); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.REPROCESS); addToAnalysisQueue(dossierId, fileId, priority, sectionsToReanalyse); } @@ -131,7 +132,7 @@ public class FileStatusService { return; } - fileStatusPersistenceService.updateStatus(fileId, FileStatus.OCR_PROCESSING); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.OCR_PROCESSING); addToOcrQueue(dossierId, fileId, 2); } @@ -146,27 +147,26 @@ public class FileStatusService { return; } - fileStatusPersistenceService.updateStatus(fileId, FileStatus.FULLREPROCESS); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.FULLREPROCESS); addToAnalysisQueue(dossierId, fileId, priority, Sets.newHashSet()); } public void setStatusIndexingSuccessful(String fileId) { - FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); - fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId, fileStatus.getLastSuccessfulStatus()); + fileStatusPersistenceService.setUpdateStatusIndexingSuccessful(fileId); } public void setStatusIndexing(String fileId) { - fileStatusPersistenceService.updateStatus(fileId, FileStatus.INDEXING); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.INDEXING); } public void setStatusError(String fileId) { - fileStatusPersistenceService.updateStatus(fileId, FileStatus.ERROR); + fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.ERROR); } @@ -184,8 +184,7 @@ public class FileStatusService { public void setFileStatusUndeleted(String fileId) { - var status = fileStatusPersistenceService.getStatus(fileId); - fileStatusPersistenceService.undelete(fileId, status.getLastSuccessfulStatus()); + fileStatusPersistenceService.undelete(fileId); } @@ -232,8 +231,8 @@ public class FileStatusService { .fileAttributes(convert(fileAttributes)) .build(); - analyseRequest.setReanalyseOnlyIfPossible(!fileStatus.getStatus().equals(FileStatus.UNPROCESSED) && !fileStatus.getStatus() - .equals(FileStatus.FULLREPROCESS) && fileStatus.getRulesVersion() == rulesController.getVersion(dossier.getDossierTemplateId()) && (fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed() + analyseRequest.setReanalyseOnlyIfPossible(!fileStatus.getProcessingStatus().equals(ProcessingStatus.UNPROCESSED) && !fileStatus.getProcessingStatus() + .equals(ProcessingStatus.FULLREPROCESS) && fileStatus.getRulesVersion() == rulesController.getVersion(dossier.getDossierTemplateId()) && (fileStatus.getLastFileAttributeChange() == null || fileStatus.getLastProcessed() .isAfter(fileStatus.getLastFileAttributeChange()))); analyseRequest.setExcludedPages(fileStatus.getExcludedPages()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/IndexingService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/IndexingService.java index 3afeea0cc..9979de3af 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/IndexingService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/IndexingService.java @@ -6,7 +6,7 @@ import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfigu import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.search.v1.model.IndexMessage; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -48,7 +48,7 @@ public class IndexingService { for (Pair reindexDossierId : reindexDossierIds) { List fileStatuses = fileStatusService.getDossierStatus(reindexDossierId.getRight()); for (FileEntity fileStatus : fileStatuses) { - if (fileStatus.getStatus().equals(FileStatus.DELETED)) { + if (fileStatus.getProcessingStatus().equals(ProcessingStatus.DELETED)) { continue; } if (fileIds != null && !fileIds.isEmpty() && !fileIds.contains(fileStatus.getId())) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/LicenseReportService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/LicenseReportService.java index 1631ef55f..abd567702 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/LicenseReportService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/LicenseReportService.java @@ -86,13 +86,12 @@ public class LicenseReportService { reportData.setAddedDate(fileStatus.getAdded().toInstant()); reportData.setLastUpdatedDate(fileStatus.getLastUpdated() == null ? null : fileStatus.getLastUpdated().toInstant()); reportData.setDeletedDate(fileStatus.getDeleted() == null ? null : fileStatus.getDeleted().toInstant()); - reportData.setStatus(fileStatus.getStatus()); + reportData.setWorkflowStatus(fileStatus.getWorkflowStatus()); reportData.setNumberOfAnalyzedPages(fileStatus.getNumberOfPages()); reportData.setNumberOfOcrPages(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0); reportData.setAnalysisCount(fileStatus.getNumberOfAnalyses()); totalPagesAnalyzed.addAndGet(fileStatus.getNumberOfPages()); totalPagesOcr.addAndGet(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0); - reportData.setStatus(fileStatus.getStatus()); totalNumberOfAnalyses.addAndGet(fileStatus.getNumberOfAnalyses()); return reportData; })) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java index 16f0b349f..a622e2a35 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java @@ -6,6 +6,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -46,24 +48,31 @@ public class ReanalysisRequiredStatusService { Map> dossierTemplateVersionMap, Map dossierVersionMap, Map dossierMap) { - switch (fileStatus.getStatus()) { - case ERROR: - return true; - case UNASSIGNED: - case UNDER_REVIEW: - case UNDER_APPROVAL: - if (fileStatus.getLastProcessed() == null) { - return true; - } - if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) { - return true; - } else { - return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap); - } - default: - return false; + + if(ProcessingStatus.ERROR.equals(fileStatus.getProcessingStatus())){ + return true; } + if(ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) || ProcessingStatus.UNPROCESSED.equals(fileStatus.getProcessingStatus())) { + + switch (fileStatus.getWorkflowStatus()) { + case UNASSIGNED: + case UNDER_REVIEW: + case UNDER_APPROVAL: + if (fileStatus.getLastProcessed() == null) { + return true; + } + if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) { + return true; + } else { + return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap); + } + default: + return false; + } + } + return false; + } private boolean requiresReanalysisBasedOnVersionDifference(FileModel fileStatus, diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index 826ef8a82..eb3bcb2a4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -6,15 +6,19 @@ import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStat import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.amqp.core.AmqpAdmin; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; + import java.util.List; import java.util.stream.Collectors; @@ -25,15 +29,16 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma @RequiredArgsConstructor public class AutomaticAnalysisScheduler { - @Value("${persistence-service.automaticAnalysis.pageFactor:500}") private int pageFactor; private final FileStatusService fileStatusService; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final AmqpAdmin amqpAdmin; + @PostConstruct protected void postConstruct() { + log.info("Automatic Analysis pageFactor: {}", pageFactor); } @@ -43,10 +48,8 @@ public class AutomaticAnalysisScheduler { var redactionQueueInfo = amqpAdmin.getQueueInfo(MessagingConfiguration.REDACTION_QUEUE); if (redactionQueueInfo != null) { - log.info("Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", - MessagingConfiguration.REDACTION_QUEUE, - redactionQueueInfo.getMessageCount(), - redactionQueueInfo.getConsumerCount()); + log.info("Checking queue status to see if background analysis can happen. Currently {} holds {} elements and has {} consumers", MessagingConfiguration.REDACTION_QUEUE, redactionQueueInfo + .getMessageCount(), redactionQueueInfo.getConsumerCount()); // only 1 file in queue var consumerCount = redactionQueueInfo.getConsumerCount(); if (redactionQueueInfo.getMessageCount() <= consumerCount) { @@ -76,17 +79,21 @@ public class AutomaticAnalysisScheduler { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(fileStatusService.getAllStatuses() .stream() - .filter(f -> !f.getStatus().equals(FileStatus.DELETED)) - .filter(f -> !f.getStatus().equals(FileStatus.APPROVED)) + .filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED)) + .filter(f -> !f.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) .filter(f -> !isProcessing(f)) - .collect(Collectors.toList()), FileModel.class, new FileModelMapper())).stream().filter(FileModel::isAnalysisRequired).collect(Collectors.toList()); + .collect(Collectors.toList()), FileModel.class, new FileModelMapper())) + .stream() + .filter(FileModel::isAnalysisRequired) + .collect(Collectors.toList()); } + private boolean isProcessing(FileEntity file) { - return file.getStatus() == FileStatus.PROCESSING || - file.getStatus() == FileStatus.REPROCESS || - file.getStatus() == FileStatus.FULLREPROCESS || - file.getStatus() == FileStatus.INDEXING || - file.getStatus() == FileStatus.OCR_PROCESSING; + + return !file.getProcessingStatus().equals(ProcessingStatus.PROCESSED) && !file.getProcessingStatus() + .equals(ProcessingStatus.UNPROCESSED) && !file.getProcessingStatus() + .equals(ProcessingStatus.DELETED) && !file.getProcessingStatus().equals(ProcessingStatus.ERROR); } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java index 22320776c..af597611a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -8,7 +8,10 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + +import org.hibernate.jdbc.Work; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -78,7 +81,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { //alter file 4 fileRepository.findById(file4.getId()).ifPresent((file)->{ file.setHasHints(true); - file.setStatus(FileStatus.APPROVED); + file.setWorkflowStatus(WorkflowStatus.APPROVED); fileRepository.save(file); }); } @@ -94,7 +97,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats.isHasSuggestionsFilePresent()).isTrue(); assertThat(dossierStats.isHasUpdatesFilePresent()).isTrue(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isFalse(); - assertThat(dossierStats.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(2); + assertThat(dossierStats.getFileCountPerProcessingStatus().get(ProcessingStatus.PROCESSING)).isEqualTo(2); } @Test @@ -114,7 +117,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse(); assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse(); assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue(); - assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.PROCESSING)).isEqualTo(1); - assertThat(dossierStats2.getFileCountPerStatus().get(FileStatus.APPROVED)).isEqualTo(1); + assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1); + assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java index 91124422d..60b77b8a5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java @@ -5,7 +5,8 @@ import com.iqser.red.service.peristence.v1.server.integration.client.FileProcess 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.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -36,7 +37,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { fileProcessingClient.analysisFailed(dossier.getId(), file.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() @@ -44,35 +45,35 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { .fileId(file.getId()) .dossierId(dossier.getId()).build()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); assertThat(loadedFile.getLastOCRTime()).isNotNull(); fileProcessingClient.indexing(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.INDEXING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.INDEXING); assertThat(loadedFile.getLastIndexed()).isNull(); fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getLastIndexed()).isNotNull(); } 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 07767d080..07fa7723b 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 @@ -13,7 +13,8 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -57,7 +58,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(),"1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1)); @@ -73,27 +74,27 @@ public class FileTest extends AbstractPersistenceServerServiceTest { fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_APPROVAL); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL); fileClient.setStatusUnderReview(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_APPROVAL); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL); fileClient.setStatusApproved(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.APPROVED); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED); assertThat(uploadClient.getOriginal(dossier.getId(), file.getId())).isNotNull(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java index 8d40cd6b6..615b95c59 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java @@ -7,7 +7,9 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + import org.assertj.core.util.Sets; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -42,61 +44,49 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest { reanalysisClient.ocrDossier(dossier.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING); + resetProcessingStatus(file); - - resetStatus(file); - loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); - - - resetStatus(file); reanalysisClient.ocrFile(dossier.getId(), file.getId(), true); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING); + resetProcessingStatus(file); - resetStatus(file); reanalysisClient.ocrFiles(dossier.getId(), Set.of(file.getId())); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING); + resetProcessingStatus(file); - - resetStatus(file); reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); + resetProcessingStatus(file); - - resetStatus(file); reanalysisClient.reanalyzeFile(dossier.getId(), file.getId(), Sets.newHashSet()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); + resetProcessingStatus(file); - - resetStatus(file); reanalysisClient.reanalyzeDossier(dossier.getId(), true); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); - - - resetStatus(file); - reanalysisClient.reindex(dossier.getId(), Set.of(file.getId())); - fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); + resetProcessingStatus(file); } - private void resetStatus(FileModel file) { + private void resetProcessingStatus(FileModel file) { fileRepository.findById(file.getId()).ifPresent(savedFile -> { - savedFile.setStatus(FileStatus.UNASSIGNED); + savedFile.setProcessingStatus(ProcessingStatus.UNPROCESSED); fileRepository.save(savedFile); }); var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId()); - assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.UNPROCESSED); } + } From 3dc0218a28f33b3f7341b318066394b12d5aa930 Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Wed, 20 Oct 2021 15:14:56 +0200 Subject: [PATCH 73/79] RED-2429: As a user I want to resize a redaction --- .../model/annotations/ManualRedactions.java | 3 + .../annotations/ManualResizeRedaction.java | 28 +++++++ .../annotations/ResizeRedactionRequest.java | 25 ++++++ .../resources/ManualRedactionResource.java | 21 +++++ .../ManualResizeRedactionEntity.java | 54 +++++++++++++ .../ResizeRedactionPersistenceService.java | 81 +++++++++++++++++++ .../repository/ResizeRedactionRepository.java | 13 +++ .../controller/ManualRedactionController.java | 35 ++++++++ .../v1/server/service/FileService.java | 26 ++++++ .../v1/server/service/FileStatusService.java | 7 +- .../ManualRedactionProviderService.java | 5 +- .../service/ManualRedactionService.java | 62 ++++++++++++++ .../utils/ManualResizeRedactionMapper.java | 19 +++++ .../tests/ManualRedactionTest.java | 27 ++++++- 14 files changed, 403 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/ManualResizeRedaction.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.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/ResizeRedactionRepository.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualResizeRedactionMapper.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java index 9fce6c05a..3a86a9c94 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualRedactions.java @@ -28,6 +28,9 @@ public class ManualRedactions { @Builder.Default private Set legalBasisChanges = new HashSet<>(); + @Builder.Default + private Set resizeRedactions = new HashSet<>(); + @Builder.Default private Map> comments = new HashMap<>(); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java new file mode 100644 index 000000000..60fbefeea --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java @@ -0,0 +1,28 @@ +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 ManualResizeRedaction { + + private String annotationId; + private String fileId; + private String user; + private AnnotationStatus status; + private OffsetDateTime requestDate; + private OffsetDateTime processedDate; + private OffsetDateTime softDeletedTime; + @Builder.Default + private List positions = new ArrayList<>(); + +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java new file mode 100644 index 000000000..ee393d3c7 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.persistence.service.v1.api.model.annotations; + +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 ResizeRedactionRequest { + + private String annotationId; + private String user; + private AnnotationStatus status; + private String comment; + private int page; + + @Builder.Default + private List positions = new ArrayList<>(); +} 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 65b20c199..53be0eeb2 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 @@ -58,6 +58,12 @@ public interface ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId, @RequestBody CommentRequest comment); + @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, + @PathVariable(FILE_ID) String fileId, + @RequestBody ResizeRedactionRequest resizeRedactionRequest); + + @GetMapping(value = MANUAL_REDACTION_REST_PATH + "/add" + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) ManualRedactionEntry getAddRedaction(@PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId); @@ -87,6 +93,11 @@ public interface ManualRedactionResource { Comment getComment(@PathVariable(COMMENT_ID) long commentId); + @GetMapping(value = MANUAL_REDACTION_REST_PATH + "/resize" + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + ManualResizeRedaction getResizeRedaction(@PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId); + + @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) void deleteAddRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId); @@ -116,6 +127,11 @@ public interface ManualRedactionResource { void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId); + @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/resize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) + void deleteResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId); + + @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) void updateAddRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId, @@ -146,6 +162,11 @@ public interface ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId, @RequestBody JSONPrimitive 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) + void updateResizeRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId, + @RequestBody JSONPrimitive updateStatusRequest); + @GetMapping(value = MANUAL_REDACTION_REST_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) ManualRedactions getManualRedactions(@PathVariable(DOSSIER_ID) String dossierId, diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java new file mode 100644 index 000000000..dd64dc3be --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.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.AnnotationStatus; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "manual_resize_redaction") +public class ManualResizeRedactionEntity { + + @EmbeddedId + private AnnotationEntityId id; + @Column(name = "user_id") + private String user; + @Column + @Enumerated(EnumType.STRING) + private AnnotationStatus status; + @Column + private OffsetDateTime requestDate; + @Column + private OffsetDateTime processedDate; + @Column + private OffsetDateTime softDeletedTime; + @Column + private int page; + + @ManyToOne + private FileEntity fileStatus; + + @ElementCollection + private List positions = new ArrayList<>(); + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java new file mode 100644 index 000000000..5f00fb561 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java @@ -0,0 +1,81 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualResizeRedactionEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ResizeRedactionRepository; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ResizeRedactionRequest; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ResizeRedactionPersistenceService { + + private final ResizeRedactionRepository resizeRedactionRepository; + + @Transactional + public void insert(String fileId, ResizeRedactionRequest resizeRedactionRequest) { + + ManualResizeRedactionEntity manualResizeRedaction = new ManualResizeRedactionEntity(); + manualResizeRedaction.setId(new AnnotationEntityId(resizeRedactionRequest.getAnnotationId(), fileId)); + BeanUtils.copyProperties(resizeRedactionRequest, manualResizeRedaction); + manualResizeRedaction.setPositions(convert(resizeRedactionRequest.getPositions(), RectangleEntity.class)); + manualResizeRedaction.setRequestDate(OffsetDateTime.now()); + + resizeRedactionRepository.save(manualResizeRedaction); + } + + @Transactional + public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { + mre.setProcessedDate(OffsetDateTime.now()); + mre.setStatus(annotationStatus); + }); + } + + + @Transactional + public void hardDelete(String fileId, String annotationId) { + resizeRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId)); + } + + @Transactional + public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + } + + @Transactional + public void undelete(String fileId, String annotationId) { + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + } + + public ManualResizeRedactionEntity findResizeRedaction(String fileId, String annotationId) { + + return resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)) + .filter(mre -> mre.getSoftDeletedTime() == null) + .orElseThrow(() -> + new NotFoundException("Unknown file/annotation combination: " + fileId + "/" + annotationId)); + } + + + public Set findResizeRedactions(String fileId, boolean includeDeletions) { + + return resizeRedactionRepository.findByIdFileId(fileId).stream().filter(mre -> includeDeletions || mre.getSoftDeletedTime() == null).collect(Collectors.toSet()); + + } +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ResizeRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ResizeRedactionRepository.java new file mode 100644 index 000000000..f26c950a0 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ResizeRedactionRepository.java @@ -0,0 +1,13 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualResizeRedactionEntity; + +public interface ResizeRedactionRepository extends JpaRepository { + + List findByIdFileId(String fileId); +} 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 a9a221ead..4e29df31e 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 @@ -3,6 +3,7 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.iqser.red.service.peristence.v1.server.service.ManualRedactionService; import com.iqser.red.service.peristence.v1.server.utils.ManualImageRecategorizationMapper; 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.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.resources.ManualRedactionResource; @@ -74,6 +75,15 @@ public class ManualRedactionController implements ManualRedactionResource { } + @Override + public ManualAddResponse addResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, + @PathVariable(FILE_ID) String fileId, + @RequestBody ResizeRedactionRequest resizeRedactionRequest) { + + return manualRedactionService.addResizeRedaction(dossierId, fileId, resizeRedactionRequest); + } + + @Override public ManualRedactionEntry getAddRedaction(@PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId) { @@ -119,6 +129,13 @@ public class ManualRedactionController implements ManualRedactionResource { } + public ManualResizeRedaction getResizeRedaction(@PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId) { + + return convert(manualRedactionService.getResizeRedaction(fileId, annotationId), ManualResizeRedaction.class, new ManualResizeRedactionMapper()); + } + + @Override public void deleteAddRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId) { @@ -167,6 +184,14 @@ public class ManualRedactionController implements ManualRedactionResource { } + @Override + public void deleteResizeRedaction(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId) { + + manualRedactionService.deleteResizeRedaction(dossierId, fileId, annotationId); + } + + @Override public void updateAddRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @@ -216,6 +241,16 @@ public class ManualRedactionController implements ManualRedactionResource { } + @Override + public void updateResizeRedactionStatus(@PathVariable(DOSSIER_ID) String dossierId, + @PathVariable(FILE_ID) String fileId, + @PathVariable(ANNOTATION_ID) String annotationId, + @RequestBody JSONPrimitive updateStatusRequest) { + + manualRedactionService.updateResizeRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue()); + } + + @Override public ManualRedactions getManualRedactions(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId) { 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 65f7948c2..45a2cd736 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 @@ -42,6 +42,7 @@ public class FileService { private final DossierPersistenceService dossierPersistenceService; private final ImageRecategorizationPersistenceService recategorizationPersistenceService; private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + private final ResizeRedactionPersistenceService resizeRedactionPersistenceService; private final IndexingService indexingService; @@ -127,6 +128,13 @@ public class FileService { }); }); + resizeRedactionPersistenceService.findResizeRedactions(fileId, false).forEach(annotation -> { + resizeRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime); + commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false).forEach(comment -> { + commentPersistenceService.softDelete(comment.getId(), softDeletedTime); + }); + }); + legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false).forEach(legalBasisChange -> { legalBasisChangePersistenceService.softDelete(fileId, legalBasisChange.getId().getAnnotationId(), softDeletedTime); commentPersistenceService.findCommentsByAnnotationId(fileId, legalBasisChange.getId().getAnnotationId(), false) @@ -172,6 +180,13 @@ public class FileService { }); }); + resizeRedactionPersistenceService.findResizeRedactions(fileId, true).forEach(annotation -> { + resizeRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId()); + commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true).forEach(comment -> { + commentPersistenceService.hardDelete(comment.getId()); + }); + }); + } public void undeleteFile(String dossierTemplateId, String dossierId, String fileId, OffsetDateTime softDeletedTime) { @@ -219,6 +234,17 @@ public class FileService { } }); + resizeRedactionPersistenceService.findResizeRedactions(fileId, true).forEach(annotation -> { + if (annotation.getSoftDeletedTime().equals(softDeletedTime) || annotation.getSoftDeletedTime().isAfter(softDeletedTime)) { + resizeRedactionPersistenceService.undelete(fileId, annotation.getId().getAnnotationId()); + commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true).forEach(comment -> { + if (comment.getSoftDeletedTime().equals(softDeletedTime) || comment.getSoftDeletedTime().isAfter(softDeletedTime)) { + commentPersistenceService.undelete(comment.getId()); + } + }); + } + }); + indexingService.addToIndexingQueue(dossierTemplateId, dossierId, fileId, 2); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index f1f89efbb..d7dcb752d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -46,6 +46,7 @@ public class FileStatusService { private final ForceRedactionPersistenceService forceRedactionPersistenceService; private final RemoveRedactionPersistenceService removeRedactionPersistenceService; private final AddRedactionPersistenceService addRedactionPersistenceService; + private final ResizeRedactionPersistenceService resizeRedactionPersistenceService; public List getDossierStatus(String dossierId) { @@ -312,7 +313,11 @@ public class FileStatusService { // wipe image recat var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false); - imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); + imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));// wipe image recat + + // wipe resize redactions + var resizeRedactions = resizeRedactionPersistenceService.findResizeRedactions(fileId, false); + resizeRedactions.forEach(f -> resizeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now)); // wipe legal basis changes var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java index 643f6f0eb..71aae6410 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionProviderService.java @@ -25,6 +25,7 @@ public class ManualRedactionProviderService { private final CommentPersistenceService commentPersistenceService; private final ImageRecategorizationPersistenceService recategorizationPersistenceService; private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + private final ResizeRedactionPersistenceService resizeRedactionPersistenceService; @Transactional public ManualRedactions getManualRedactions(String fileId) { @@ -40,6 +41,8 @@ public class ManualRedactionProviderService { Set legalBasisChanges = convert(legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false), ManualLegalBasisChange.class); + Set resizeRedactions = convert(resizeRedactionPersistenceService.findResizeRedactions(fileId, false), ManualResizeRedaction.class); + Map> commentEntities = commentPersistenceService.findCommentsByFileID(fileId, false); Map> comments = new HashMap<>(); @@ -48,7 +51,7 @@ public class ManualRedactionProviderService { }); - return new ManualRedactions(removals, entriesToAdd, forceRedactions, recategorizations, legalBasisChanges, comments); + return new ManualRedactions(removals, entriesToAdd, forceRedactions, recategorizations, legalBasisChanges, resizeRedactions, comments); } 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 ddee6d382..884535e0b 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 @@ -40,6 +40,7 @@ public class ManualRedactionService { private final FileManagementStorageService fileManagementStorageService; private final ImageRecategorizationPersistenceService recategorizationPersistenceService; private final LegalBasisChangePersistenceService legalBasisChangePersistenceService; + private final ResizeRedactionPersistenceService resizeRedactionPersistenceService; private final FileStatusService fileStatusService; private final ManualRedactionProviderService manualRedactionProviderService; private final AnalysisFlagsCalculationService analysisFlagsCalculationService; @@ -231,6 +232,35 @@ public class ManualRedactionService { return createdComment; } + public ManualAddResponse addResizeRedaction(String dossierId, String fileId, + ResizeRedactionRequest resizeRedactionRequest) { + + dossierPersistenceService.getAndValidateDossier(dossierId); + + 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(); + } + + if (resizeRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { + fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); + } else { + fileStatusPersistenceService.updateLastManualRedaction(fileId, now); + } + + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + + return ManualAddResponse.builder() + .annotationId(resizeRedactionRequest.getAnnotationId()) + .commentId(commentId) + .build(); + } + public ManualRedactionEntryEntity getAddRedaction(String fileId, String annotationId) { @@ -268,6 +298,12 @@ public class ManualRedactionService { } + public ManualResizeRedactionEntity getResizeRedaction(String fileId, String annotationId) { + + return resizeRedactionPersistenceService.findResizeRedaction(fileId, annotationId); + } + + public void deleteAddRedaction(String dossierId, String fileId, String annotationId) { var addRedaction = getAddRedaction(fileId, annotationId); @@ -370,6 +406,22 @@ public class ManualRedactionService { } + 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); + } + + @SuppressWarnings("PMD") public void updateRemoveRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { @@ -489,6 +541,16 @@ public class ManualRedactionService { } + public void updateResizeRedactionStatus(String dossierId, String fileId, String annotationId, AnnotationStatus annotationStatus) { + + dossierPersistenceService.getAndValidateDossier(dossierId); + resizeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); + boolean hasSuggestions = calculateHasSuggestions(fileId); + fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions); + analysisFlagsCalculationService.calculateFlags(dossierId, fileId); + } + + public ManualRedactions getManualRedactions(String fileId) { return manualRedactionProviderService.getManualRedactions(fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualResizeRedactionMapper.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualResizeRedactionMapper.java new file mode 100644 index 000000000..88f21b0b0 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/ManualResizeRedactionMapper.java @@ -0,0 +1,19 @@ +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.ManualResizeRedactionEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualResizeRedaction; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; + +public class ManualResizeRedactionMapper implements BiConsumer { + + @Override + public void accept(ManualResizeRedactionEntity manualResizeRedactionEntity, ManualResizeRedaction manualRedaction) { + + manualRedaction.setPositions(convert(manualResizeRedactionEntity.getPositions(), Rectangle.class)); + } + +} 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 57a7a187e..bc788fa92 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 @@ -161,7 +161,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var imageRecategorization2 = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), ImageRecategorizationRequest.builder() .annotationId(addRedaction2.getAnnotationId()).comment("comment").status(AnnotationStatus.APPROVED).user("test").typeId("new-type:id").build()); - var loadedImageRecategorization2 = manualRedactionClient.getImageRecategorization(file.getId(), imageRecategorization2.getAnnotationId()); assertThat(loadedImageRecategorization2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); @@ -169,6 +168,21 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { loadedImageRecategorization2 = manualRedactionClient.getImageRecategorization(file.getId(), imageRecategorization2.getAnnotationId()); assertThat(loadedImageRecategorization2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); + var resizeRedaction = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() + .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.REQUESTED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").build()); + var loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); + assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); + assertThat(loadedResizeRedaction.getUser()).isEqualTo("test"); + assertThat(loadedResizeRedaction.getPositions()).isNotEmpty(); + + manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + 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)); + loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); + assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + ManualRedactions manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId()); assertThat(manualRedactions.getForceRedactions()).isNotEmpty(); @@ -214,5 +228,16 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId()); manualRedactions.getLegalBasisChanges().forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), e.getAnnotationId())); + var resizeRedaction2 = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() + .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.APPROVED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").build()); + var loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId()); + assertThat(loadedResizeRedaction2.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + assertThat(loadedResizeRedaction2.getUser()).isEqualTo("test"); + assertThat(loadedResizeRedaction2.getPositions()).isNotEmpty(); + + manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED)); + loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId()); + assertThat(loadedResizeRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); + } } From 6e7e8ecdd8720833913c6d37522a15bd569b859b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Thu, 21 Oct 2021 11:25:30 +0200 Subject: [PATCH 74/79] RED-2489: Fixed racecondition on update flags --- .../persistence/FileStatusPersistenceService.java | 11 +---------- .../persistence/repository/FileRepository.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 53f1c1a35..16d618678 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -78,16 +78,7 @@ public class FileStatusPersistenceService { @Transactional public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { - fileRepository.findById(fileId).ifPresentOrElse((file) -> { - file.setHasRedactions(hasRedactions); - file.setHasHints(hasHints); - file.setHasUpdates(hasUpdates); - file.setHasImages(hasImages); - file.setHasSuggestions(hasSuggestions); - file.setHasAnnotationComments(hasComments); - }, () -> { - throw new NotFoundException("Unknown file=" + fileId); - }); + fileRepository.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index ebb322fc6..3ca4423c0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -3,9 +3,20 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; +import javax.persistence.Column; + public interface FileRepository extends JpaRepository { List findByDossierId(String dossierId); + + @Modifying + @Query("update FileEntity e set e.hasRedactions = :hasRedactions , e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions, e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments where e.id =:fileId") + void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates); } + + From b4d00a5602c935de4128895312a87ba47eadae8c Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Fri, 22 Oct 2021 10:34:04 +0200 Subject: [PATCH 75/79] RED-2429: As a user I want to resize a redaction --- .../annotations/ManualResizeRedaction.java | 1 + .../annotations/ResizeRedactionRequest.java | 1 + .../ManualResizeRedactionEntity.java | 2 ++ .../ResizeRedactionPersistenceService.java | 29 ++++++++++++++----- .../tests/ManualRedactionTest.java | 6 ++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java index 60fbefeea..687eaef38 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ManualResizeRedaction.java @@ -22,6 +22,7 @@ public class ManualResizeRedaction { private OffsetDateTime requestDate; private OffsetDateTime processedDate; private OffsetDateTime softDeletedTime; + private String value; @Builder.Default private List positions = new ArrayList<>(); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java index ee393d3c7..c9ee927a5 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/annotations/ResizeRedactionRequest.java @@ -19,6 +19,7 @@ public class ResizeRedactionRequest { private AnnotationStatus status; private String comment; private int page; + private String value; @Builder.Default private List positions = new ArrayList<>(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java index dd64dc3be..a42c50cfe 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualResizeRedactionEntity.java @@ -44,6 +44,8 @@ public class ManualResizeRedactionEntity { private OffsetDateTime softDeletedTime; @Column private int page; + @Column + private String value; @ManyToOne private FileEntity fileStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java index 5f00fb561..af87375c0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ResizeRedactionPersistenceService.java @@ -1,7 +1,8 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + import java.time.OffsetDateTime; -import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -18,8 +19,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ResizeRedactionRequest; -import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; - import lombok.RequiredArgsConstructor; @Service @@ -28,6 +27,7 @@ public class ResizeRedactionPersistenceService { private final ResizeRedactionRepository resizeRedactionRepository; + @Transactional public void insert(String fileId, ResizeRedactionRequest resizeRedactionRequest) { @@ -40,8 +40,10 @@ public class ResizeRedactionPersistenceService { resizeRedactionRepository.save(manualResizeRedaction); } + @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { mre.setProcessedDate(OffsetDateTime.now()); mre.setStatus(annotationStatus); @@ -51,31 +53,42 @@ public class ResizeRedactionPersistenceService { @Transactional public void hardDelete(String fileId, String annotationId) { + resizeRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId)); } + @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)) + .ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); } + @Transactional public void undelete(String fileId, String annotationId) { - resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + + resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)) + .ifPresent(mre -> mre.setSoftDeletedTime(null)); } + public ManualResizeRedactionEntity findResizeRedaction(String fileId, String annotationId) { return resizeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)) .filter(mre -> mre.getSoftDeletedTime() == null) - .orElseThrow(() -> - new NotFoundException("Unknown file/annotation combination: " + fileId + "/" + annotationId)); + .orElseThrow(() -> new NotFoundException("Unknown file/annotation combination: " + fileId + "/" + annotationId)); } public Set findResizeRedactions(String fileId, boolean includeDeletions) { - return resizeRedactionRepository.findByIdFileId(fileId).stream().filter(mre -> includeDeletions || mre.getSoftDeletedTime() == null).collect(Collectors.toSet()); + return resizeRedactionRepository.findByIdFileId(fileId) + .stream() + .filter(mre -> includeDeletions || mre.getSoftDeletedTime() == null) + .collect(Collectors.toSet()); } + } 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 bc788fa92..bfe9789d3 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 @@ -169,11 +169,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(loadedImageRecategorization2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); var resizeRedaction = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() - .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.REQUESTED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").build()); + .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.REQUESTED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").value("some value").build()); var loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); assertThat(loadedResizeRedaction.getStatus()).isEqualTo(AnnotationStatus.REQUESTED); assertThat(loadedResizeRedaction.getUser()).isEqualTo("test"); assertThat(loadedResizeRedaction.getPositions()).isNotEmpty(); + assertThat(loadedResizeRedaction.getValue()).isEqualTo("some value"); manualRedactionClient.updateResizeRedactionStatus(dossier.getId(), file.getId(), resizeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); loadedResizeRedaction = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction.getAnnotationId()); @@ -229,11 +230,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactions.getLegalBasisChanges().forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), e.getAnnotationId())); var resizeRedaction2 = manualRedactionClient.addResizeRedaction(dossier.getId(), file.getId(), ResizeRedactionRequest.builder() - .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.APPROVED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").build()); + .annotationId(addRedaction.getAnnotationId()).page(1).comment("comment").status(AnnotationStatus.APPROVED).positions(List.of(Rectangle.builder().topLeftY(2).topLeftX(2).height(2).width(2).build())).user("test").value("some value").build()); 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)); loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId()); From 665e3d6911b59dd012e69553abe664e5ae1fea81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Fri, 22 Oct 2021 10:56:53 +0200 Subject: [PATCH 76/79] RED-2418: Fixed not working exception handling if redactionlog is not present --- .../server/service/RedactionLogService.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java index 910962fc7..dc89fd76f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/RedactionLogService.java @@ -1,13 +1,17 @@ package com.iqser.red.service.peristence.v1.server.service; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionRequest; import com.iqser.red.service.redaction.v1.model.SectionGrid; + +import feign.FeignException; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor @@ -24,7 +28,7 @@ public class RedactionLogService { var fileStatus = fileStatusService.getStatus(fileId); - if(fileStatus.isExcluded()){ + if (fileStatus.isExcluded()) { throw new NotFoundException("Excluded files have no redactionLog"); } @@ -32,14 +36,20 @@ public class RedactionLogService { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var manualRedactions = manualRedactionService.getManualRedactions(fileId); - - return redactionClient.getRedactionLog(RedactionRequest.builder() - .dossierId(dossierId) - .fileId(fileId) - .manualRedactions(manualRedactions) - .dossierTemplateId(dossier.getDossierTemplateId()) - .excludedPages(fileStatus.getExcludedPages()) - .build()); + try { + return redactionClient.getRedactionLog(RedactionRequest.builder() + .dossierId(dossierId) + .fileId(fileId) + .manualRedactions(manualRedactions) + .dossierTemplateId(dossier.getDossierTemplateId()) + .excludedPages(fileStatus.getExcludedPages()) + .build()); + } catch (FeignException e) { + if (e.status() == HttpStatus.NOT_FOUND.value()) { + throw new NotFoundException(e.getMessage()); + } + throw e; + } } else { return fileManagementStorageService.getRedactionLog(dossierId, fileId); } From de1bb1ad72e7a33cc08083a2bdb61eb2350f7240 Mon Sep 17 00:00:00 2001 From: devplant Date: Fri, 22 Oct 2021 12:18:52 +0300 Subject: [PATCH 77/79] RED-2494 Replace all updates (find-if-present-write) with atomic operations -first set of changes --- .../AddRedactionPersistenceService.java | 24 +++++++------------ .../CommentPersistenceService.java | 8 ++----- .../DossierAttributePersistenceService.java | 2 +- .../DossierPersistenceService.java | 23 ++++++------------ .../DownloadStatusPersistenceService.java | 14 +++-------- .../ForceRedactionPersistenceService.java | 10 ++++---- ...ageRecategorizationPersistenceService.java | 11 ++++----- .../LegalBasisChangePersistenceService.java | 12 ++++------ .../NotificationPersistenceService.java | 10 ++++---- .../RemoveRedactionPersistenceService.java | 21 +++++----------- .../repository/CommentRepository.java | 7 ++++++ .../DossierAttributeRepository.java | 4 ++++ .../repository/DossierRepository.java | 24 +++++++++++++++++++ .../repository/DownloadStatusRepository.java | 16 +++++++++++++ .../repository/ForceRedactionRepository.java | 15 ++++++++++++ .../ImageRecategorizationRepository.java | 15 ++++++++++++ .../LegalBasisChangeRepository.java | 14 +++++++++++ .../repository/ManualRedactionRepository.java | 18 ++++++++++++++ .../repository/NotificationRepository.java | 14 +++++++++++ .../repository/RemoveRedactionRepository.java | 21 ++++++++++++++++ 20 files changed, 194 insertions(+), 89 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java index 437a5affc..c2ec6dbde 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/AddRedactionPersistenceService.java @@ -77,36 +77,30 @@ public class AddRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + manualRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + manualRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - mre.setStatus(annotationStatus); - }); - - + manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + annotationStatus); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - mre.setStatus(annotationStatus); - mre.setAddToDictionary(isAddOrRemoveFromDictionary); - }); - + manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + annotationStatus, + isAddOrRemoveFromDictionary); } - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java index 1a9e92cc7..20f5081af 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java @@ -55,16 +55,12 @@ public class CommentPersistenceService { @Transactional public void softDelete(long commentId, OffsetDateTime softDeletedTime) { - commentRepository.findById(commentId).ifPresent(mre -> { - mre.setSoftDeletedTime(softDeletedTime); - }); + commentRepository.updateSoftDelete(commentId, softDeletedTime); } @Transactional public void undelete(long commentId) { - commentRepository.findById(commentId).ifPresent(mre -> { - mre.setSoftDeletedTime(null); - }); + commentRepository.updateSoftDelete(commentId, null); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java index 6242791fc..bce14765b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java @@ -34,7 +34,7 @@ public class DossierAttributePersistenceService { @Transactional public void updateDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) { - dossierAttributeRepository.findById(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId)).ifPresent(dossierAttribute -> dossierAttribute.setValue(dossierAttributeValue)); + dossierAttributeRepository.updateDossierAttribute(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId), dossierAttributeValue); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 2762e5551..a8ea15eae 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -7,6 +7,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; @@ -102,32 +103,22 @@ public class DossierPersistenceService { @Transactional public void hardDelete(String dossierId) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - dossier.setStatus(DossierStatus.DELETED); - dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : dossier.getSoftDeletedTime()); - }); + dossierRepository.hardDelete(dossierId, DossierStatus.DELETED, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @Transactional public void undelete(String dossierId) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - if (dossier.getHardDeletedTime() != null) { - throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); - } - dossier.setStatus(DossierStatus.ACTIVE); - dossier.setSoftDeletedTime(null); - }); + int updateCount = dossierRepository.undelete(dossierId, DossierStatus.ACTIVE); + if (updateCount == 0) { + throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); + } } @Transactional public void markDossierAsDeleted(String dossierId, OffsetDateTime softDeletedTime) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setStatus(DossierStatus.DELETED); - dossier.setSoftDeletedTime(softDeletedTime); - }); + dossierRepository.markDossierAsDeleted(dossierId, DossierStatus.DELETED, softDeletedTime); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index 27087ed9b..43aa5b59f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -45,26 +45,19 @@ public class DownloadStatusPersistenceService { @Transactional public void updateStatus(String storageId, DownloadStatusValue status) { - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> downloadStatus.setStatus(status)); + downloadStatusRepository.updateStatus(storageId, status); } @Transactional public void updateStatus(String storageId, DownloadStatusValue status, long fileSize) { - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> { - downloadStatus.setStatus(status); - downloadStatus.setFileSize(fileSize); - }); + downloadStatusRepository.updateStatus(storageId, status, fileSize); } @Transactional public void updateLastDownload(String storageId) { - - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> { - downloadStatus.setLastDownload(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - }); - + downloadStatusRepository.updateLastDownload(storageId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @@ -88,7 +81,6 @@ public class DownloadStatusPersistenceService { } - public List getStatus() { return downloadStatusRepository.findAll(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java index 58b00b2b5..2fbfb903b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java @@ -36,10 +36,8 @@ public class ForceRedactionPersistenceService { @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); + forceRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } @@ -50,12 +48,12 @@ public class ForceRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + forceRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + forceRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } public ManualForceRedactionEntity findForceRedaction(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java index e10cda634..88b6af662 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java @@ -35,11 +35,8 @@ public class ImageRecategorizationPersistenceService { @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - + imageRecategorizationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } @Transactional @@ -50,12 +47,12 @@ public class ImageRecategorizationPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + imageRecategorizationRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + imageRecategorizationRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } public ManualImageRecategorizationEntity findRecategorization(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java index 8618d3bfa..dfab30e70 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java @@ -41,24 +41,20 @@ public class LegalBasisChangePersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + legalBasisChangeRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + legalBasisChangeRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - - + legalBasisChangeRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } public ManualLegalBasisChangeEntity findLegalBasisChange(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java index 0b3267a33..5ae791ad7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java @@ -43,16 +43,18 @@ public class NotificationPersistenceService { @Transactional public void setReadDate(String userId, long notificationId, OffsetDateTime readDate) { - notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setReadDate(readDate), () -> { + int countUpdate = notificationRepository.setReadDate(userId, notificationId, readDate); + if (countUpdate == 0) { throw new NotFoundException("Notification not found"); - }); + } } @Transactional public void softDelete(String userId, long notificationId) { - notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setSoftDeleted(OffsetDateTime.now()), () -> { + int countUpdate = notificationRepository.softDelete(userId, notificationId, OffsetDateTime.now()); + if (countUpdate == 0) { throw new NotFoundException("Notification not found"); - }); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java index 306b683aa..420178622 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java @@ -55,33 +55,24 @@ public class RemoveRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + + removeRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + removeRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - + removeRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, OffsetDateTime.now()); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { - - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - mre.setRemoveFromDictionary(isAddOrRemoveFromDictionary); - }); - + removeRedactionRepository.updateStatusAndRemoveFromDictionary(new AnnotationEntityId(annotationId, fileId), + annotationStatus, OffsetDateTime.now(), isAddOrRemoveFromDictionary); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java index 649971d09..71104ee76 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java @@ -2,7 +2,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface CommentRepository extends JpaRepository { @@ -12,4 +15,8 @@ public interface CommentRepository extends JpaRepository { List findByFileId(String fileId); boolean existsByFileIdAndSoftDeletedTimeIsNull(String fileId); + + @Modifying + @Query("update CommentEntity c set c.softDeletedTime = :softDeleteTime where c.id = :id") + int updateSoftDelete(long id, OffsetDateTime softDeleteTime); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java index ce0a45043..8658bb803 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java @@ -19,4 +19,8 @@ public interface DossierAttributeRepository extends JpaRepository { + + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.hardDeletedTime = :hardDeletedTime," + + " d.softDeletedTime = " + + "case " + + "when d.softDeletedTime is null then :hardDeletedTime " + + "when d.softDeletedTime is not null then d.softDeletedTime " + + "end " + + "where d.id = :dossierId") + void hardDelete(String dossierId, DossierStatus dossierStatus, OffsetDateTime hardDeletedTime); + + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = null where d.id = :dossierId" + + " and d.hardDeletedTime is null") + int undelete(String dossierId, DossierStatus dossierStatus); + + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = :softDeletedTime where d.id = :dossierId") + void markDossierAsDeleted(String dossierId, DossierStatus dossierStatus, OffsetDateTime softDeletedTime); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java index 596f24505..f1e896afc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java @@ -1,10 +1,26 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; +import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface DownloadStatusRepository extends JpaRepository { List findAllByUserId(String userId); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.status = :status where ds.storageId = :storageId") + void updateStatus(String storageId, DownloadStatusValue status); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.status = :status, ds.fileSize = :fileSize where ds.storageId = :storageId") + void updateStatus(String storageId, DownloadStatusValue status, long fileSize); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.lastDownload = :lastDownload where ds.storageId = :storageId") + void updateLastDownload(String storageId, OffsetDateTime lastDownload); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java index 2175caaf7..16075852e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java @@ -2,11 +2,26 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualForceRedactionEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ForceRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualForceRedactionEntity mfr set mfr.status = :annotationStatus, mfr.processedDate = :processedDate " + + "where mfr.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualForceRedactionEntity mfr set mfr.softDeletedTime = :softDeletedTime " + + "where mfr.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java index 89700b921..841177aea 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java @@ -2,10 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualImageRecategorizationEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ImageRecategorizationRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualImageRecategorizationEntity mir set mir.status = :annotationStatus, mir.processedDate = :processedDate " + + "where mir.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualImageRecategorizationEntity mir set mir.softDeletedTime = :softDeletedTime " + + "where mir.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java index 08810acec..cb40465c1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java @@ -2,11 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface LegalBasisChangeRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualLegalBasisChangeEntity mlbc set mlbc.status = :annotationStatus, mlbc.processedDate = :processedDate " + + "where mlbc.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualLegalBasisChangeEntity mlbc set mlbc.softDeletedTime = :softDeletedTime " + + "where mlbc.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ManualRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ManualRedactionRepository.java index e694a18f6..146dab55e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ManualRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ManualRedactionRepository.java @@ -2,11 +2,29 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ManualRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualRedactionEntryEntity m set m.softDeletedTime = :softDeleteTime where m.id = :id") + void updateSoftDelete(AnnotationEntityId id, OffsetDateTime softDeleteTime); + + @Modifying + @Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate, m.status = :annotationStatus" + + " where m.id = :id") + void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus); + + @Modifying + @Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate, m.status = :annotationStatus," + + " m.addToDictionary = :isAddOrRemoveFromDictionary where m.id = :id") + void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java index 768863b8a..da08ba3d3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java @@ -2,8 +2,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; import java.util.Optional; @@ -18,4 +20,16 @@ public interface NotificationRepository extends JpaRepository findNotSeenForUser(String userId); Optional findByIdAndUserId(long notificationId, String userId); + + @Modifying + @Query("update NotificationEntity n set n.seenDate = :seenDate where n.id = :notificationId and n.userId = :userId") + int setSeenDate(String userId, long notificationId, OffsetDateTime seenDate); + + @Modifying + @Query("update NotificationEntity n set n.readDate = :readDate where n.id = :notificationId and n.userId = :userId") + int setReadDate(String userId, long notificationId, OffsetDateTime readDate); + + @Modifying + @Query("update NotificationEntity n set n.softDeleted = :softDeleted where n.id = :notificationId and n.userId = :userId") + int softDelete(String userId, long notificationId, OffsetDateTime softDeleted); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java index 10ad17407..47919b373 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java @@ -2,11 +2,32 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.IdRemovalEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface RemoveRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update IdRemovalEntity idr set idr.softDeletedTime = :softDeletedTime " + + "where idr.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + + @Modifying + @Query("update IdRemovalEntity idr set idr.status = :annotationStatus, idr.processedDate = :processedDate " + + "where idr.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update IdRemovalEntity idr set idr.status = :annotationStatus, idr.processedDate = :processedDate, " + + "idr.removeFromDictionary = :removeFromDictionary where idr.id = :annotationEntityId") + void updateStatusAndRemoveFromDictionary(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate, + boolean removeFromDictionary); + } From d8303c5f4c9f1bb728175c01c3d4c16adec88702 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Mon, 25 Oct 2021 07:31:50 +0200 Subject: [PATCH 78/79] RED-2513 If file is deleted, processState can not be updated --- .../FileStatusPersistenceService.java | 108 ++++++++++++++++-- .../integration/tests/FileProcessingTest.java | 72 ++++++++++-- 2 files changed, 157 insertions(+), 23 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 16d618678..c99247f3d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -5,6 +5,7 @@ import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import javax.transaction.Transactional; @@ -24,7 +25,6 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import lombok.RequiredArgsConstructor; - @Service @RequiredArgsConstructor public class FileStatusPersistenceService { @@ -35,6 +35,7 @@ public class FileStatusPersistenceService { private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final DossierPersistenceService dossierService; + public void createStatus(String dossierId, String fileId, String filename, String uploader) { FileEntity file = new FileEntity(); @@ -58,6 +59,9 @@ public class FileStatusPersistenceService { int analysisVersion) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setNumberOfPages(numberOfPages); file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setDictionaryVersion(dictionaryVersion); @@ -66,7 +70,7 @@ public class FileStatusPersistenceService { file.setAnalysisDuration(duration); file.setDossierDictionaryVersion(dossierDictionaryVersion); file.setAnalysisVersion(analysisVersion); - file.setNumberOfAnalyses(file.getNumberOfAnalyses()+1); + file.setNumberOfAnalyses(file.getNumberOfAnalyses() + 1); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { @@ -77,7 +81,12 @@ public class FileStatusPersistenceService { @Transactional - public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { + public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, + boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { + + if (isFileDeleted(fileId)) { + return; + } fileRepository.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); } @@ -86,6 +95,9 @@ public class FileStatusPersistenceService { public void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, boolean approval) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setWorkflowStatus(workflowStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); @@ -93,13 +105,16 @@ public class FileStatusPersistenceService { throw new NotFoundException("Unknown file=" + fileId); }); - } @Transactional public void updateProcessingStatus(String fileId, ProcessingStatus processingStatus) { + fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setProcessingStatus(processingStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { @@ -107,10 +122,14 @@ public class FileStatusPersistenceService { }); } + @Transactional public void setUpdateStatusIndexingSuccessful(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { @@ -119,10 +138,14 @@ public class FileStatusPersistenceService { } + @Transactional public void updateLastOCRTime(String fileId, OffsetDateTime time) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastOCRTime(time); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -130,20 +153,28 @@ public class FileStatusPersistenceService { } + @Transactional public void updateHasComments(String fileId, boolean hasComments) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setHasAnnotationComments(hasComments); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); } + @Transactional public void updateLastManualRedaction(String fileId, OffsetDateTime date) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastManualRedaction(date); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -151,10 +182,15 @@ public class FileStatusPersistenceService { } + @Transactional - public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, boolean hasSuggestions) { + public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, + boolean hasSuggestions) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastManualRedaction(date); file.setHasSuggestions(hasSuggestions); }, () -> { @@ -163,12 +199,16 @@ public class FileStatusPersistenceService { } + @Transactional(value = Transactional.TxType.REQUIRES_NEW) public void setFileAttributes(String dossierId, String fileId, Map fileAttributes) { fileAttributesRepository.deleteByFileId(fileId); fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setFileAttributes(fileAttributeEntities); @@ -178,17 +218,20 @@ public class FileStatusPersistenceService { } + @Transactional public void setExcludedPages(String fileId, Set excludedPages) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setExcludedPages(excludedPages); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); - } @@ -200,13 +243,17 @@ public class FileStatusPersistenceService { public List getStatusesForDossier(String dossierId) { + return fileRepository.findByDossierId(dossierId); } + public List getAllStatuses() { + return fileRepository.findAll(); } + @Transactional public void softDelete(String fileId, OffsetDateTime softDeletedTime) { @@ -217,15 +264,16 @@ public class FileStatusPersistenceService { throw new NotFoundException("Unknown file=" + fileId); }); - } + @Transactional public void hardDelete(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setProcessingStatus(ProcessingStatus.DELETED); - file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); + file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now() + .truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); fileAttributesRepository.deleteByFileId(fileId); @@ -235,6 +283,7 @@ public class FileStatusPersistenceService { } + @Transactional public void undelete(String fileId) { @@ -249,23 +298,31 @@ public class FileStatusPersistenceService { }); } + @Transactional public void setCurrentReviewer(String fileId, String currentReviewer, String lastReviewer) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setCurrentReviewer(currentReviewer); file.setLastReviewer(lastReviewer); - file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW); + file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED : WorkflowStatus.UNDER_REVIEW); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); } + @Transactional public void toggleExclusion(String fileId, boolean excluded) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setExcluded(excluded); file.setLastProcessed(null); file.setLastReviewer(null); @@ -286,6 +343,7 @@ public class FileStatusPersistenceService { } + @Transactional public void overwriteFile(String fileId, String uploader, String filename) { @@ -318,7 +376,10 @@ public class FileStatusPersistenceService { }); } - private List convertFileAttributes(String dossierId, FileEntity file, Map fileAttributesMap) { + + private List convertFileAttributes(String dossierId, FileEntity file, + Map fileAttributesMap) { + var dossier = dossierService.getAndValidateDossier(dossierId); List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); @@ -326,12 +387,35 @@ public class FileStatusPersistenceService { var fa = new FileAttributeEntity(); fa.setFileAttributeId(new FileAttributeEntity.FileAttributeEntityId()); fa.setFile(file); - fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() -> - new BadRequestException("Invalid File Attribute Id"))); + fa.setFileAttributeConfig(configuration.stream() + .filter(c -> c.getId().equals(entry.getKey())) + .findAny() + .orElseThrow(() -> new BadRequestException("Invalid File Attribute Id"))); fa.setValue(entry.getValue()); return fa; }).collect(Collectors.toList()); } + private boolean isFileDeleted(FileEntity file) { + + if (file == null || file.getDeleted() != null || file.getHardDeletedTime() != null || ProcessingStatus.DELETED.equals(file.getProcessingStatus())) { + return true; + } + return false; + } + + + private boolean isFileDeleted(String fileId) { + + AtomicBoolean isFileDeleted = new AtomicBoolean(false); + fileRepository.findById(fileId).ifPresentOrElse((file) -> { + isFileDeleted.set(isFileDeleted(file)); + }, () -> { + throw new NotFoundException("Unknown file=" + fileId); + }); + + return isFileDeleted.get(); + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java index 60b77b8a5..bd05a2b41 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java @@ -1,17 +1,19 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient; +import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; 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.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import static org.assertj.core.api.Assertions.assertThat; public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @@ -27,8 +29,13 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; + @Autowired + private UploadClient uploadClient; + + @Test public void testFileProcessing() { + var dossier = dossierTesterAndProvider.provideTestDossier(); var file = fileTesterAndProvider.testAndProvideFile(dossier); @@ -39,42 +46,85 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() .analysisVersion(100) .fileId(file.getId()) - .dossierId(dossier.getId()).build()); + .dossierId(dossier.getId()) + .build()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); - fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); assertThat(loadedFile.getLastOCRTime()).isNotNull(); - fileProcessingClient.indexing(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.INDEXING); assertThat(loadedFile.getLastIndexed()).isNull(); - fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getLastIndexed()).isNotNull(); } + + + @Test + public void testFileProcessingAfterDeletion() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + assertThat(file.getLastOCRTime()).isNull(); + + fileProcessingClient.analysisFailed(dossier.getId(), file.getId()); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); + + fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); + assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); + + // Delete file + uploadClient.deleteFile(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + assertThat(loadedFile.getDeleted()).isNotNull(); + + fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexing(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + } + } From b83e915feb719a7309e65056438d48d399e2aa5c Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 25 Oct 2021 09:15:24 +0300 Subject: [PATCH 79/79] status poll and rework of dossier-stats --- .../v1/api/resources/DossierResource.java | 11 ++++++ .../api/resources/DossierStatsResource.java | 6 ++-- .../api/resources/NotificationResource.java | 9 +++++ .../v1/api/resources/StatusResource.java | 11 ++++++ .../entity/dossier/DossierEntity.java | 3 ++ .../DossierPersistenceService.java | 10 +++++- .../FileStatusPersistenceService.java | 19 ++++++++-- .../NotificationPersistenceService.java | 4 +++ .../repository/DossierRepository.java | 5 +++ .../repository/FileRepository.java | 18 ++++++++-- .../repository/NotificationRepository.java | 3 ++ .../server/controller/DossierController.java | 7 ++++ .../controller/DossierStatsController.java | 5 +-- .../controller/FileStatusController.java | 10 ++++++ .../controller/NotificationController.java | 22 ++++++++++-- .../v1/server/service/DossierService.java | 3 ++ .../v1/server/service/FileStatusService.java | 4 +++ .../integration/tests/DossierStatsTest.java | 35 +++++++++---------- 18 files changed, 154 insertions(+), 31 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java index 6f7f51508..b8ed39205 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java @@ -1,11 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.time.OffsetDateTime; import java.util.List; import java.util.Set; @@ -22,6 +24,15 @@ public interface DossierResource { String INCLUDE_DELETED_PARAM = "includeDeleted"; + String SINCE_REQUEST_PARAM="since"; + + String CHANGES_PATH = "/has-changes"; + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = REST_PATH+CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + JSONPrimitive hasChangesSince(@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since); + @PostMapping(value = REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java index 57ec5f47a..ab5a53e67 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatsResource.java @@ -4,8 +4,10 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import org.springframework.http.MediaType; 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 java.util.List; import java.util.Map; import java.util.Set; @@ -19,6 +21,6 @@ public interface DossierStatsResource { @GetMapping(value = REST_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) DossierStats getDossierStats(@PathVariable(DOSSIER_ID_PARAM) String dossierId); - @GetMapping(value = REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE) - Map getDossierStats(@RequestBody Set dossierIds); + @PostMapping(value = REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + List getDossierStats(@RequestBody Set dossierIds); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java index 23dcdb924..a83e081e6 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/NotificationResource.java @@ -1,11 +1,13 @@ package com.iqser.red.service.persistence.service.v1.api.resources; import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.time.OffsetDateTime; import java.util.List; @ResponseStatus(value = HttpStatus.OK) @@ -14,6 +16,7 @@ public interface NotificationResource { String NOTIFICATION_PATH = "/notification"; String TOGGLE_SEEN_PATH = "/toggle-seen"; String TOGGLE_READ_PATH = "/toggle-read"; + String CHANGES_PATH = "/has-changes"; String USER_ID_PARAM = "userId"; String USER_ID_PATH_PARAM = "/{" + USER_ID_PARAM + "}"; @@ -21,7 +24,13 @@ public interface NotificationResource { String INCLUDE_SEEN_PARAM = "includeSeen"; String SET_SEEN_PARAM = "setSeen"; String SET_READ_PARAM = "setRead"; + String SINCE_REQUEST_PARAM = "since"; + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = NOTIFICATION_PATH + CHANGES_PATH + USER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) + JSONPrimitive hasNewNotificationsSince(@PathVariable(USER_ID_PARAM) String userId, + @RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since); @PostMapping(value = NOTIFICATION_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void addNotification(@RequestBody AddNotificationRequest addNotificationRequest); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index d2499bd12..c14be1f06 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -6,6 +6,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.time.OffsetDateTime; import java.util.List; import java.util.Set; @@ -19,16 +20,26 @@ public interface StatusResource { String FILE_ID = "fileId"; String FILE_ID_PATH_VARIABLE = "/{" + FILE_ID + "}"; + String CHANGES_PATH = "/has-changes"; + String EXCLUDED_STATUS_PARAM = "excluded"; String APPROVER_ID_REQUEST_PARAM = "approverId"; String REVIEWER_ID_REQUEST_PARAM = "reviewerId"; + String SINCE_REQUEST_PARAM="since"; + + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = STATUS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) List getAllStatuses(); + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = STATUS_PATH+DOSSIER_ID_PATH_PARAM+CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + JSONPrimitive hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since); + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = STATUS_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java index 673ebf04e..c1995b577 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java @@ -33,6 +33,9 @@ public class DossierEntity { @Column private OffsetDateTime date; + @Column + private OffsetDateTime lastUpdated; + @Column(length = 4000) private String description; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 2762e5551..1c877d535 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -31,6 +31,7 @@ public class DossierPersistenceService { private final DossierTemplateRepository dossierTemplateRepository; private final ReportTemplateRepository reportTemplateRepository; + public DossierEntity insert(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) { DossierEntity dossier = new DossierEntity(); @@ -38,7 +39,7 @@ public class DossierPersistenceService { dossier.setId(UUID.randomUUID().toString()); dossier.setStatus(DossierStatus.ACTIVE); dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - + dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); reportTemplates.forEach(r -> r.getDossiers().add(dossier)); @@ -56,6 +57,7 @@ public class DossierPersistenceService { dossierRepository.findById(dossierId).ifPresent(dossier -> { BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); + dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); reportTemplates.forEach(r -> r.getDossiers().add(dossier)); dossier.setReportTemplates(reportTemplates); @@ -104,6 +106,7 @@ public class DossierPersistenceService { public void hardDelete(String dossierId) { dossierRepository.findById(dossierId).ifPresent(dossier -> { dossier.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setStatus(DossierStatus.DELETED); dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : dossier.getSoftDeletedTime()); }); @@ -117,6 +120,7 @@ public class DossierPersistenceService { throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); } dossier.setStatus(DossierStatus.ACTIVE); + dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setSoftDeletedTime(null); }); } @@ -125,9 +129,13 @@ public class DossierPersistenceService { @Transactional public void markDossierAsDeleted(String dossierId, OffsetDateTime softDeletedTime) { dossierRepository.findById(dossierId).ifPresent(dossier -> { + dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setStatus(DossierStatus.DELETED); dossier.setSoftDeletedTime(softDeletedTime); }); } + public boolean hasChangesSince(OffsetDateTime since) { + return dossierRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS)); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 16d618678..03ccc41c7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -47,7 +47,7 @@ public class FileStatusPersistenceService { file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setUploader(uploader); file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); fileRepository.save(file); } @@ -78,7 +78,7 @@ public class FileStatusPersistenceService { @Transactional public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { - fileRepository.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); + fileRepository.updateFlags(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); } @@ -112,6 +112,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setProcessingStatus(ProcessingStatus.PROCESSED); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -123,6 +124,7 @@ public class FileStatusPersistenceService { public void updateLastOCRTime(String fileId, OffsetDateTime time) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastOCRTime(time); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -134,6 +136,7 @@ public class FileStatusPersistenceService { public void updateHasComments(String fileId, boolean hasComments) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setHasAnnotationComments(hasComments); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -144,6 +147,7 @@ public class FileStatusPersistenceService { public void updateLastManualRedaction(String fileId, OffsetDateTime date) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastManualRedaction(date); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -155,6 +159,7 @@ public class FileStatusPersistenceService { public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, boolean hasSuggestions) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastManualRedaction(date); file.setHasSuggestions(hasSuggestions); }, () -> { @@ -171,6 +176,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setFileAttributes(fileAttributeEntities); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -183,6 +189,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setExcludedPages(excludedPages); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -212,6 +219,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setProcessingStatus(ProcessingStatus.DELETED); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setDeleted(softDeletedTime); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -225,6 +233,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setProcessingStatus(ProcessingStatus.DELETED); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -242,6 +251,7 @@ public class FileStatusPersistenceService { if (file.getHardDeletedTime() != null) { throw new BadRequestException("Cannot undelete a hard-deleted dossier file!"); } + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setDeleted(null); }, () -> { @@ -255,6 +265,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setCurrentReviewer(currentReviewer); file.setLastReviewer(lastReviewer); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -267,6 +278,7 @@ public class FileStatusPersistenceService { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setExcluded(excluded); + file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(null); file.setLastReviewer(null); file.setCurrentReviewer(null); @@ -334,4 +346,7 @@ public class FileStatusPersistenceService { } + public boolean hasChangesSince(String dossierId, OffsetDateTime since) { + return fileRepository.existsByDossierIdAndLastUpdatedIsAfter(dossierId,since); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java index 0b3267a33..a53edee9a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; @Service @@ -20,6 +21,9 @@ public class NotificationPersistenceService { private final NotificationRepository notificationRepository; + public boolean hasNewNotificationsSince(String userId, OffsetDateTime since) { + return notificationRepository.existsByUserIdAndCreationDateIsAfter(userId, since.truncatedTo(ChronoUnit.MILLIS)); + } @SneakyThrows public void insertNotification(AddNotificationRequest addNotificationRequest) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java index 6e9afc6fc..d9684fc56 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java @@ -3,5 +3,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import org.springframework.data.jpa.repository.JpaRepository; +import java.time.OffsetDateTime; + public interface DossierRepository extends JpaRepository { + + boolean existsByLastUpdatedIsAfter(OffsetDateTime since); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index 3ca4423c0..06fc6f518 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -12,11 +12,25 @@ import java.util.List; import javax.persistence.Column; public interface FileRepository extends JpaRepository { + + boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since); + List findByDossierId(String dossierId); @Modifying - @Query("update FileEntity e set e.hasRedactions = :hasRedactions , e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions, e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments where e.id =:fileId") - void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates); + @Query("update FileEntity e set e.hasRedactions = :hasRedactions ," + + " e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions," + + " e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments, " + + " e.lastUpdated = :lastUpdated " + + " where e.id =:fileId") + void updateFlags(String fileId, + OffsetDateTime lastUpdated, + boolean hasRedactions, + boolean hasHints, + boolean hasImages, + boolean hasSuggestions, + boolean hasComments, + boolean hasUpdates); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java index 768863b8a..4da9d32eb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java @@ -4,11 +4,14 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.notifica import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; import java.util.Optional; public interface NotificationRepository extends JpaRepository { + boolean existsByUserIdAndCreationDateIsAfter(String userId, OffsetDateTime since); + List findByUserIdOrderByCreationDateDesc(String userId); @Query("Select n from NotificationEntity n where n.softDeleted is null and n.userId = :userId order by n.creationDate desc") diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java index 041d51b8c..ff15f8e61 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierController.java @@ -7,6 +7,7 @@ import com.iqser.red.service.peristence.v1.server.utils.DossierMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; @@ -35,6 +36,12 @@ public class DossierController implements DossierResource { private final FileStatusService fileStatusService; private final FileService fileService; + @Override + public JSONPrimitive hasChangesSince(@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since) { + + return JSONPrimitive.of(dossierService.hasChangesSince(since)); + } + @Override @Transactional diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java index 827793b41..e100fd59e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatsController.java @@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatsRe import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; @@ -23,7 +24,7 @@ public class DossierStatsController implements DossierStatsResource { } @Override - public Map getDossierStats(Set dossierIds) { - return dossierIds.stream().collect(Collectors.toMap(Function.identity(), dossierStatsService::getDossierStats)); + public List getDossierStats(Set dossierIds) { + return dossierIds.stream().map(dossierStatsService::getDossierStats).collect(Collectors.toList()); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 9707c9637..a3b90f1ae 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -3,6 +3,7 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.iqser.red.service.peristence.v1.server.service.*; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.time.OffsetDateTime; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -38,6 +40,14 @@ public class FileStatusController implements StatusResource { } + @Override + public JSONPrimitive hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId, + @RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since) { + + return JSONPrimitive.of(fileStatusService.hasChangesSince(dossierId,since)); + } + + @Override public List getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationController.java index 1d250ff74..86295f103 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/NotificationController.java @@ -1,7 +1,10 @@ package com.iqser.red.service.peristence.v1.server.controller; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification; import com.iqser.red.service.persistence.service.v1.api.resources.NotificationResource; import lombok.RequiredArgsConstructor; @@ -21,12 +24,25 @@ public class NotificationController implements NotificationResource { private final NotificationPersistenceService notificationPersistenceService; + private final NotificationPreferencesPersistenceService notificationPreferencesPersistenceService; - public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) { - - notificationPersistenceService.insertNotification(addNotificationRequest); + @Override + public JSONPrimitive hasNewNotificationsSince(String userId, OffsetDateTime since) { + return JSONPrimitive.of(notificationPersistenceService.hasNewNotificationsSince(userId, since)); } + public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) { + try { + var userPreferences = notificationPreferencesPersistenceService.getNotificationPreferences(addNotificationRequest.getUserId()); + if (userPreferences.getInAppNotifications().contains(addNotificationRequest.getNotificationType()) + || userPreferences.getEmailNotifications().contains(addNotificationRequest.getNotificationType())) { + notificationPersistenceService.insertNotification(addNotificationRequest); + } + } catch (NotFoundException e) { + notificationPersistenceService.insertNotification(addNotificationRequest); + } + + } public void toggleSeen(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List notificationIds, @RequestParam(SET_SEEN_PARAM) boolean setSeen) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java index 8f96c1ed0..8b8f18b9f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierService.java @@ -94,4 +94,7 @@ public class DossierService { return dossierPersistenceService.findAllDossiers(); } + public boolean hasChangesSince(OffsetDateTime since) { + return dossierPersistenceService.hasChangesSince(since); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index ef551e8da..54e8931b3 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -10,6 +10,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; @@ -344,4 +345,7 @@ public class FileStatusService { return fileAttributeList; } + public boolean hasChangesSince(String dossierId, OffsetDateTime since) { + return fileStatusPersistenceService.hasChangesSince(dossierId,since); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java index af597611a..9713fa4c2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatsTest.java @@ -10,15 +10,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; - -import org.hibernate.jdbc.Work; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; - import java.util.HashSet; -import java.util.Map; +import java.util.List; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -57,7 +54,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { // alter file 1 var loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId()); assertThat(loadedFile1.isHasRedactions()).isFalse(); - fileRepository.findById(file1.getId()).ifPresent((file)->{ + fileRepository.findById(file1.getId()).ifPresent((file) -> { file.setNumberOfAnalyses(NUMBER_PAGES_ANALYZED); file.setHasRedactions(true); file.setHasHints(true); @@ -68,18 +65,18 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { assertThat(loadedFile1.isHasRedactions()).isTrue(); // alter file 2 - fileRepository.findById(file2.getId()).ifPresent((file)->{ + fileRepository.findById(file2.getId()).ifPresent((file) -> { file.setHasSuggestions(true); fileRepository.save(file); }); // second dossier - dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate,"Dossier2"); + dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier2"); var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, "file3"); var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, "file4"); //alter file 4 - fileRepository.findById(file4.getId()).ifPresent((file)->{ + fileRepository.findById(file4.getId()).ifPresent((file) -> { file.setHasHints(true); file.setWorkflowStatus(WorkflowStatus.APPROVED); fileRepository.save(file); @@ -106,18 +103,18 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest { dossierIds.add(dossier1.getId()); dossierIds.add(dossier2.getId()); - Map dossierStatsMap = dossierStatsClient.getDossierStats(dossierIds); + List dossierStatsList = dossierStatsClient.getDossierStats(dossierIds); // get the result for dossier2 - DossierStats dossierStats2 = dossierStatsMap.get(dossier2.getId()); - assertThat(dossierStats2.getNumberOfFiles()).isEqualTo(2); - assertThat(dossierStats2.getNumberOfAnalysedPages()).isEqualTo(0); - assertThat(dossierStats2.isHasRedactionsFilePresent()).isFalse(); - assertThat(dossierStats2.isHasHintsNoRedactionsFilePresent()).isTrue(); - assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse(); - assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse(); - assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue(); - assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1); - assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1); + DossierStats dossierStats = dossierStatsList.stream().filter(d -> d.getDossierId().equals(dossier2.getId())).findAny().get(); + assertThat(dossierStats.getNumberOfFiles()).isEqualTo(2); + assertThat(dossierStats.getNumberOfAnalysedPages()).isEqualTo(0); + assertThat(dossierStats.isHasRedactionsFilePresent()).isFalse(); + assertThat(dossierStats.isHasHintsNoRedactionsFilePresent()).isTrue(); + assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse(); + assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse(); + assertThat(dossierStats.isHasNoFlagsFilePresent()).isTrue(); + assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1); + assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1); } }