Pull request #273: RED-3505 - Show files and dossiers in a combined trash

Merge in RED/persistence-service from feature/RED-3505 to master

* commit '5c46e819de79293d223ab7833d998fa0c465f69d':
  RED-3505 - Show files and dossiers in a combined trash
This commit is contained in:
Corina Olariu 2022-03-08 17:11:24 +01:00 committed by Timo Bejan
commit 2b29fcafa1
7 changed files with 86 additions and 1 deletions

View File

@ -47,6 +47,11 @@ public interface StatusResource {
@GetMapping(value = STATUS_PATH + DELETED_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
List<FileModel> getSoftDeletedDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId);
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = STATUS_PATH + DELETED_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
List<FileModel> getSoftDeletedForDossierList(@RequestBody List<String> dossierIds);
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = STATUS_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -231,6 +231,11 @@ public class FileStatusPersistenceService {
.collect(Collectors.toList());
}
public List<FileEntity> getSoftDeletedFiles(List<String> dossierIds) {
return fileRepository.getSoftDeletedFiles(dossierIds);
}
@Transactional
public void hardDelete(String fileId) {

View File

@ -153,6 +153,9 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@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<FileEntity> getSoftDeletedFiles(List<String> dossierIds);
}

View File

@ -58,6 +58,10 @@ public class FileStatusController implements StatusResource {
.sorted((f11, f21) -> f21.getDeleted().compareTo(f11.getDeleted())).collect(Collectors.toList());
}
public List<FileModel> getSoftDeletedForDossierList(@RequestBody List<String> dossierIds) {
return fileStatusService.getSoftDeletedForDossierList(dossierIds);
}
@Override
public FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId,

View File

@ -91,6 +91,13 @@ public class FileStatusService {
return reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convertedList);
}
public List<FileModel> getSoftDeletedForDossierList(List<String> 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) {

View File

@ -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<String>();
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<String> dossierTemplateIds = new HashSet<>();
dossierTemplateIds.add(dossier.getDossierTemplateId());
dossierTemplateIds.add(dossierTemplate2.getId());
dossierTemplateIds.add(dossierTemplate3.getId());
dossierTemplateIds.add(dossierTemplate4.getId());
dossierTemplateIds.add(dossierTemplate5.getId());
List<DossierTemplateStats> 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<String>();
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();
}

View File

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