Pull request #422: RED-4145-Dossier template stats updates

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

* commit '1ae5676d640570e1098a499a26864a5935df5a60':
  RED-4145-Dossier template stats updates
This commit is contained in:
Corina Olariu 2022-06-02 18:44:53 +02:00 committed by Timo Bejan
commit a406e4b434
3 changed files with 33 additions and 6 deletions

View File

@ -18,6 +18,7 @@ public class DossierTemplateStats {
private String dossierTemplateId;
private String name;
private DossierTemplateStatus dossierTemplateStatus;
private int numberOfDeletedDossiers;
private int numberOfActiveDossiers;

View File

@ -2,11 +2,13 @@ package com.iqser.red.service.peristence.v1.server.service;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateDictionaryStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionarySummary;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionarySummaryResponse;
import lombok.RequiredArgsConstructor;
@ -23,6 +25,8 @@ public class DossierTemplateStatsService {
private final DictionaryPersistenceService dictionaryPersistenceService;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
private final DossierTemplateRepository dossierTemplateRepository;
private final FileRepository fileRepository;
@ -33,19 +37,24 @@ public class DossierTemplateStatsService {
public DossierTemplateStats getDossierTemplateStats(String dossierTemplateId) {
var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException("Dossier Template with id: " + dossierTemplateId + " not found."));
return getDossierTemplateStats(dossierTemplateId, dossierTemplate.getName());
dossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(dossierTemplate));
return getDossierTemplateStats(dossierTemplateId, dossierTemplate.getName(), dossierTemplate.getDossierTemplateStatus());
}
public List<DossierTemplateStats> getDossierTemplateStats() {
var allUnDeletedTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse();
allUnDeletedTemplates.forEach(dt -> dt.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(dt)));
allUnDeletedTemplates.stream().filter(dt -> DossierTemplateStatus.INCOMPLETE.equals(dt.getDossierTemplateStatus())).collect(Collectors.toList());
final List<DossierTemplateStats> dossierTemplateStatsList = Collections.synchronizedList(new ArrayList<>());
allUnDeletedTemplates.parallelStream().forEach(dt -> dossierTemplateStatsList.add(getDossierTemplateStats(dt.getId(), dt.getName())));
allUnDeletedTemplates.parallelStream().forEach(dt -> dossierTemplateStatsList.add(getDossierTemplateStats(dt.getId(), dt.getName(), dt.getDossierTemplateStatus())));
dossierTemplateStatsList.sort(Comparator.comparing(DossierTemplateStats::getName));
List<DossierTemplateStats> result = dossierTemplateStatsList.stream().filter(stat -> !(DossierTemplateStatus.INACTIVE.equals(stat.getDossierTemplateStatus())
&& stat.getNumberOfActiveDossiers() == 0 && stat.getNumberOfArchivedDossiers() == 0)).collect(Collectors.toList());
result.sort(Comparator.comparing(DossierTemplateStats::getName));
return dossierTemplateStatsList;
return result;
}
public List<DossierTemplateDictionaryStats> getDossierTemplateStats(Set<String> dossierTemplateIds) {
@ -73,12 +82,13 @@ public class DossierTemplateStatsService {
return new DictionarySummary(response.getId(), response.getType(), response.getName(), response.getEntriesCount());
}
private DossierTemplateStats getDossierTemplateStats(String dossierTemplateId, String dossierTemplateName) {
private DossierTemplateStats getDossierTemplateStats(String dossierTemplateId, String dossierTemplateName, DossierTemplateStatus dossierTemplateStatus) {
DossierTemplateStats dts = new DossierTemplateStats();
dts.setDossierTemplateId(dossierTemplateId);
dts.setName(dossierTemplateName);
dts.setDossierTemplateStatus(dossierTemplateStatus);
dts.setNumberOfArchivedDossiers(dossierRepository.countArchived(dossierTemplateId));
dts.setNumberOfActiveDossiers(dossierRepository.countActive(dossierTemplateId));
dts.setNumberOfDeletedDossiers(dossierRepository.countSofDeleted(dossierTemplateId));

View File

@ -283,6 +283,22 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe
}
}
var template = dossierTemplateTesterAndProvider.provideTestTemplate("test template inactive: ");
var status = dossierStatusClient.createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest.builder()
.dossierTemplateId(template.getId()).name("test").rank(100).build());
var dossier = dossierTesterAndProvider.provideTestDossierQuick(template, "test dossier: ", status);
dossierClient.delete(dossier.getId());
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setDossierTemplateId(template.getId());
cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL));
cru.setName(template.getName());
cru.setValidTo(OffsetDateTime.now().minusHours(1).truncatedTo(ChronoUnit.MILLIS));
DossierTemplate result = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
long t1 = System.currentTimeMillis();
var stats = dossierTemplateStatsClient.getDossierTemplateStats();
assertThat(stats.size()).isEqualTo(2);