Files
mabibli/MaBibli.Shared/Dtos/RevueDto.cs
T
mathieuandClaude Opus 5 fe36091bf0 Rend enfin tapable le champ où l'on écrit ce qu'un numéro annonce
Le champ « À la une » se reliait à chaque frappe sur une propriété qui
découpait puis recomposait la ligne : le point-virgule tapé ouvrait une
entrée vide aussitôt élaguée, et l'espace qui le suit était rogné. Le seul
caractère qu'on ne pouvait pas y taper était son propre séparateur.

Un titre s'ajoute maintenant seul, par Entrée, et se modifie ou se retire
depuis la liste. Plus rien ne découpe, donc plus rien n'est intapable.

ArticlesTexte disparaît, et avec lui le paramètre virguleAussi de
ListeSaisie, qui n'existait que pour ce champ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 23:37:31 +02:00

83 lines
2.9 KiB
C#

namespace MaBibli.Shared.Dtos;
/// <summary>
/// Une revue et les numéros qu'on en possède.
/// </summary>
/// <remarks>
/// Comme pour les séries, <b>une seule lecture rend tout</b> : la liste des revues sert aussi
/// le détail de chacune, ce qui donne un unique instantané hors-ligne à tenir à jour.
/// </remarks>
public record RevueDto
{
public required int Id { get; init; }
public required string Titre { get; init; }
/// <summary>ISSN à tiret, quand il est connu. Identifiant de la <b>revue</b>, jamais un ISBN.</summary>
public string? Issn { get; init; }
public string? Editeur { get; init; }
public string? AjoutePar { get; init; }
/// <summary>Numéros possédés, du plus récent au plus ancien.</summary>
public IReadOnlyList<NumeroRevueDto> Numeros { get; init; } = [];
}
/// <summary>Un numéro possédé. Recensé seulement : ni prêt, ni statut de lecture.</summary>
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; }
/// <summary>Couverture du numéro, quand une URL a été collée. Aucune source ne la fournit.</summary>
public string? CoverUrl { get; init; }
/// <summary>Articles annoncés à la une, dans l'ordre de saisie.</summary>
public IReadOnlyList<string> Articles { get; init; } = [];
}
/// <summary>Charge utile de création ou de modification d'une revue.</summary>
public record EnregistrementRevue
{
public string Titre { get; set; } = string.Empty;
public string? Issn { get; set; }
public string? Editeur { get; set; }
}
/// <summary>Charge utile d'ajout ou de modification d'un numéro.</summary>
public record AjoutNumeroRevue
{
/// <summary>Obligatoire : deux numéros sans numéro seraient indiscernables.</summary>
public string Numero { get; set; } = string.Empty;
public DateTime? DateParution { get; set; }
public string? Note { get; set; }
/// <summary>
/// URL d'une image de couverture. <b>Aucune source ne peut la fournir</b> — l'ISSN désigne
/// la revue, pas la parution : elle est collée à la main, ou absente.
/// </summary>
public string? CoverUrl { get; set; }
/// <summary>
/// Articles à la une, dans l'ordre de la couverture.
/// </summary>
/// <remarks>
/// ⚠️ <b>La liste est la donnée, et il n'y a plus de vue « une seule ligne ».</b> 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.
/// </remarks>
public List<string> Articles { get; set; } = [];
}