namespace MaBibli.Shared.Dtos; /// /// Une revue et les numéros qu'on en possède. /// /// /// Comme pour les séries, une seule lecture rend tout : la liste des revues sert aussi /// le détail de chacune, ce qui donne un unique instantané hors-ligne à tenir à jour. /// public record RevueDto { public required int Id { get; init; } public required string Titre { get; init; } /// ISSN à tiret, quand il est connu. Identifiant de la revue, jamais un ISBN. public string? Issn { get; init; } public string? Editeur { get; init; } public string? AjoutePar { get; init; } /// Numéros possédés, du plus récent au plus ancien. public IReadOnlyList Numeros { get; init; } = []; } /// Un numéro possédé. Recensé seulement : ni prêt, ni statut de lecture. public record NumeroRevueDto { public required int Id { get; init; } public required string Numero { get; init; } public DateTime? DateParution { get; init; } public string? Note { get; init; } /// Couverture du numéro, quand une URL a été collée. Aucune source ne la fournit. public string? CoverUrl { get; init; } /// Articles annoncés à la une, dans l'ordre de saisie. public IReadOnlyList Articles { get; init; } = []; } /// Charge utile de création ou de modification d'une revue. public record EnregistrementRevue { public string Titre { get; set; } = string.Empty; public string? Issn { get; set; } public string? Editeur { get; set; } } /// Charge utile d'ajout ou de modification d'un numéro. public record AjoutNumeroRevue { /// Obligatoire : deux numéros sans numéro seraient indiscernables. public string Numero { get; set; } = string.Empty; public DateTime? DateParution { get; set; } public string? Note { get; set; } /// /// URL d'une image de couverture. Aucune source ne peut la fournir — l'ISSN désigne /// la revue, pas la parution : elle est collée à la main, ou absente. /// public string? CoverUrl { get; set; } /// /// Articles à la une, dans l'ordre de la couverture. /// /// /// ⚠️ La liste est la donnée, et il n'y a plus de vue « une seule ligne ». Elle a /// existé — un champ texte à points-virgules, relié à chaque frappe sur une propriété qui /// découpait puis recomposait — et c'était un champ dans lequel on ne pouvait taper ni le /// séparateur (aussitôt élagué comme entrée vide) ni l'espace qui le suit. Un titre s'ajoute /// désormais un par un. /// public List Articles { get; set; } = []; }