RED-3011 - DossierTemplate Stats

- modify query to include dossier templates without dictionaries and to include only the results with not deleted entries and not dossier specific
- add junit test
This commit is contained in:
devplant 2021-12-20 13:36:07 +02:00
parent d049bb5e32
commit a22382d415
3 changed files with 36 additions and 8 deletions

View File

@ -38,9 +38,12 @@ public interface TypeRepository extends JpaRepository<TypeEntity, String> {
@Query("select coalesce(sum(t.version),0) from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.dossierId is null")
long getVersionForDossierTemplateId(String dossierTemplateId);
@Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionarySummaryResponse(t.dossierTemplateId, t.id, t.type, t.label, count(e)) " +
"from TypeEntity t left join DictionaryEntryEntity e on e.type.id = t.id " +
"group by t.dossierTemplateId, t.id, t.type, t.label having t.dossierTemplateId in :dossierTemplateIds")
@Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionarySummaryResponse(dt.id, t.id, t.type, t.label, count(e)) " +
"from DossierTemplateEntity dt " +
"left join TypeEntity t on t.dossierTemplateId = dt.id " +
"left join DictionaryEntryEntity e on e.type.id = t.id " +
"where dt.id in :dossierTemplateIds and t.dossierId is null and (e.id is null or e.deleted = false) " +
"group by dt.id, t.id, t.type, t.label ")
List<DictionarySummaryResponse> findDictionarySummaryList(Set<String> dossierTemplateIds);
}

View File

@ -30,7 +30,9 @@ public class DossierTemplateStatsService {
Collectors.mapping(this::getDossierTemplateStats, Collectors.toList())));
List<DossierTemplateStats> dossierTemplateStatsList = dictionarySummaryMap.entrySet().stream()
.map(e ->
new DossierTemplateStats(e.getKey(), e.getValue().size(), e.getValue()))
(e.getValue().size() == 1 && e.getValue().get(0).getId() == null)?
new DossierTemplateStats(e.getKey(), 0, new ArrayList<>()):
new DossierTemplateStats(e.getKey(), e.getValue().size(), e.getValue()))
.collect(Collectors.toList());
return dossierTemplateStatsList;

View File

@ -107,19 +107,42 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe
entryList = dictionaryClient.getEntriesForType(addedType3.getTypeId());
assertThat(entryList.size()).isEqualTo(entries3.size());
var dossierTemplate3 = provideTestTemplate("dossierTemp3");
Set<String> dossierTemplateIds = new HashSet<>();
dossierTemplateIds.add(dossier.getDossierTemplateId());
dossierTemplateIds.add(dossierTemplate2.getId());
dossierTemplateIds.add(dossierTemplate3.getId());
List<DossierTemplateStats> dossierTemplateStatsList = dossierTemplateStatsClient.getDossierTemplateStats(dossierTemplateIds);
DossierTemplateStats dossierTemplateStats = dossierTemplateStatsList.stream().filter(d -> d.getDossierTemplateId().equals(dossier.getDossierTemplateId())).findAny().get();
assertThat(dossierTemplateStatsList.size()).isEqualTo(dossierTemplateIds.size());
DossierTemplateStats dossierTemplateStats1 = dossierTemplateStatsList.stream().filter(d -> d.getDossierTemplateId().equals(dossier.getDossierTemplateId())).findAny().get();
assertThat(dossierTemplateStats.getDossierTemplateId()).isEqualTo(dossier.getDossierTemplateId());
assertThat(dossierTemplateStats.getNumberOfDictionaries()).isEqualTo(2);
List<DictionarySummary> dictionarySummaryList = dossierTemplateStats.getDictionarySummaryList();
assertThat(dossierTemplateStats1.getDossierTemplateId()).isEqualTo(dossier.getDossierTemplateId());
assertThat(dossierTemplateStats1.getNumberOfDictionaries()).isEqualTo(2);
List<DictionarySummary> dictionarySummaryList = dossierTemplateStats1.getDictionarySummaryList();
assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_1)).findAny().get().getEntriesCount()).isEqualTo(entries1.size());
assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().get().getEntriesCount()).isEqualTo(entries2.size());
// dossier template with no type
DossierTemplateStats dossierTemplateStats3 = dossierTemplateStatsList.stream().filter(d -> d.getDossierTemplateId().equals(dossierTemplate3.getId())).findAny().get();
assertThat(dossierTemplateStats3.getDossierTemplateId()).isEqualTo(dossierTemplate3.getId());
assertThat(dossierTemplateStats3.getNumberOfDictionaries()).isZero();
// delete some entries, stats should be updated
var entries22 = new ArrayList<String>();
entries22.add(entries2.get(2));
dictionaryClient.deleteEntries(addedType2.getTypeId(), entries22);
dossierTemplateStatsList = dossierTemplateStatsClient.getDossierTemplateStats(dossierTemplateIds);
assertThat(dossierTemplateStatsList.size()).isEqualTo(dossierTemplateIds.size());
DossierTemplateStats dossierTemplateStats2 = dossierTemplateStatsList.stream().filter(d -> d.getDossierTemplateId().equals(dossier.getDossierTemplateId())).findAny().get();
dictionarySummaryList = dossierTemplateStats2.getDictionarySummaryList();
assertThat(dictionarySummaryList.stream().filter(d -> d.getType().equals(TYPE_ID_2)).findAny().get().getEntriesCount()).isEqualTo(entries2.size() - entries22.size());
}
public DossierTemplate provideTestTemplate(String dossierTemplateName) {