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; } = [];
}