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 833ee1cda..5631f5ab5 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 @@ -121,7 +121,13 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null," + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = :hasHighlights " + "where f.id = :fileId") + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + + "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null, " + + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = :hasHighlights, f.excludedFromAutomaticAnalysis = false " + "where f.id = :fileId") int overwriteFile(String fileId, String filename, String uploader, ProcessingStatus processingStatus, WorkflowStatus workflowStatus, OffsetDateTime lastUploaded, OffsetDateTime lastUpdated, boolean hasHighlights); 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 d6a8a625d..03b28fa55 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 @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import javax.transaction.Transactional; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService; import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; @@ -71,6 +72,7 @@ public class FileStatusService { private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final FileManagementServiceSettings settings; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; + private final ViewedPagesPersistenceService viewedPagesPersistenceService; @Transactional public List getAllRelevantStatusesForReanalysisScheduler() { @@ -451,15 +453,17 @@ public class FileStatusService { } - @Transactional + public void overwriteFile(String dossierId, String fileId, String uploader, String filename, boolean hasHighlights) { fileStatusPersistenceService.overwriteFile(fileId, uploader, filename, hasHighlights); wipeFileData(dossierId, fileId); + viewedPagesPersistenceService.deleteForFile(fileId); setStatusFullReprocess(dossierId, fileId, false, true); } + @Transactional public void wipeFileData(String dossierId, String fileId) { OffsetDateTime now = OffsetDateTime.now(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index b9d7e0188..d4738e3d0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -7,16 +7,13 @@ import java.time.OffsetDateTime; import java.util.Collections; import java.util.List; -import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.*; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Sets; -import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; -import com.iqser.red.service.peristence.v1.server.integration.client.ManualRedactionClient; -import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; @@ -60,6 +57,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierClient dossierClient; + @Autowired + private ViewedPagesClient viewedPagesClient; + @Test public void testEmptyFile() { @@ -100,6 +100,37 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(loadedFile.getFilename()).isEqualTo(filename); } + @Test + public void testFileOverwrite() { + + var filename = "test.pdf"; + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier, filename); + + assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getFilename()).isEqualTo(filename); + + fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); + fileClient.toggleAutomaticAnalysis(dossier.getId(), file.getId(), true); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isTrue(); + + viewedPagesClient.addPage(file.getId(), "1", 1); + var viewedPages = viewedPagesClient.getViewedPages(file.getId(), "1"); + + assertThat(viewedPages.size()).isEqualTo(1); + + BinaryFileRequest upload = new BinaryFileRequest("test".getBytes(StandardCharsets.UTF_8), filename, dossier.getId(), "1"); + JSONPrimitive uploadResult = uploadClient.upload(upload); + + loadedFile = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue()); + assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isFalse(); + + viewedPages = viewedPagesClient.getViewedPages(file.getId(), "1"); + assertThat(viewedPages.size()).isEqualTo(0); + } @Test public void testFile() {