Rassemble au catalogue les tomes qui racontent la même histoire

Les livres d'une même série se suivaient au hasard de l'alphabet, et rien
ne disait qu'ils allaient ensemble. Ils tiennent maintenant sous le nom de
leur série, à la place qu'occupait le premier d'entre eux — l'ordre général
ne bouge donc pas — et ce nom mène à la série, seul écran qui montre aussi
les tomes qui manquent.

Le regroupement ne cache ni ne duplique rien : une bascule le défait, et
un livre rattaché à deux séries ne paraît qu'une fois, toujours sous la
même. La règle est une fonction pure, avec ses tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-22 00:16:52 +02:00
co-authored by Claude Opus 5
parent 75f962ab46
commit 7d2f3dc5d9
5 changed files with 459 additions and 4 deletions
+57
View File
@@ -3270,6 +3270,63 @@ corrigeant « Christophe » en « Christophé », livre enregistré et relu par
rôles (`Scénario`, `Dessin`) et ses deux thèmes, fiche rouverte en édition avec ses listes
garnies, aucun débordement horizontal.
## Le catalogue rassemble les tomes d'une série (2026-08-22)
Demandé en usage : « grouper les livres/BD d'une même série ensemble avec le nom de la série ;
si on clique dessus, ça envoie à la série ».
### Deux décisions prises avec l'utilisateur
| Question | Décision | Pourquoi |
|---|---|---|
| Où se place le bloc ? | **À la place de son premier tome** dans l'ordre du catalogue | L'ordre général ne bouge pas : on retrouve « La Légende de Drizzt » entre « Dracula » et « Dune ». Grouper en tête ou en fin aurait défait l'alphabet là où l'on cherche un livre à sa lettre |
| Peut-on s'en passer ? | **Bascule « Grouper les livres d'une même série »**, active par défaut | Décochée, on retrouve exactement le catalogue d'avant. Elle **défait le regroupement**, elle ne masque aucun livre — c'est la lecture retenue sur les deux possibles |
⚠️ **La bascule n'entre pas dans le compteur du bouton « Filtrer ».** Ce compteur existe parce
qu'un filtre replié rendrait des livres invisibles sans qu'on sache pourquoi ; grouper ne cache
rien, et se voit dans la liste elle-même. Compter un réglage inoffensif diluerait l'avertissement
que le compteur porte.
### Ce que le regroupement ne fait pas
- **Il ne masque ni ne déplace hors de la liste.** Un livre écarté par un filtre reste écarté, un
livre visible reste visible, et le compteur en tête continue de dire des **livres** (« 6
livres »), pas des blocs. Un bloc ne montre donc que les tomes que la liste contient — sur une
recherche, « 1 tome ».
- **Il ne va pas chercher les tomes manquants** : le catalogue ne connaît que ce qu'on possède.
C'est précisément pourquoi le nom du bloc **mène à la série**, seul écran qui montre les trous.
- ⚠️ **Il ne duplique jamais un livre.** Le modèle autorise un livre dans plusieurs séries (pas
d'unicité sur `LivreId` seul) ; deux cartes du même exemplaire feraient mentir le compteur. La
série retenue est la **première par ordre alphabétique** — critère explicable et surtout
**stable**, là où « celle que l'API a rendue en premier » changerait le nom du bloc d'un
chargement à l'autre. La fiche livre, elle, montre toutes ses séries.
- **Un seul tome possédé forme quand même un bloc** : c'est ce qui dit à quoi ce livre appartient.
### Les séries ne sont lues qu'une fois par visite
⚠️ Le catalogue se recharge **à chaque frappe** dans la recherche. Y joindre une lecture des
séries ferait une requête par caractère pour une liste qui ne bouge pas pendant qu'on tape. Elles
sont donc lues à l'arrivée sur l'écran et à chaque bascule du réseau. Prix assumé : un tome
rattaché depuis un autre écran n'apparaît groupé qu'au prochain passage au catalogue.
**Une lecture ratée ne coûte rien** : sans série, la liste s'affiche à plat — l'écran d'avant.
Hors-ligne, elle retombe d'elle-même sur l'instantané `series`, déjà tenu à jour.
### Le regroupement est une fonction pure, donc éprouvable
`Services/GroupementCatalogue.cs` ne dépend d'aucun composant : six tests portent sur ce qui a
été **décidé** — la place du bloc, l'ordre de lecture à l'intérieur, le livre à deux séries qui
n'apparaît qu'une fois et toujours sous la même, la liste plate sans séries, le bloc à un seul
tome, et le filtre qui ne se laisse pas défaire. C'est le même parti que `FiltreLivresLocal` :
ce qui tient une règle sort du balisage.
**Vérifié en exécution** (320 px puis 1280 px, base de développement garnie de trois tomes et
d'un livre hors série) : blocs « L'Elfe noir » (2 tomes, dans l'ordre de **lecture** — l'inverse
de l'alphabet) et « La Trilogie des Elfes noirs » (1 tome) posés à la place de leur premier tome,
compteur toujours « 6 livres », bascule qui défait et refait le groupement sans qu'aucune carte
n'apparaisse ni ne disparaisse (6 dans les deux cas), recherche « terre natale » → « 1 livre » et
un bloc à un tome, clic sur le nom → `/series/8`. Aucun débordement horizontal. 623 tests au vert.
## La 7ᵉ série vérifiée en navigateur — trois défauts, tous invisibles aux tests (2026-08-21)
La série Q à Y s'était close sur un aveu : « **aucun** écran n'a été regardé s'afficher ». Le