diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java index 0263da393..5c4f17ef5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java @@ -56,14 +56,15 @@ public class DigitalSignatureService { @Transactional public void updateDigitalSignature(DigitalSignatureEntity digitalSignatureModel) { - digitalSignatureRepository.findById(DigitalSignatureEntity.ID).ifPresentOrElse(digitalSignature -> { - digitalSignature.setCertificateName(digitalSignatureModel.getCertificateName()); - digitalSignature.setLocation(digitalSignatureModel.getLocation()); - digitalSignature.setContactInfo(digitalSignatureModel.getContactInfo()); - digitalSignature.setReason(digitalSignatureModel.getReason()); - }, () -> { + int updateCount = digitalSignatureRepository.updateDigitalSignature(DigitalSignatureEntity.ID, + digitalSignatureModel.getReason(), + digitalSignatureModel.getLocation(), + digitalSignatureModel.getContactInfo(), + digitalSignatureModel.getCertificateName()); + if (updateCount == 0) { throw new NotFoundException("Digital Signature Not found"); - }); + } + } 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 437a5affc..c2ec6dbde 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 @@ -77,36 +77,30 @@ public class AddRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + manualRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + manualRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - mre.setStatus(annotationStatus); - }); - - + manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + annotationStatus); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { - manualRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - mre.setStatus(annotationStatus); - mre.setAddToDictionary(isAddOrRemoveFromDictionary); - }); - + manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), + OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), + annotationStatus, + isAddOrRemoveFromDictionary); } - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java index 1a9e92cc7..20f5081af 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/CommentPersistenceService.java @@ -55,16 +55,12 @@ public class CommentPersistenceService { @Transactional public void softDelete(long commentId, OffsetDateTime softDeletedTime) { - commentRepository.findById(commentId).ifPresent(mre -> { - mre.setSoftDeletedTime(softDeletedTime); - }); + commentRepository.updateSoftDelete(commentId, softDeletedTime); } @Transactional public void undelete(long commentId) { - commentRepository.findById(commentId).ifPresent(mre -> { - mre.setSoftDeletedTime(null); - }); + commentRepository.updateSoftDelete(commentId, null); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java index 6242791fc..bce14765b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java @@ -34,7 +34,7 @@ public class DossierAttributePersistenceService { @Transactional public void updateDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) { - dossierAttributeRepository.findById(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId)).ifPresent(dossierAttribute -> dossierAttribute.setValue(dossierAttributeValue)); + dossierAttributeRepository.updateDossierAttribute(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId), dossierAttributeValue); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 1c877d535..42664303f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -16,9 +16,7 @@ import javax.transaction.Transactional; import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.List; -import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; @@ -66,14 +64,6 @@ public class DossierPersistenceService { } - @Transactional - public void updateReportTemplateIds(String dossierId, Set reportTemplateIds) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setReportTemplates(reportTemplateRepository.findAllById(reportTemplateIds)); - }); - } - - public DossierEntity getAndValidateDossier(String dossierId) { // check whether the dossierId exists and is not deleted var dossier = findByDossierId(dossierId); @@ -95,44 +85,24 @@ public class DossierPersistenceService { } - public List findSoftDeletedDossiers() { - - return findAllDossiers().stream().filter(d -> d.getSoftDeletedTime() != null).collect(Collectors.toList()); - - } - - @Transactional public void hardDelete(String dossierId) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - dossier.setStatus(DossierStatus.DELETED); - dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : dossier.getSoftDeletedTime()); - }); + dossierRepository.hardDelete(dossierId, DossierStatus.DELETED, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @Transactional public void undelete(String dossierId) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - if (dossier.getHardDeletedTime() != null) { - throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); - } - dossier.setStatus(DossierStatus.ACTIVE); - dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - dossier.setSoftDeletedTime(null); - }); + int updateCount = dossierRepository.undelete(dossierId, DossierStatus.ACTIVE, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + if (updateCount == 0) { + throw new BadRequestException("Cannot undelete a hard-deleted dossier!"); + } } @Transactional public void markDossierAsDeleted(String dossierId, OffsetDateTime softDeletedTime) { - dossierRepository.findById(dossierId).ifPresent(dossier -> { - dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - dossier.setStatus(DossierStatus.DELETED); - dossier.setSoftDeletedTime(softDeletedTime); - }); + dossierRepository.markDossierAsDeleted(dossierId, DossierStatus.DELETED, softDeletedTime, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } public boolean hasChangesSince(OffsetDateTime since) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index 27087ed9b..43aa5b59f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -45,26 +45,19 @@ public class DownloadStatusPersistenceService { @Transactional public void updateStatus(String storageId, DownloadStatusValue status) { - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> downloadStatus.setStatus(status)); + downloadStatusRepository.updateStatus(storageId, status); } @Transactional public void updateStatus(String storageId, DownloadStatusValue status, long fileSize) { - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> { - downloadStatus.setStatus(status); - downloadStatus.setFileSize(fileSize); - }); + downloadStatusRepository.updateStatus(storageId, status, fileSize); } @Transactional public void updateLastDownload(String storageId) { - - downloadStatusRepository.findById(storageId).ifPresent(downloadStatus -> { - downloadStatus.setLastDownload(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - }); - + downloadStatusRepository.updateLastDownload(storageId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } @@ -88,7 +81,6 @@ public class DownloadStatusPersistenceService { } - public List getStatus() { return downloadStatusRepository.findAll(); 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 03ccc41c7..f0f961bb1 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,16 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; -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; - -import javax.transaction.Transactional; - -import org.springframework.stereotype.Service; - 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; @@ -21,9 +10,17 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist 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; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +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.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -35,6 +32,7 @@ public class FileStatusPersistenceService { private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final DossierPersistenceService dossierService; + public void createStatus(String dossierId, String fileId, String filename, String uploader) { FileEntity file = new FileEntity(); @@ -58,6 +56,9 @@ public class FileStatusPersistenceService { int analysisVersion) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setNumberOfPages(numberOfPages); file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setDictionaryVersion(dictionaryVersion); @@ -66,7 +67,7 @@ public class FileStatusPersistenceService { file.setAnalysisDuration(duration); file.setDossierDictionaryVersion(dossierDictionaryVersion); file.setAnalysisVersion(analysisVersion); - file.setNumberOfAnalyses(file.getNumberOfAnalyses()+1); + file.setNumberOfAnalyses(file.getNumberOfAnalyses() + 1); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { @@ -77,8 +78,13 @@ public class FileStatusPersistenceService { @Transactional - public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { - fileRepository.updateFlags(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); + public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, + boolean hasSuggestions, boolean hasComments, boolean hasUpdates) { + + if (isFileDeleted(fileId)) { + return; + } + fileRepository.updateFlags(fileId, OffsetDateTime.now(), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates); } @@ -86,6 +92,9 @@ public class FileStatusPersistenceService { public void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, boolean approval) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setWorkflowStatus(workflowStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setApprovalDate(approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null); @@ -93,13 +102,16 @@ public class FileStatusPersistenceService { throw new NotFoundException("Unknown file=" + fileId); }); - } @Transactional public void updateProcessingStatus(String fileId, ProcessingStatus processingStatus) { + fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setProcessingStatus(processingStatus); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { @@ -107,10 +119,14 @@ public class FileStatusPersistenceService { }); } + @Transactional public void setUpdateStatusIndexingSuccessful(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setProcessingStatus(ProcessingStatus.PROCESSED); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -120,10 +136,14 @@ public class FileStatusPersistenceService { } + @Transactional public void updateLastOCRTime(String fileId, OffsetDateTime time) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastOCRTime(time); }, () -> { @@ -132,10 +152,14 @@ public class FileStatusPersistenceService { } + @Transactional public void updateHasComments(String fileId, boolean hasComments) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setHasAnnotationComments(hasComments); }, () -> { @@ -143,10 +167,14 @@ public class FileStatusPersistenceService { }); } + @Transactional public void updateLastManualRedaction(String fileId, OffsetDateTime date) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastManualRedaction(date); }, () -> { @@ -155,10 +183,15 @@ public class FileStatusPersistenceService { } + @Transactional - public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, boolean hasSuggestions) { + public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, + boolean hasSuggestions) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastManualRedaction(date); file.setHasSuggestions(hasSuggestions); @@ -168,12 +201,16 @@ public class FileStatusPersistenceService { } + @Transactional(value = Transactional.TxType.REQUIRES_NEW) public void setFileAttributes(String dossierId, String fileId, Map fileAttributes) { fileAttributesRepository.deleteByFileId(fileId); fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -184,10 +221,14 @@ public class FileStatusPersistenceService { } + @Transactional public void setExcludedPages(String fileId, Set excludedPages) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setExcludedPages(excludedPages); @@ -195,7 +236,6 @@ public class FileStatusPersistenceService { throw new NotFoundException("Unknown file=" + fileId); }); - } @@ -207,13 +247,17 @@ public class FileStatusPersistenceService { public List getStatusesForDossier(String dossierId) { + return fileRepository.findByDossierId(dossierId); } + public List getAllStatuses() { + return fileRepository.findAll(); } + @Transactional public void softDelete(String fileId, OffsetDateTime softDeletedTime) { @@ -225,14 +269,16 @@ public class FileStatusPersistenceService { throw new NotFoundException("Unknown file=" + fileId); }); - } + @Transactional public void hardDelete(String fileId) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { file.setProcessingStatus(ProcessingStatus.DELETED); + file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now() + .truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); @@ -244,6 +290,7 @@ public class FileStatusPersistenceService { } + @Transactional public void undelete(String fileId) { @@ -259,24 +306,33 @@ public class FileStatusPersistenceService { }); } + @Transactional public void setCurrentReviewer(String fileId, String currentReviewer, String lastReviewer) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setCurrentReviewer(currentReviewer); file.setLastReviewer(lastReviewer); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW); + file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED : WorkflowStatus.UNDER_REVIEW); + file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED : WorkflowStatus.UNDER_REVIEW); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); } + @Transactional public void toggleExclusion(String fileId, boolean excluded) { fileRepository.findById(fileId).ifPresentOrElse((file) -> { + if (isFileDeleted(file)) { + return; + } file.setExcluded(excluded); file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setLastProcessed(null); @@ -298,6 +354,7 @@ public class FileStatusPersistenceService { } + @Transactional public void overwriteFile(String fileId, String uploader, String filename) { @@ -330,7 +387,10 @@ public class FileStatusPersistenceService { }); } - private List convertFileAttributes(String dossierId, FileEntity file, Map fileAttributesMap) { + + private List convertFileAttributes(String dossierId, FileEntity file, + Map fileAttributesMap) { + var dossier = dossierService.getAndValidateDossier(dossierId); List configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId()); @@ -338,15 +398,38 @@ public class FileStatusPersistenceService { 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.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()); } + private boolean isFileDeleted(FileEntity file) { + + if (file == null || file.getDeleted() != null || file.getHardDeletedTime() != null || ProcessingStatus.DELETED.equals(file.getProcessingStatus())) { + return true; + } + return false; + } + + + private boolean isFileDeleted(String fileId) { + + AtomicBoolean isFileDeleted = new AtomicBoolean(false); + fileRepository.findById(fileId).ifPresentOrElse((file) -> { + isFileDeleted.set(isFileDeleted(file)); + }, () -> { + throw new NotFoundException("Unknown file=" + fileId); + }); + + return isFileDeleted.get(); + } + public boolean hasChangesSince(String dossierId, OffsetDateTime since) { - return fileRepository.existsByDossierIdAndLastUpdatedIsAfter(dossierId,since); + return fileRepository.existsByDossierIdAndLastUpdatedIsAfter(dossierId, since); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java index 58b00b2b5..2fbfb903b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ForceRedactionPersistenceService.java @@ -36,10 +36,8 @@ public class ForceRedactionPersistenceService { @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); + forceRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } @@ -50,12 +48,12 @@ public class ForceRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + forceRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - forceRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + forceRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } public ManualForceRedactionEntity findForceRedaction(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java index e10cda634..88b6af662 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ImageRecategorizationPersistenceService.java @@ -35,11 +35,8 @@ public class ImageRecategorizationPersistenceService { @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - + imageRecategorizationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } @Transactional @@ -50,12 +47,12 @@ public class ImageRecategorizationPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + imageRecategorizationRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - imageRecategorizationRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + imageRecategorizationRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } public ManualImageRecategorizationEntity findRecategorization(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java index 8618d3bfa..dfab30e70 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisChangePersistenceService.java @@ -41,24 +41,20 @@ public class LegalBasisChangePersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + legalBasisChangeRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + legalBasisChangeRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - legalBasisChangeRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - - + legalBasisChangeRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, + OffsetDateTime.now()); } public ManualLegalBasisChangeEntity findLegalBasisChange(String fileId, String annotationId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java index a53edee9a..775071347 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java @@ -47,16 +47,18 @@ public class NotificationPersistenceService { @Transactional public void setReadDate(String userId, long notificationId, OffsetDateTime readDate) { - notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setReadDate(readDate), () -> { + int countUpdate = notificationRepository.setReadDate(userId, notificationId, readDate); + if (countUpdate == 0) { throw new NotFoundException("Notification not found"); - }); + } } @Transactional public void softDelete(String userId, long notificationId) { - notificationRepository.findByIdAndUserId(notificationId, userId).ifPresentOrElse(notification -> notification.setSoftDeleted(OffsetDateTime.now()), () -> { + int countUpdate = notificationRepository.softDelete(userId, notificationId, OffsetDateTime.now()); + if (countUpdate == 0) { throw new NotFoundException("Notification not found"); - }); + } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java index 306b683aa..420178622 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/RemoveRedactionPersistenceService.java @@ -55,33 +55,24 @@ public class RemoveRedactionPersistenceService { @Transactional public void softDelete(String fileId, String annotationId, OffsetDateTime softDeleteTime) { - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(softDeleteTime)); + + removeRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), softDeleteTime); } @Transactional public void undelete(String fileId, String annotationId) { - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> mre.setSoftDeletedTime(null)); + removeRedactionRepository.updateSoftDelete(new AnnotationEntityId(annotationId, fileId), null); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) { - - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - }); - + removeRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, OffsetDateTime.now()); } @Transactional public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary) { - - removeRedactionRepository.findById(new AnnotationEntityId(annotationId, fileId)).ifPresent(mre -> { - mre.setProcessedDate(OffsetDateTime.now()); - mre.setStatus(annotationStatus); - mre.setRemoveFromDictionary(isAddOrRemoveFromDictionary); - }); - + removeRedactionRepository.updateStatusAndRemoveFromDictionary(new AnnotationEntityId(annotationId, fileId), + annotationStatus, OffsetDateTime.now(), isAddOrRemoveFromDictionary); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java index 649971d09..71104ee76 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/CommentRepository.java @@ -2,7 +2,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface CommentRepository extends JpaRepository { @@ -12,4 +15,8 @@ public interface CommentRepository extends JpaRepository { List findByFileId(String fileId); boolean existsByFileIdAndSoftDeletedTimeIsNull(String fileId); + + @Modifying + @Query("update CommentEntity c set c.softDeletedTime = :softDeleteTime where c.id = :id") + int updateSoftDelete(long id, OffsetDateTime softDeleteTime); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java index 58fab317e..3243618ee 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DigitalSignatureRepository.java @@ -2,6 +2,17 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DigitalSignatureEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import javax.persistence.Column; public interface DigitalSignatureRepository extends JpaRepository { + + + @Modifying + @Query("update DigitalSignatureEntity e set e.reason = :reason, e.location = :location, e.contactInfo = :contactInfo, e.certificateName= :certificateName " + + "where e.id = :id") + int updateDigitalSignature(String id, String reason, String location, String contactInfo, String certificateName); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java index ce0a45043..8658bb803 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java @@ -19,4 +19,8 @@ public interface DossierAttributeRepository extends JpaRepository { + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.hardDeletedTime = :hardDeletedTime, d.lastUpdated = :lastUpdated," + + " d.softDeletedTime = " + + "case " + + "when d.softDeletedTime is null then :hardDeletedTime " + + "when d.softDeletedTime is not null then d.softDeletedTime " + + "end " + + "where d.id = :dossierId") + void hardDelete(String dossierId, DossierStatus dossierStatus, OffsetDateTime hardDeletedTime, OffsetDateTime lastUpdated); + + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = null, d.lastUpdated = :lastUpdated where d.id = :dossierId" + + " and d.hardDeletedTime is null") + int undelete(String dossierId, DossierStatus dossierStatus, OffsetDateTime lastUpdated); + + @Modifying + @Query("update DossierEntity d set d.status = :dossierStatus, d.softDeletedTime = :softDeletedTime, d.lastUpdated = :lastUpdated where d.id = :dossierId") + void markDossierAsDeleted(String dossierId, DossierStatus dossierStatus, OffsetDateTime softDeletedTime, OffsetDateTime lastUpdated); + boolean existsByLastUpdatedIsAfter(OffsetDateTime since); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java index 596f24505..f1e896afc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java @@ -1,10 +1,26 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; +import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface DownloadStatusRepository extends JpaRepository { List findAllByUserId(String userId); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.status = :status where ds.storageId = :storageId") + void updateStatus(String storageId, DownloadStatusValue status); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.status = :status, ds.fileSize = :fileSize where ds.storageId = :storageId") + void updateStatus(String storageId, DownloadStatusValue status, long fileSize); + + @Modifying + @Query("update DownloadStatusEntity ds set ds.lastDownload = :lastDownload where ds.storageId = :storageId") + void updateLastDownload(String storageId, OffsetDateTime lastDownload); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java index 2175caaf7..16075852e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ForceRedactionRepository.java @@ -2,11 +2,26 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualForceRedactionEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ForceRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualForceRedactionEntity mfr set mfr.status = :annotationStatus, mfr.processedDate = :processedDate " + + "where mfr.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualForceRedactionEntity mfr set mfr.softDeletedTime = :softDeletedTime " + + "where mfr.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java index 89700b921..841177aea 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ImageRecategorizationRepository.java @@ -2,10 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualImageRecategorizationEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ImageRecategorizationRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualImageRecategorizationEntity mir set mir.status = :annotationStatus, mir.processedDate = :processedDate " + + "where mir.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualImageRecategorizationEntity mir set mir.softDeletedTime = :softDeletedTime " + + "where mir.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java index 08810acec..cb40465c1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/LegalBasisChangeRepository.java @@ -2,11 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface LegalBasisChangeRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualLegalBasisChangeEntity mlbc set mlbc.status = :annotationStatus, mlbc.processedDate = :processedDate " + + "where mlbc.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update ManualLegalBasisChangeEntity mlbc set mlbc.softDeletedTime = :softDeletedTime " + + "where mlbc.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); } 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 e694a18f6..146dab55e 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 @@ -2,11 +2,29 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface ManualRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update ManualRedactionEntryEntity m set m.softDeletedTime = :softDeleteTime where m.id = :id") + void updateSoftDelete(AnnotationEntityId id, OffsetDateTime softDeleteTime); + + @Modifying + @Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate, m.status = :annotationStatus" + + " where m.id = :id") + void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus); + + @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); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java index 4da9d32eb..750f6a7fe 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import java.time.OffsetDateTime; @@ -21,4 +22,16 @@ public interface NotificationRepository extends JpaRepository findNotSeenForUser(String userId); Optional findByIdAndUserId(long notificationId, String userId); + + @Modifying + @Query("update NotificationEntity n set n.seenDate = :seenDate where n.id = :notificationId and n.userId = :userId") + int setSeenDate(String userId, long notificationId, OffsetDateTime seenDate); + + @Modifying + @Query("update NotificationEntity n set n.readDate = :readDate where n.id = :notificationId and n.userId = :userId") + int setReadDate(String userId, long notificationId, OffsetDateTime readDate); + + @Modifying + @Query("update NotificationEntity n set n.softDeleted = :softDeleted where n.id = :notificationId and n.userId = :userId") + int softDelete(String userId, long notificationId, OffsetDateTime softDeleted); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java index 10ad17407..47919b373 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/RemoveRedactionRepository.java @@ -2,11 +2,32 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.IdRemovalEntity; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import java.time.OffsetDateTime; import java.util.List; public interface RemoveRedactionRepository extends JpaRepository { List findByIdFileId(String fileId); + + @Modifying + @Query("update IdRemovalEntity idr set idr.softDeletedTime = :softDeletedTime " + + "where idr.id = :annotationEntityId") + void updateSoftDelete(AnnotationEntityId annotationEntityId, OffsetDateTime softDeletedTime); + + @Modifying + @Query("update IdRemovalEntity idr set idr.status = :annotationStatus, idr.processedDate = :processedDate " + + "where idr.id = :annotationEntityId") + void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate); + + @Modifying + @Query("update IdRemovalEntity idr set idr.status = :annotationStatus, idr.processedDate = :processedDate, " + + "idr.removeFromDictionary = :removeFromDictionary where idr.id = :annotationEntityId") + void updateStatusAndRemoveFromDictionary(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate, + boolean removeFromDictionary); + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java index 60b77b8a5..bd05a2b41 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java @@ -1,17 +1,19 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient; +import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.redaction.v1.model.AnalyzeResult; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import static org.assertj.core.api.Assertions.assertThat; public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @@ -27,8 +29,13 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @Autowired private FileClient fileClient; + @Autowired + private UploadClient uploadClient; + + @Test public void testFileProcessing() { + var dossier = dossierTesterAndProvider.provideTestDossier(); var file = fileTesterAndProvider.testAndProvideFile(dossier); @@ -39,42 +46,85 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() .analysisVersion(100) .fileId(file.getId()) - .dossierId(dossier.getId()).build()); + .dossierId(dossier.getId()) + .build()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); - fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING); assertThat(loadedFile.getLastOCRTime()).isNotNull(); - fileProcessingClient.indexing(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.INDEXING); assertThat(loadedFile.getLastIndexed()).isNull(); - fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); - fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getLastIndexed()).isNotNull(); } + + + @Test + public void testFileProcessingAfterDeletion() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + assertThat(file.getLastOCRTime()).isNull(); + + fileProcessingClient.analysisFailed(dossier.getId(), file.getId()); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR); + + fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); + assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); + + // Delete file + uploadClient.deleteFile(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + assertThat(loadedFile.getDeleted()).isNotNull(); + + fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexing(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.DELETED); + + } + }