Pull request #184: Fixed issue with reprocess and dossier_redaction

Merge in RED/persistence-service from merge-72b23e067e7 to master

* commit '8f07fe86bc661933dd8afaf3ae8892b07e541db9':
  Fixed issue with reprocess and dossier_redaction
This commit is contained in:
Timo Bejan 2022-01-17 13:30:52 +01:00
commit d4e26a788e
5 changed files with 33 additions and 26 deletions

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -55,6 +55,11 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
"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")

View File

@ -26,8 +26,9 @@ public interface ManualRedactionRepository extends JpaRepository<ManualRedaction
@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);
" m.addToDictionary = :isAddOrRemoveFromDictionary, m.addToDossierDictionary = :isAddOrRemoveFromDossierDictionary where m.id = :id")
void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary,
boolean isAddOrRemoveFromDossierDictionary);
@Query("select m from ManualRedactionEntryEntity m where m.id = :id and m.softDeletedTime is null")
Optional<ManualRedactionEntryEntity> findAddRedaction(AnnotationEntityId id);

View File

@ -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) {