Distinguer romans et BD par un type de document
Format disait physique ou numérique, jamais roman ou BD. Trois valeurs seulement : une valeur s'ajoute sans migration, la renommer une fois posée sur des centaines de fiches, non. Le défaut est « non précisé », pas « roman » : les fiches existantes n'ont pas été saisies avec cette question en tête, et un AddColumn suffit justement parce que la valeur par défaut ne prétend rien. L'interface n'affiche donc que ce qui a été choisi, comme pour le format. Filtre ajouté aux DEUX implémentations, serveur et hors-ligne, avec quatre jeux de critères de plus dans le test qui les confronte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,16 @@ public record CritereLivres
|
||||
/// <summary>Physique ou numérique. <c>null</c> = les deux : le catalogue est unique.</summary>
|
||||
public Format? Format { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Roman, bande dessinée… <c>null</c> = tous.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <c>TypeDocument.NonPrecise</c> <b>est</b> une valeur filtrable : « ce que je n'ai pas
|
||||
/// encore rangé » est justement la question qu'on se pose après avoir introduit ce champ.
|
||||
/// C'est ce qui la distingue du statut de lecture, dont l'absence n'est pas une valeur.
|
||||
/// </remarks>
|
||||
public TypeDocument? TypeDocument { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Statut de lecture de l'utilisateur courant. <c>null</c> = tous.
|
||||
/// </summary>
|
||||
|
||||
@@ -34,6 +34,11 @@ public static class FiltreLivres
|
||||
source = source.Where(l => l.Format == format);
|
||||
}
|
||||
|
||||
if (criteres.TypeDocument is { } type)
|
||||
{
|
||||
source = source.Where(l => l.TypeDocument == type);
|
||||
}
|
||||
|
||||
if (criteres.Statut is { } statut)
|
||||
{
|
||||
// Le statut vit dans une table par personne : on interroge la ligne de l'appelant,
|
||||
|
||||
@@ -34,6 +34,9 @@ public record EnregistrementLivre
|
||||
|
||||
public Format Format { get; set; }
|
||||
|
||||
/// <summary>Roman, bande dessinée… Facultatif : « non précisé » est une réponse valable.</summary>
|
||||
public TypeDocument TypeDocument { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Statut de lecture <b>de l'appelant</b>. <c>null</c> = non commencé, et aucune ligne n'est
|
||||
/// alors écrite en base.
|
||||
|
||||
@@ -34,6 +34,11 @@ public record LivreDto
|
||||
|
||||
public required Format Format { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Roman, bande dessinée… <c>NonPrecise</c> par défaut, qui ne veut <b>pas</b> dire « roman ».
|
||||
/// </summary>
|
||||
public TypeDocument TypeDocument { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Statut de lecture <b>de l'utilisateur courant</b>, ou <c>null</c> s'il n'en a jamais posé
|
||||
/// (« non commencé »).
|
||||
|
||||
@@ -27,6 +27,16 @@ public class Livre
|
||||
|
||||
public Format Format { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Roman, bande dessinée… <b>Indépendant du format</b> : une BD numérique existe.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Par défaut <see cref="TypeDocument.NonPrecise"/>, qui ne veut pas dire « roman » : voir
|
||||
/// l'énumération. L'interface n'affiche donc une étiquette que lorsque le type a été
|
||||
/// <b>choisi</b>, comme elle n'affiche le format que pour les ebooks.
|
||||
/// </remarks>
|
||||
public TypeDocument TypeDocument { get; set; }
|
||||
|
||||
/// <summary>URL de la couverture (OpenLibrary), pas de fichier stocké localement.</summary>
|
||||
public string? CoverUrl { get; set; }
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
namespace MaBibli.Shared.Entites;
|
||||
|
||||
/// <summary>
|
||||
/// Nature de l'ouvrage, indépendante de son support (voir <see cref="Format"/>).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Une BD est déjà catalogable telle quelle — elle a un ISBN et la BnF la connaît. Ce qui
|
||||
/// manquait était de pouvoir la <b>distinguer</b> : <see cref="Format"/> dit physique ou
|
||||
/// numérique, pas roman ou bande dessinée.
|
||||
/// <para>
|
||||
/// ⚠️ <b><see cref="NonPrecise"/> est la valeur par défaut, et ce n'est pas « roman ».</b> Les
|
||||
/// fiches saisies avant l'arrivée de ce champ ne l'ont pas été avec cette question en tête : les
|
||||
/// déclarer romans d'office affirmerait quelque chose qu'on ne sait pas. Même raisonnement que
|
||||
/// l'absence de ligne de statut, qui vaut « non commencé » et non « à lire ».
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// La liste est volontairement courte. Une valeur s'ajoute sans migration — une énumération est
|
||||
/// stockée en entier — alors que renommer ou fusionner des valeurs déjà posées sur des centaines
|
||||
/// de fiches, non. Dans le doute, on n'ajoute pas.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// ⚠️ Les <b>périodiques</b> n'y figurent pas : leur catalogage demande un ISSN et une table de
|
||||
/// numéros, pas une étiquette de plus. Voir IDEES.md.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public enum TypeDocument
|
||||
{
|
||||
/// <summary>On ne sait pas, et on ne prétend pas le savoir. Valeur par défaut.</summary>
|
||||
NonPrecise = 0,
|
||||
|
||||
Roman = 1,
|
||||
|
||||
BandeDessinee = 2,
|
||||
}
|
||||
Reference in New Issue
Block a user