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:
co-authored by
Copilot
parent
e28d5bce32
commit
c2d408afc6
@@ -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>
|
||||
|
||||
@@ -37,6 +37,8 @@ public record LivreDto
|
||||
/// <summary>Auteurs, dans l'ordre de la couverture. Peut être vide.</summary>
|
||||
public IReadOnlyList<AuteurDto> Auteurs { get; init; } = [];
|
||||
|
||||
public IReadOnlyList<string> Themes { get; init; } = [];
|
||||
|
||||
public string? Editeur { get; init; }
|
||||
|
||||
public required Format Format { get; init; }
|
||||
|
||||
@@ -56,6 +56,12 @@ public class Livre
|
||||
/// <summary>Auteurs du livre, ordonnés par <see cref="LivreAuteur.Position"/>.</summary>
|
||||
public List<LivreAuteur> Auteurs { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Thèmes du livre. Ils décrivent l'œuvre et sont donc communs au foyer, contrairement aux
|
||||
/// statuts de lecture et aux envies.
|
||||
/// </summary>
|
||||
public List<LivreTheme> Themes { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Statuts de lecture, <b>un par personne</b> et seulement pour celles qui en ont posé un.
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
using MaBibli.Shared.Textes;
|
||||
|
||||
namespace MaBibli.Shared.Entites;
|
||||
|
||||
/// <summary>Étiquette thématique commune au catalogue.</summary>
|
||||
public class Theme
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Nom { get; set; } = string.Empty;
|
||||
|
||||
public string NomNormalise { get; set; } = string.Empty;
|
||||
|
||||
public List<LivreTheme> Livres { get; set; } = [];
|
||||
|
||||
public void RecalculerFormes()
|
||||
{
|
||||
Nom = Nom.Trim();
|
||||
NomNormalise = NormalisationTexte.Normaliser(Nom);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Lien entre un livre et une étiquette thématique.</summary>
|
||||
public class LivreTheme
|
||||
{
|
||||
public int LivreId { get; set; }
|
||||
|
||||
public Livre? Livre { get; set; }
|
||||
|
||||
public int ThemeId { get; set; }
|
||||
|
||||
public Theme? Theme { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user