Files
mabibli/MaBibli.Shared/Dtos/TotauxSeries.cs
T
Mathieu LimonierandClaude Opus 5 6a6d745af4 MaBibli 1.0.0
Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts,
scan de code-barres, consultation hors-ligne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 22:36:16 +02:00

51 lines
1.5 KiB
C#

namespace MaBibli.Shared.Dtos;
/// <summary>Calcul des compteurs récursifs de l'arbre des séries.</summary>
public static class TotauxSeries
{
public static IReadOnlyDictionary<int, (int Possedes, int Total)> Calculer(
IReadOnlyList<SerieDto> 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<int, (int Possedes, int Total)>();
var enCours = new HashSet<int>();
(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;
}
}