namespace MaBibli.Shared.Dtos; /// Calcul des compteurs récursifs de l'arbre des séries. public static class TotauxSeries { public static IReadOnlyDictionary Calculer( IReadOnlyList series) { var parentees = series .Where(s => s.SerieParenteId is not null) .GroupBy(s => s.SerieParenteId!.Value) .ToDictionary(g => g.Key, g => g.ToList()); var resultat = new Dictionary(); var enCours = new HashSet(); (int Possedes, int Total) CalculerUne(SerieDto serie) { if (resultat.TryGetValue(serie.Id, out var connu)) { return connu; } if (!enCours.Add(serie.Id)) { return (0, 0); } var total = (serie.NombrePossedes, serie.Elements.Count); if (parentees.TryGetValue(serie.Id, out var filles)) { foreach (var fille in filles) { var sousTotal = CalculerUne(fille); total = (total.Item1 + sousTotal.Possedes, total.Item2 + sousTotal.Total); } } enCours.Remove(serie.Id); resultat[serie.Id] = total; return total; } foreach (var serie in series) { CalculerUne(serie); } return resultat; } }