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 455a5742c..f94de45c1 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 @@ -100,12 +100,13 @@ public class AddRedactionPersistenceService { } @Transactional - public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { + public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary + , boolean isAddOrRemoveFromDossierDictionary) { manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), annotationStatus, - isAddOrRemoveFromDictionary); + isAddOrRemoveFromDictionary, isAddOrRemoveFromDossierDictionary); } } 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 ad37b0535..6c06b3d87 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 @@ -94,7 +94,13 @@ public class FileStatusPersistenceService { if (isFileDeleted(fileId)) { return; } - fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + if (processingStatus == ProcessingStatus.PROCESSED) { + // In case the file is updated to "processed", "lastProcessed" date should be updated to "now" + fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } else { + fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } } @@ -218,7 +224,7 @@ public class FileStatusPersistenceService { public void softDelete(String fileId, OffsetDateTime softDeletedTime) { int countUpdate = fileRepository.setSoftDelete(fileId, ProcessingStatus.DELETED, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime); + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime); if (countUpdate == 0) { throw new NotFoundException("Unknown file=" + fileId); } @@ -261,7 +267,7 @@ public class FileStatusPersistenceService { return; } int updateCount = fileRepository.setAssignee(fileId, currentAssignee, lastReviewer, lastApprover, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); if (updateCount == 0) { throw new NotFoundException("Unknown file=" + fileId); } @@ -288,9 +294,9 @@ public class FileStatusPersistenceService { }); int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS, - WorkflowStatus.NEW, - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), - OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + WorkflowStatus.NEW, + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); if (countUpdate == 0) { throw new NotFoundException("Unknown file=" + fileId); } 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 9e4754715..d673e3999 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 @@ -55,6 +55,11 @@ public interface FileRepository extends JpaRepository { "where f.id = :fileId") void updateProcessingStatus(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated); + @Modifying(clearAutomatically = true) + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, f.lastProcessed = :lastProcessed " + + "where f.id = :fileId") + void updateProcessingStatus(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed); + @Modifying @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + "f.lastIndexed = :lastIndexed where f.id = :fileId") 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 c4cd7001d..dd1e41068 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 @@ -26,8 +26,9 @@ public interface ManualRedactionRepository extends JpaRepository findAddRedaction(AnnotationEntityId id); 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 eeaa29ec2..3abeda5e7 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 @@ -2,10 +2,8 @@ package com.iqser.red.service.peristence.v1.server.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -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.client.RedactionClient; import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration; import com.iqser.red.service.peristence.v1.server.controller.DictionaryController; import com.iqser.red.service.peristence.v1.server.utils.ManualRedactionMapper; @@ -16,18 +14,15 @@ 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 com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ManualRedactionRepository; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; import com.iqser.red.service.redaction.v1.model.MessageType; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; - import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; @@ -71,7 +66,7 @@ public class ManualRedactionService { dossierPersistenceService.getAndValidateDossier(dossierId); - if (addRedactionRequest.isAddToDictionary()) { + if (addRedactionRequest.isAddToDictionary() || addRedactionRequest.isAddToDossierDictionary()) { try { if (!addRedactionRequest.isForceAddToDictionary() && stopwordService.isStopword(addRedactionRequest.getValue())) { @@ -80,7 +75,7 @@ public class ManualRedactionService { dictionaryController.getDictionaryForType(addRedactionRequest.getTypeId()); } catch (NotFoundException e) { - throw new BadRequestException("Invalid type: " + addRedactionRequest.getTypeId()); + throw new BadRequestException("Invalid type: " + addRedactionRequest.getTypeId()); } } @@ -96,7 +91,7 @@ public class ManualRedactionService { } handleAddToDictionary(fileId, annotationId, addRedactionRequest.getTypeId(), addRedactionRequest.getValue(), addRedactionRequest - .getStatus(), addRedactionRequest.isAddToDictionary(), false, dossierId); + .getStatus(), addRedactionRequest.isAddToDictionary(), addRedactionRequest.isAddToDossierDictionary(), false, dossierId); if (addRedactionRequest.getStatus().equals(AnnotationStatus.REQUESTED)) { fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true); @@ -346,7 +341,7 @@ public class ManualRedactionService { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); handleAddToDictionary(fileId, annotationId, addRedaction.getTypeId(), addRedaction.getValue(), addRedaction.getStatus(), addRedaction - .isAddToDictionary(), true, dossier.getId()); + .isAddToDictionary(), addRedaction.isAddToDossierDictionary(), true, dossier.getId()); addRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); @@ -599,14 +594,13 @@ public class ManualRedactionService { } - private void handleAddToDictionary(String fileId, String annotationId, String typeId, String value, - AnnotationStatus status, boolean addToDictionary, boolean revert, - String dossierId) { + private void handleAddToDictionary(String fileId, String annotationId, String typeId, String value, AnnotationStatus status, + boolean addToDictionary, boolean addToDossierDictionary, boolean revert, String dossierId) { if (status == AnnotationStatus.APPROVED) { - addRedactionPersistenceService.updateStatus(fileId, annotationId, status, addToDictionary); + addRedactionPersistenceService.updateStatus(fileId, annotationId, status, addToDictionary, addToDossierDictionary); - if (addToDictionary) { + if (addToDictionary || addToDossierDictionary) { if (revert) { removeFromDictionary(typeId, value, dossierId, fileId); } else { @@ -653,7 +647,7 @@ public class ManualRedactionService { private void addToDictionary(String typeId, String value, String dossierId, String fileId) { try { - log.debug("Adding entries for {} / {}", dossierId, fileId); + log.debug("Adding entries to {} for {} / {}", typeId, dossierId, fileId); dictionaryController.addEntries(typeId, List.of(value), false, false); fileStatusService.setStatusReprocess(dossierId, fileId, 2); @@ -666,7 +660,7 @@ public class ManualRedactionService { private void removeFromDictionary(String typeId, String value, String dossierId, String fileId) { try { - log.debug("Deleting entries for {} / {}", dossierId, fileId); + log.debug("Deleting entries to {} for {} / {}", typeId, dossierId, fileId); dictionaryController.deleteEntries(typeId, List.of(value)); fileStatusService.setStatusReprocess(dossierId, fileId, 2); } catch (FeignException e) {