using MaBibli.Shared.Entites; namespace MaBibli.Shared.Catalogue; /// /// Critères de consultation du catalogue. /// /// /// Il n'existe volontairement aucun critère sur AjoutePar. La bibliothèque est /// commune à tout le foyer : filtrer les lectures sur ce champ serait un bug de conception. /// L'absence de ce critère est l'endroit où l'invariant est le plus visible. /// /// n'est pas une exception : il filtre sur le statut de l'appelant, /// que le serveur connaît par les en-têtes SSOwat. Le client ne désigne jamais de qui il parle. /// /// public record CritereLivres { /// /// Texte cherché dans le titre ou les auteurs. Insensible à la casse /// et aux accents : « emile » trouve « Émile ». /// public string? Recherche { get; init; } /// Physique ou numérique. null = les deux : le catalogue est unique. public Format? Format { get; init; } /// /// Roman, bande dessinée… null = tous. /// /// /// TypeDocument.NonPrecise est 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. /// public TypeDocument? TypeDocument { get; init; } /// /// Statut de lecture de l'utilisateur courant. null = tous. /// /// /// Un livre sans statut pour cette personne ne remonte sous aucune valeur : « non /// commencé » n'est pas un statut, c'est l'absence de statut. Il reste visible sans filtre. /// public Statut? Statut { get; init; } /// Ne garder que les livres d'un auteur — le « cliquer sur un auteur » d'CLAUDE.md. public int? AuteurId { get; init; } /// /// true = ce qui est dehors, false = ce qui est à la maison, null = tout. /// /// /// ⚠️ Contrairement à , ce critère est commun au foyer : un prêt /// n'appartient à personne en particulier, et aucune identité n'entre dans son évaluation. /// C'est la même dissymétrie que partout ailleurs — le livre absent l'est pour tout le monde, /// sa lecture ne l'est que pour soi. /// /// L'écran « Prêts » répond déjà à « qu'est-ce qui est dehors ? ». Ce critère-ci répond à /// l'autre moitié de la question, celle qu'aucun écran ne servait : « qu'est-ce que j'ai /// réellement sous la main ? », par exemple avant de promettre un livre à quelqu'un. /// /// public bool? Prete { get; init; } }