From c8f81d5e52ad2a1e2a5f8cfb1ef420bc8b1c0024 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 8 Oct 2021 14:42:39 +0300 Subject: [PATCH] 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());