Auteurs cherchables et triables, filtre de prêt, rang dans les exports, couvertures d'envies

Auteurs
- Recherche et tri (par nom, ou du plus présent au moins présent), en mémoire : la liste
  est déjà chargée en entier — c'est elle qui sert l'instantané hors-ligne — et la filtrer
  côté serveur aurait rendu la page inutilisable sans réseau.
- Trois colonnes dont une seule est élastique : compteur à gauche sur une largeur figée,
  nom au milieu, actions à droite. Les compteurs et les boutons s'alignent alors d'une
  ligne à l'autre au lieu de suivre la longueur du nom.

Catalogue
- Filtre « À la maison / Prêtés », posé dans les deux implémentations (serveur et
  hors-ligne) et dans le test qui les confronte, avec un cas de prêt CLOS — c'est
  exactement là que les deux auraient pu diverger en silence.
- La ligne disparaît tant que rien n'est prêté, comme celles des formats et des types.

Envies
- ⚠️ Les couvertures manquaient parce que seul l'écran « ajouter une envie » remplissait
  CoverUrl : la bibliographie et les tomes manquants transmettent un ISBN mais aucune
  image. Le repli est posé à la LECTURE, donc il vaut aussi pour les envies déjà
  enregistrées, sans migration.
- Les exports .txt et .csv portent le rang d'envie. Le .txt en a le plus besoin : son
  groupement par auteur détruit précisément cet ordre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-20 20:42:13 +02:00
co-authored by Claude Opus 5
parent 83089d7479
commit 4fd67e4e3b
13 changed files with 344 additions and 24 deletions
@@ -330,7 +330,21 @@ public sealed class ServiceSouhaits(MaBibliDbContext db) : IServiceSouhaits
Editeur = souhait.Editeur,
Annee = souhait.Annee,
Isbn = souhait.Isbn,
CoverUrl = souhait.CoverUrl,
// ⚠️ La couverture se déduit de l'ISBN quand elle n'a pas été fournie.
//
// Constaté en usage : aucune vignette dans la liste d'envies. La cause n'était pas le
// composant Couverture mais le chemin d'ajout — seul l'écran « ajouter une envie »
// remplissait CoverUrl, alors que la plupart des envies arrivent par la bibliographie
// d'un auteur ou par un tome manquant d'une série, qui transmettent bien un ISBN mais
// aucune image.
//
// Le repli est posé ICI, à la lecture, et non à l'écriture : il vaut alors aussi pour
// les envies DÉJÀ enregistrées, sans migration ni rattrapage. La règle « sans ISBN,
// pas de couverture, et on n'en invente pas » est intacte — on n'invente rien, on
// applique la formule OpenLibrary habituelle à un ISBN qu'on possède déjà.
CoverUrl = souhait.CoverUrl
?? (souhait.Isbn is null ? null : IsbnUtils.UrlCouverture(souhait.Isbn)),
Note = souhait.Note,
DateAjout = souhait.DateAjout,
Possede = livreId is not null,