diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java index d154b65df..917bd8b2f 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java @@ -1,5 +1,6 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; +import com.iqser.red.service.persistence.management.v1.processor.entity.migration.SaasMigrationStatusEntity; 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.migration.SaasMigrationService; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus.*; @@ -47,10 +49,8 @@ public class MigrationStatusController implements MigrationStatusResource { var filesInErrorState = saasMigrationStatusPersistenceService.findAllByStatus(ERROR); - Map errorCauses = new HashMap<>(); - filesInErrorState.forEach(errorFile -> { - errorCauses.put(errorFile.getFileId(), errorFile.getErrorCause()); - }); + var errorCauses = filesInErrorState.stream() + .collect(Collectors.toMap(errorFile -> errorFile.getDossierId() + "/" + errorFile.getFileId(), SaasMigrationStatusEntity::getErrorCause)); return MigrationStatusResponse.builder().numberOfFilesToMigrate(numberOfFilesToMigrate).filesInStatus(filesInStatus).errorCauses(errorCauses).build(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java index adcfa6881..db60ef525 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java @@ -92,14 +92,17 @@ public class SaasMigrationService implements TenantSyncService { .stream() .filter(dossier -> dossier.getHardDeletedTime() == null) .toList(); + for (var dossier : dossiers) { var files = fileStatusPersistenceService.getStatusesForDossier(dossier.getId()) .stream() .filter(file -> file.getHardDeletedTime() == null) .toList(); + var migrationStati = saasMigrationStatusPersistenceService.findAll() .stream() .collect(Collectors.toMap(SaasMigrationStatusEntity::getFileId, SaasMigrationStatusEntity::getStatus)); + for (var file : files) { if (notExistsOrError(file, migrationStati)) { // delete NER_ENTITIES since offsets depend on old document structure. diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogService.java index f6d987b7b..d763854da 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogService.java @@ -24,10 +24,10 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import lombok.extern.slf4j.Slf4j; +@Slf4j @Service @RequiredArgsConstructor @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) -@Slf4j public class EntityLogService { FileManagementStorageService fileManagementStorageService; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java index 5af648f1e..82e4549a5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java @@ -439,7 +439,7 @@ public class ManualRedactionService { .stream() .map(p -> MagicConverter.convert(p, RectangleEntity.class)) .toList()); - manualRedactionEntryEntity.setRequestDate(file.getAdded()); + manualRedactionEntryEntity.setRequestDate(manualRedactionEntry.getRequestDate()); manualRedactionEntryEntity.setFileStatus(file); return manualRedactionEntryEntity; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java index 223774f97..6c9a317ed 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java @@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.manual import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -19,6 +20,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; @Service public class PendingDictionaryEntryFactory { @@ -36,7 +38,8 @@ public class PendingDictionaryEntryFactory { .id(manualRedactionEntry.getAnnotationId()) .value(manualRedactionEntry.getValue()) .type(manualRedactionEntry.getType()) - .entryType(manualRedactionEntry.getDictionaryEntryType().toEntryType()) + .entryType(Optional.ofNullable(manualRedactionEntry.getDictionaryEntryType()) + .orElse(DictionaryEntryType.ENTRY).toEntryType()) .state(EntryState.PENDING) .dictionaryEntry(manualRedactionEntry.isAddToDictionary()) .dossierDictionaryEntry(manualRedactionEntry.isAddToDossierDictionary()) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index 963e3e9be..a9a3d5bee 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -185,3 +185,5 @@ databaseChangeLog: file: db/changelog/tenant/120-add-legal-basis-change-to-manual-recategorization.yaml - include: file: db/changelog/tenant/sql/205-add-dossier-dictionaries-as-entity.sql + - include: + file: db/changelog/tenant/121-set-dictionary-entry-type-for-dictionary-adds-where-null.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/121-set-dictionary-entry-type-for-dictionary-adds-where-null.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/121-set-dictionary-entry-type-for-dictionary-adds-where-null.yaml new file mode 100644 index 000000000..190080318 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/121-set-dictionary-entry-type-for-dictionary-adds-where-null.yaml @@ -0,0 +1,13 @@ +databaseChangeLog: + - changeSet: + id: set-dictionary-entry-type-for-dictionary-adds-where-null + author: kilian + + changes: + - update: + tableName: manual_redaction + columns: + - column: + name: dictionary_entry_type + value: 'ENTRY' + where: "add_to_dictionary AND dictionary_entry_type IS NULL" diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java index ee28a7996..7a041bc58 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java @@ -277,7 +277,7 @@ public class EntityLogMergeTest { .dictionaryEntry(true) .positions(positions) .build()), - null, + Collections.emptyList(), 0, 0, 0, @@ -305,9 +305,11 @@ public class EntityLogMergeTest { .addToDossierDictionary(false) .fileId(fileId) .rectangle(false) + .fileId("file") .requestDate(OffsetDateTime.now()) .dictionaryEntryType(DictionaryEntryType.ENTRY) .type("manual") + .user("User") .build(), ManualRedactionEntry.builder() .positions(List.of(new Rectangle(5f, 6f, 7f, 8f, 1))) @@ -320,8 +322,10 @@ public class EntityLogMergeTest { .rectangle(true) .requestDate(OffsetDateTime.now()) .type("manual") + .user("User") + .fileId("file") .build())) - .idsToRemove(Set.of(IdRemoval.builder().annotationId(entryToRemoveId).requestDate(OffsetDateTime.now()).build())) + .idsToRemove(Set.of(IdRemoval.builder().annotationId(entryToRemoveId).requestDate(OffsetDateTime.now()).user("user").fileId("file").build())) .resizeRedactions(Set.of(ManualResizeRedaction.builder() .fileId(fileId) .value("Random") @@ -329,15 +333,26 @@ public class EntityLogMergeTest { .positions(positions) .requestDate(OffsetDateTime.now()) .updateDictionary(false) + .user("User") + .fileId("file") .build())) .legalBasisChanges(Set.of(ManualLegalBasisChange.builder() .annotationId(entryLegalBasisId) .value("Random") .legalBasis("New legal basis") + .user("User") .section("Section") + .fileId("file") .requestDate(OffsetDateTime.now()) .build())) - .forceRedactions(Set.of(ManualForceRedaction.builder().annotationId(forceRedactionId).fileId(fileId).legalBasis("Force").requestDate(OffsetDateTime.now()).build())) + .forceRedactions(Set.of(ManualForceRedaction.builder() + .annotationId(forceRedactionId) + .fileId(fileId) + .legalBasis("Force") + .requestDate(OffsetDateTime.now()) + .user("User") + .fileId("file") + .build())) .build(); } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java index b0d8f5447..1b6e7cfe6 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/BaseAnnotation.java @@ -10,6 +10,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import lombok.NonNull; import lombok.experimental.SuperBuilder; @Data @@ -19,9 +20,13 @@ import lombok.experimental.SuperBuilder; @EqualsAndHashCode public abstract class BaseAnnotation { + @NonNull private String annotationId; + @NonNull private String fileId; + @NonNull private String user; + @NonNull private OffsetDateTime requestDate; private OffsetDateTime processedDate; private OffsetDateTime softDeletedTime;