From c43f052afb03c3d8be33b2b0e6ab06195801c4ec Mon Sep 17 00:00:00 2001 From: deiflaender Date: Wed, 16 Mar 2022 11:13:59 +0100 Subject: [PATCH 1/2] RED-3611: Use priority queue for user triggerd actions --- .../FileStatusPersistenceService.java | 6 ++--- .../configuration/MessagingConfiguration.java | 12 +++++++++ .../controller/FileAttributesController.java | 1 + .../controller/ReanalysisController.java | 9 +++---- .../service/ExcludeFromAnalysisService.java | 4 +-- .../v1/server/service/FileService.java | 2 +- .../FileStatusProcessingUpdateService.java | 10 ++++--- .../v1/server/service/FileStatusService.java | 27 ++++++++++--------- .../server/service/ImageMessageReceiver.java | 2 +- .../service/ManualRedactionService.java | 2 +- .../v1/server/service/NerMessageReceiver.java | 2 +- .../scheduler/AutomaticAnalysisScheduler.java | 4 +-- 12 files changed, 48 insertions(+), 33 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 fda88e915..11ea72a2d 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,7 +5,6 @@ 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.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.ProcessingStatus; @@ -27,7 +26,6 @@ import java.util.stream.Collectors; public class FileStatusPersistenceService { private final FileRepository fileRepository; - private final DossierRepository dossierRepository; private final FileAttributesRepository fileAttributesRepository; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final DossierPersistenceService dossierService; @@ -162,7 +160,7 @@ public class FileStatusPersistenceService { var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); fileAttributesRepository.saveAllAndFlush(fileAttributeEntities); - fileRepository.updateLastAttributeChangeDate(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + fileRepository.updateLastAttributeChangeDate(fileId,OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); @@ -362,7 +360,7 @@ public class FileStatusPersistenceService { @Transactional - public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate){ + public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) { fileRepository.updateFileModificationDate(fileId, fileManipulationDate); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/configuration/MessagingConfiguration.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/configuration/MessagingConfiguration.java index ae8e8bb6f..759ebacef 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/configuration/MessagingConfiguration.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/configuration/MessagingConfiguration.java @@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor; public class MessagingConfiguration { public static final String REDACTION_QUEUE = "redactionQueue"; + public static final String REDACTION_PRIORITY_QUEUE = "redactionPriorityQueue"; public static final String REDACTION_DQL = "redactionDQL"; public static final String DOWNLOAD_QUEUE = "downloadQueue"; @@ -106,6 +107,17 @@ public class MessagingConfiguration { } + @Bean + public Queue redactionPriorityQueue() { + + return QueueBuilder.durable(REDACTION_PRIORITY_QUEUE) + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", REDACTION_DQL) + .maxPriority(2) + .build(); + } + + @Bean public Queue ocrQueue() { 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 433d5aea6..e80ad6743 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 @@ -129,6 +129,7 @@ public class FileAttributesController implements FileAttributesResource { @PathVariable(FILE_ID) String fileId, @RequestBody Map fileAttributesMap) { fileStatusPersistenceService.setFileAttributes(dossierId, fileId, fileAttributesMap); + fileStatusService.setStatusReprocess(dossierId, fileId, true); indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2); } 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 aef6097a9..b8cb40903 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 @@ -43,7 +43,6 @@ public class ReanalysisController implements ReanalysisResource { private final FileStatusService fileStatusService; private final DossierPersistenceService dossierPersistenceService; private final IndexingService indexingService; - private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final PDFTronRedactionClient pDFTronRedactionClient; @@ -106,7 +105,7 @@ public class ReanalysisController implements ReanalysisResource { throw new BadRequestException("The files differ in number of pages"); } pDFTronRedactionClient.importRedactions(documentRequest); - fileStatusService.setStatusFullReprocess(documentRequest.getDossierId(), documentRequest.getFileId(), 1); + fileStatusService.setStatusFullReprocess(documentRequest.getDossierId(), documentRequest.getFileId(), true); } @@ -118,7 +117,7 @@ public class ReanalysisController implements ReanalysisResource { fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } if (textHighlightRequest.getOperation().equals(TextHighlightOperation.CONVERT)) { - fileStatusService.setStatusFullReprocess(textHighlightRequest.getDossierId(), textHighlightRequest.getFileId(), 1); + fileStatusService.setStatusFullReprocess(textHighlightRequest.getDossierId(), textHighlightRequest.getFileId(), true); } return textHighlightResponse; } @@ -191,11 +190,11 @@ public class ReanalysisController implements ReanalysisResource { if (force) { filesToReanalyse.forEach(file -> { - fileStatusService.setStatusReprocess(dossierId, file.getId(), 2, true); + fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1 ? true : false, true); }); } else { filesToReanalyse.stream().filter(FileModel::isReanalysisRequired).forEach(file -> { - fileStatusService.setStatusReprocess(dossierId, file.getId(), 2, true); + fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1 ? true : false, true); }); } 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 2d26e0ed9..8217d0878 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 @@ -24,7 +24,7 @@ public class ExcludeFromAnalysisService { if (!excluded) { // if file has been re-enabled - process it - fileStatusService.setStatusFullReprocess(dossierId, fileId, 2); + fileStatusService.setStatusFullReprocess(dossierId, fileId, false); } } @@ -37,7 +37,7 @@ public class ExcludeFromAnalysisService { if (!excludedFromAutomaticAnalysis) { // if file has been re-enabled - process it - fileStatusService.setStatusFullReprocess(dossierId, fileId, 2); + fileStatusService.setStatusFullReprocess(dossierId, fileId, false); } } 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 ca608e4c7..6b5b703c7 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 @@ -89,7 +89,7 @@ public class FileService { if (existingStatus != null) { // the file is already uploaded, just reanalyse it. - fileStatusService.overwriteFile(request.getDossierId(), fileId, request.getUploader(), request.getFilename(), request.getData().length); + fileStatusService.overwriteFile(request.getDossierId(), fileId, request.getUploader(), request.getFilename()); } 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()); 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 aa6cb1db8..a040852f2 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 @@ -37,8 +37,12 @@ public class FileStatusProcessingUpdateService { if (settings.isNerServiceEnabled() && !fileManagementStorageService.nerEntitiesExists(dossierId, fileId)) { fileStatusService.addToNerQueue(dossierId, fileId); } else { - fileStatusService.setStatusAnalyse(dossierId, fileId, 1); - fileStatusService.addToAnalysisQueue(dossierId, fileId, 2, null); + + //TODO This might be also priority depending on what was the pervious call. + fileStatusService.setStatusAnalyse(dossierId, fileId, false); + + //TODO This might be also priority depending on what was the pervious call. + fileStatusService.addToAnalysisQueue(dossierId, fileId, false, null); } break; @@ -73,7 +77,7 @@ public class FileStatusProcessingUpdateService { log.info("OCR Successful for dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext.getRetryCount()); fileStatusService.updateLastOCRTime(fileId); - fileStatusService.setStatusFullReprocess(dossierId, fileId, 2); + fileStatusService.setStatusFullReprocess(dossierId, fileId, false); 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 a1e7bb192..5bb6f9652 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 @@ -147,7 +147,7 @@ public class FileStatusService { @Transactional - public void setStatusReprocess(String dossierId, String fileId, int priority, Set sectionsToReanalyse, + public void setStatusReprocess(String dossierId, String fileId, boolean priority, Set sectionsToReanalyse, boolean triggeredManually) { log.info("Reprocessing file: {} from dossier {}", fileId, dossierId); @@ -182,7 +182,7 @@ public class FileStatusService { @Transactional - public void setStatusFullReprocess(String dossierId, String fileId, int priority) { + public void setStatusFullReprocess(String dossierId, String fileId, boolean priority) { FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); @@ -202,7 +202,7 @@ public class FileStatusService { @Transactional - protected void addToAnalysisQueue(String dossierId, String fileId, int priority, Set sectionsToReanalyse) { + protected void addToAnalysisQueue(String dossierId, String fileId, boolean priority, Set sectionsToReanalyse) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); var fileStatus = fileStatusPersistenceService.getStatus(fileId); @@ -246,10 +246,11 @@ public class FileStatusService { setStatusProcessing(fileId); try { - rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest), message -> { - message.getMessageProperties().setPriority(priority); - return message; - }); + if(priority){ + rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_PRIORITY_QUEUE, objectMapper.writeValueAsString(analyseRequest)); + } else { + rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest)); + } } catch (JsonProcessingException e) { throw new RuntimeException(e); } @@ -283,14 +284,14 @@ public class FileStatusService { @Transactional - public void setStatusReprocess(String dossierId, String fileId, int priority) { + public void setStatusReprocess(String dossierId, String fileId, boolean priority) { setStatusReprocess(dossierId, fileId, priority, Sets.newHashSet(), false); } @Transactional - public void setStatusReprocess(String dossierId, String fileId, int priority, boolean triggeredManually) { + public void setStatusReprocess(String dossierId, String fileId, boolean priority, boolean triggeredManually) { setStatusReprocess(dossierId, fileId, priority, Sets.newHashSet(), triggeredManually); } @@ -300,7 +301,7 @@ public class FileStatusService { public void createStatus(String dossierId, String fileId, String uploader, String filename) { fileStatusPersistenceService.createStatus(dossierId, fileId, filename, uploader); - addToAnalysisQueue(dossierId, fileId, 1, Set.of()); + addToAnalysisQueue(dossierId, fileId, false, Set.of()); } @@ -432,11 +433,11 @@ public class FileStatusService { @Transactional - public void overwriteFile(String dossierId, String fileId, String uploader, String filename, int length) { + public void overwriteFile(String dossierId, String fileId, String uploader, String filename) { fileStatusPersistenceService.overwriteFile(fileId, uploader, filename); wipeFileData(dossierId, fileId); - setStatusFullReprocess(dossierId, fileId, length); + setStatusFullReprocess(dossierId, fileId, false); } @@ -518,7 +519,7 @@ public class FileStatusService { @Transactional - public void setStatusAnalyse(String dossierId, String fileId, int priority) { + public void setStatusAnalyse(String dossierId, String fileId, boolean priority) { FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ImageMessageReceiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ImageMessageReceiver.java index c9da8c2b7..401477095 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ImageMessageReceiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ImageMessageReceiver.java @@ -42,7 +42,7 @@ public class ImageMessageReceiver { if(settings.isStoreImageFile()) { fileManagementStorageService.storeObject(dossierId, fileId, FileType.IMAGE_INFO, in); } - fileStatusService.setStatusAnalyse(dossierId, fileId, 1); + fileStatusService.setStatusAnalyse(dossierId, fileId, false); } 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 636677af2..7a23d6288 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 @@ -649,7 +649,7 @@ public class ManualRedactionService { private void reprocess(String dossierId, String fileId) { - fileStatusService.setStatusReprocess(dossierId, fileId, 2); + fileStatusService.setStatusReprocess(dossierId, fileId, true); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/NerMessageReceiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/NerMessageReceiver.java index df861ad78..e74136a80 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/NerMessageReceiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/NerMessageReceiver.java @@ -36,7 +36,7 @@ public class NerMessageReceiver { String fileId = (String) entityResponse.get("fileId"); log.info("Received NER Message from {} {}", dossierId, fileId); - fileStatusService.setStatusAnalyse(dossierId, fileId, 1); + fileStatusService.setStatusAnalyse(dossierId, fileId, false); } 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 ca2a1d350..f699ba0b2 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 @@ -63,10 +63,10 @@ public class AutomaticAnalysisScheduler { if (next.isFullAnalysisRequired()) { log.info("Queued file: {} for automatic full analysis! ", next.getFilename()); - fileStatusService.setStatusFullReprocess(next.getDossierId(), next.getId(), 1); + fileStatusService.setStatusFullReprocess(next.getDossierId(), next.getId(), false); } else if (next.isReanalysisRequired()) { log.info("Queued file: {} for automatic reanalysis! ", next.getFilename()); - fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); + fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), false); } } } From 8ab286da9437ce774d9129c03c7d7b6b02331924 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Wed, 16 Mar 2022 15:03:54 +0100 Subject: [PATCH 2/2] RED-3618: Fixed renalyse after removing hint, add also to priority queue on approve --- .../service/ManualRedactionService.java | 31 +++++++++++++------ .../tests/ManualRedactionTest.java | 23 ++++++++++++++ 2 files changed, 45 insertions(+), 9 deletions(-) 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 7a23d6288..0069c630e 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 @@ -144,6 +144,14 @@ public class ManualRedactionService { commentId = addComment(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getComment(), removeRedactionRequest.getUser()).getId(); } + if (!removeRedactionRequest.isRemoveFromDictionary()) { + Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() + .stream() + .filter(entry -> entry.getId().equals(removeRedactionRequest.getAnnotationId())) + .findFirst(); + actionPerformed = actionPerformed || redactionLogEntryOptional.isPresent() && redactionLogEntryOptional.get().isHint(); + } + actionPerformed = actionPerformed || handleRemoveFromDictionary(redactionLog, dossier, fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), removeRedactionRequest.isRemoveFromDictionary(), false); response.add(ManualAddResponse.builder() @@ -445,22 +453,25 @@ public class ManualRedactionService { for (var annotationId : annotationIds) { IdRemovalEntity idRemoval = removeRedactionPersistenceService.findRemoveRedaction(fileId, annotationId); + + Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() + .stream() + .filter(entry -> entry.getId().equals(idRemoval.getId().getAnnotationId())) + .findFirst(); + + if (redactionLogEntryOptional.isEmpty()) { + throw new NotFoundException("Annotation does not exist in redaction log."); + } + if (idRemoval.isRemoveFromDictionary()) { - Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry() - .stream() - .filter(entry -> entry.getId().equals(idRemoval.getId().getAnnotationId())) - .findFirst(); - - if (redactionLogEntryOptional.isEmpty()) { - throw new NotFoundException("Annotation does not exist in redaction log."); - } var redactionLogEntry = redactionLogEntryOptional.get(); if (annotationStatus == AnnotationStatus.APPROVED) { removeFromDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId, DictionaryEntryType.ENTRY); approveStatusForRedactionsWithSameValue(dossier, false, true, redactionLogEntry.getValue()); + reprocess(dossierId, fileId); } else if (annotationStatus == AnnotationStatus.DECLINED) { @@ -469,6 +480,8 @@ public class ManualRedactionService { addToDictionary(buildTypeId(redactionLogEntry, dossier), redactionLogEntry.getValue(), dossierId, fileId, DictionaryEntryType.ENTRY); } } + } else if(redactionLogEntryOptional.isPresent() && redactionLogEntryOptional.get().isHint()){ + reprocess(dossierId, fileId); } removeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus); @@ -560,7 +573,7 @@ public class ManualRedactionService { if (manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary()) { if (annotationStatus == AnnotationStatus.APPROVED) { addToDictionary(manualRedactionEntry.getTypeId(), manualRedactionEntry.getValue(), dossierId, fileId, manualRedactionEntry.getDictionaryEntryType()); - + reprocess(dossierId, fileId); approveStatusForRedactionsWithSameValue(dossier, manualRedactionEntry.isAddToDictionary(), manualRedactionEntry.isAddToDossierDictionary(), manualRedactionEntry.getValue()); } else if (annotationStatus == AnnotationStatus.DECLINED) { 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 ddf057c36..636a51bc0 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 @@ -6,6 +6,8 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +19,11 @@ 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.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; + +import lombok.SneakyThrows; public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { @@ -38,8 +45,15 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { @Autowired private DictionaryClient dictionaryClient; + @Autowired + private FileManagementStorageService fileManagementStorageService; + + @Autowired + private ObjectMapper objectMapper; + @Test + @SneakyThrows public void testManualRedaction() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); @@ -126,6 +140,11 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .user("test") .removeFromDictionary(false) .build())).get(0); + + fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, 1, + List.of(RedactionLogEntry.builder().id(removeRedaction.getAnnotationId()).type("manual").value("value entry").build()), + null, 0, 0, 0, 0))); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), UpdateRedactionRequest.builder() .annotationIds(List.of(removeRedaction.getAnnotationId())) @@ -148,6 +167,10 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedRemoveRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + fileManagementStorageService.storeObject(dossier.getId(), file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, 1, + List.of(RedactionLogEntry.builder().id("annotationId").type("manual").value("value entry").build()), + null, 0, 0, 0, 0))); + var removeRedaction2 = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), List.of(RemoveRedactionRequest.builder() .annotationId("annotationId") .comment("comment")