Files
mabibli/MaBibli.Shared/Entites/ArticleUne.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

52 lines
2.0 KiB
C#

using MaBibli.Shared.Textes;
namespace MaBibli.Shared.Entites;
/// <summary>
/// Un article annoncé <b>à la une</b> d'un numéro de revue.
/// </summary>
/// <remarks>
/// <b>Sur le NUMÉRO, jamais sur la revue</b> (tranché avec l'utilisateur le 2026-08-20) : les
/// articles à la une changent à chaque parution. Posés sur <see cref="Revue"/>, ils décriraient
/// une ligne éditoriale et non un sommaire.
/// <para>
/// <b>Pourquoi une table à part et non <see cref="Theme"/> ?</b> Un thème est un vocabulaire
/// qu'on <i>réutilise</i> — « dark fantasy » revient sur dix livres —, alors qu'un titre
/// d'article est unique à sa parution et ne se réutilisera jamais. Rangés dans
/// <c>Themes</c>, « Ukraine : le front d'hiver » et ses semblables rempliraient de bruit un
/// vocabulaire qui sert le catalogue.
/// </para>
/// <para>
/// ⚠️ Conséquence directe : <b>pas de n-n</b>. Une simple clé étrangère vers le numéro suffit,
/// puisque rien ne se partage. C'est ce qui distingue cette table de <c>LivreTheme</c>.
/// </para>
/// <para>
/// ⚠️ La saisie se fait au <b>point-virgule</b>, et surtout pas à la virgule : un titre
/// d'article en contient souvent (« Ukraine, deux ans après »), et elle le couperait en deux.
/// Voir <see cref="ListeSaisie"/>.
/// </para>
/// </remarks>
public class ArticleUne
{
public int Id { get; set; }
public int NumeroRevueId { get; set; }
public NumeroRevue? NumeroRevue { get; set; }
/// <summary>Le titre tel qu'il est imprimé en couverture.</summary>
public string Titre { get; set; } = string.Empty;
/// <summary>Forme mise à plat, porteuse de l'unicité au sein du numéro.</summary>
public string TitreNormalise { get; set; } = string.Empty;
/// <summary>Rang d'affichage : l'ordre de saisie est celui de la couverture.</summary>
public int Position { get; set; }
public void RecalculerFormes()
{
Titre = Titre.Trim();
TitreNormalise = NormalisationTexte.Normaliser(Titre);
}
}