diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java index a40dd38b3..611ab21cf 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/StatusResource.java @@ -47,6 +47,11 @@ public interface StatusResource { @GetMapping(value = STATUS_PATH + DELETED_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE) List getSoftDeletedDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId); + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = STATUS_PATH + DELETED_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + List getSoftDeletedForDossierList(@RequestBody List dossierIds); + @ResponseBody @ResponseStatus(value = HttpStatus.OK) @GetMapping(value = STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) 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 bcdd634f2..556198847 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 @@ -231,6 +231,11 @@ public class FileStatusPersistenceService { .collect(Collectors.toList()); } + public List getSoftDeletedFiles(List dossierIds) { + + return fileRepository.getSoftDeletedFiles(dossierIds); + } + @Transactional public void hardDelete(String 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 95ce76e20..9bc60f52d 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 @@ -153,6 +153,9 @@ public interface FileRepository extends JpaRepository { @Query("update FileEntity f set f.lastFileAttributeChange = :date, f.lastUpdated = :date") void updateLastAttributeChangeDate(OffsetDateTime date); + @Query("select f from FileEntity f where f.deleted is not null and f.hardDeletedTime is null and f.dossierId in :dossierIds") + List getSoftDeletedFiles(List dossierIds); + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java index 5ac3b0546..e2447d186 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileStatusController.java @@ -58,6 +58,10 @@ public class FileStatusController implements StatusResource { .sorted((f11, f21) -> f21.getDeleted().compareTo(f11.getDeleted())).collect(Collectors.toList()); } + public List getSoftDeletedForDossierList(@RequestBody List dossierIds) { + return fileStatusService.getSoftDeletedForDossierList(dossierIds); + } + @Override public FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, 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 80d3d0680..d1c0c29b8 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 @@ -91,6 +91,13 @@ public class FileStatusService { return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList); } + public List getSoftDeletedForDossierList(List dossierIds) { + var fileEntities = fileStatusPersistenceService.getSoftDeletedFiles(dossierIds); + var convertedList = convert(fileEntities, FileModel.class, new FileModelMapper()); + return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList); +// return convertedList; + } + @Transactional public FileModel getStatus(String fileId) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java index 2fd07519f..fd4aa6927 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -114,7 +115,7 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe .dossierId(null) .build()); - assertThat(addedType).isNotNull(); + assertThat(addedType3).isNotNull(); var entries3 = new ArrayList(); entries3.add("entry1"); entries3.add("entry2"); @@ -125,11 +126,25 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe var dossierTemplate4 = provideTestTemplate("dossierTemp4"); + var dossierTemplate5 = provideTestTemplate("dossierTemp5"); + + var addedType5 = dictionaryClient.addType(Type.builder() + .type("type dossier5") + .label("5") + .hexColor("#fcba03") + .rank(100) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossierTemplate5.getId()) + .build()); + assertThat(addedType5).isNotNull(); + Set dossierTemplateIds = new HashSet<>(); dossierTemplateIds.add(dossier.getDossierTemplateId()); dossierTemplateIds.add(dossierTemplate2.getId()); dossierTemplateIds.add(dossierTemplate3.getId()); dossierTemplateIds.add(dossierTemplate4.getId()); + dossierTemplateIds.add(dossierTemplate5.getId()); List dossierTemplateStatsList = dossierTemplateStatsClient.getDossierTemplateStats(dossierTemplateIds); assertThat(dossierTemplateStatsList.size()).isEqualTo(dossierTemplateIds.size()); @@ -159,6 +174,23 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe dictionarySummaryList = dossierTemplateStats2.getDictionarySummaryList(); assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().get().getEntriesCount()).isEqualTo(entries2.size() - entries22.size()); + // delete all entries, stats should be updated + var entries23 = new ArrayList(); + entries23.add(entries2.get(0)); + entries23.add(entries2.get(1)); + + dictionaryClient.deleteEntries(addedType2.getTypeId(), entries23, DictionaryEntryType.ENTRY); + var entries23loaded = dictionaryClient.getEntriesForType(addedType2.getTypeId(), DictionaryEntryType.ENTRY); + assertThat(entries23loaded.stream().filter(e -> !e.isDeleted()).collect(Collectors.toList())).isEmpty(); + + dossierTemplateStatsList = dossierTemplateStatsClient.getDossierTemplateStats(dossierTemplateIds); + + assertThat(dossierTemplateStatsList.size()).isEqualTo(dossierTemplateIds.size()); + DossierTemplateStats dossierTemplateStats23 = dossierTemplateStatsList.stream().filter(d -> d.getDossierTemplateId().equals(dossierTemplate2.getId())).findAny().get(); + + dictionarySummaryList = dossierTemplateStats23.getDictionarySummaryList(); + assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().isEmpty()).isTrue(); + } 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 715e6512b..be2d7a54f 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 @@ -17,6 +17,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import com.iqser.red.service.redaction.v1.model.AnalyzeResult; import com.iqser.red.service.redaction.v1.model.MessageType; +import java.util.List; + public class FileProcessingTest extends AbstractPersistenceServerServiceTest { @Autowired @@ -160,4 +162,31 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest { } + + @Test + public void testGetSoftDeletedForDossierList() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() + .manualRedactions(new ManualRedactions()) + .messageType(MessageType.ANALYSE) + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()) + .build()); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSED); + + // 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(); + + var fileList = fileClient.getSoftDeletedForDossierList(List.of(dossier.getId())); + assertThat(fileList.size()).isEqualTo(1); + + } }