Ajoute les thèmes communs sur les fiches de livres

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LIMONIER Mathieu
2026-08-20 14:38:19 +02:00
co-authored by Copilot
parent e28d5bce32
commit c2d408afc6
17 changed files with 992 additions and 8 deletions
@@ -31,6 +31,9 @@ public record EnregistrementLivre
/// </summary>
public List<AuteurSaisi> Auteurs { get; set; } = [];
/// <summary>Thèmes saisis manuellement, séparés par des virgules dans l'interface.</summary>
public List<string> Themes { get; set; } = [];
public string? Editeur { get; set; }
public Format Format { get; set; }
@@ -67,6 +70,13 @@ public record EnregistrementLivre
set => Auteurs = Decouper(value, Auteurs);
}
[JsonIgnore]
public string? ThemesTexte
{
get => Themes.Count == 0 ? null : string.Join(", ", Themes);
set => Themes = DecouperThemes(value);
}
/// <summary>
/// Découpe une saisie texte en auteurs, en écartant les entrées vides.
/// </summary>
@@ -99,6 +109,20 @@ public record EnregistrementLivre
nom, roles.GetValueOrDefault(NormalisationTexte.Normaliser(nom), RoleAuteur.NonPrecise)))
.ToList();
}
public static List<string> DecouperThemes(string? saisie)
{
if (string.IsNullOrWhiteSpace(saisie))
{
return [];
}
var vus = new HashSet<string>(StringComparer.Ordinal);
return saisie
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Where(theme => vus.Add(NormalisationTexte.Normaliser(theme)))
.ToList();
}
}
/// <summary>Un auteur tel qu'il est saisi : son nom, et son rôle sur ce livre.</summary>