Distinguer scénario, dessin et couleurs sur chaque livre

Le rôle vit sur le LIEN livre-auteur, jamais sur l'auteur : le même auteur
scénarise un album et dessine le suivant, et il ne doit pas exister en deux
fiches pour autant — ce que l'index unique sur la clé de regroupement
interdit de toute façon.

Les rôles se retrouvent par clé d'auteur résolue et non par position :
ResoudreAsync écarte les noms vides et fusionne les variantes, donc sa
liste peut être plus courte que la saisie.

Piège traité : le champ des noms reconstruit la liste à chaque frappe.
Decouper reprend les rôles connus en rapprochant sur la forme normalisée,
sans quoi corriger une faute de frappe les effacerait tous.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 22:37:20 +02:00
co-authored by Claude Opus 5
parent 9ab6f23b8c
commit 07cb48b2be
16 changed files with 895 additions and 22 deletions
+44 -1
View File
@@ -731,7 +731,9 @@ Auteur
LivreAuteur (n-n : un livre peut avoir plusieurs auteurs)
├── LivreId ─┐ clé primaire composite
├── AuteurId ─┘ FK Livre = cascade, FK Auteur = restrict
── Position (rang sur la couverture, à partir de 0)
── Position (rang sur la couverture, à partir de 0)
└── Role : NonPrecise | Scenario | Dessin | Couleurs
⚠ sur le LIEN, pas sur l'auteur : on scénarise un album et on dessine le suivant
StatutLecture (le statut est PERSONNEL)
├── Id
@@ -941,6 +943,47 @@ livre sorti depuis six mois qu'on avait oublié, pas celui prêté hier.
(`ServiceLivresApi.EnUtc`). Sans cela le prêt se décalerait d'un jour pour la moitié du globe.
Vérifié en exécution : saisie du 12/08 → `2026-08-11 22:00` en base (CEST).
## Rôles des auteurs — migration `RolesDesAuteurs` (2026-08-19)
Besoin venu de la bande dessinée : savoir **qui écrit et qui dessine**. `LivreAuteur.Role` porte
`NonPrecise` (0), `Scenario`, `Dessin`, `Couleurs` — un troisième nom figurant souvent sur un
album.
### ⚠️ Le rôle vit sur le LIEN, pas sur l'auteur
C'est la décision structurante, et elle se justifie par un cas banal : le même auteur scénarise
un album et **dessine** le suivant. Un rôle posé sur `Auteur` obligerait à créer deux fiches pour
une seule personne — exactement ce que l'index unique `CleRegroupement` interdit, et ce que tout
le travail de rapprochement cherche à éviter.
Conséquence dans `ServiceCatalogue` : `ResoudreAsync` ne reçoit **que des noms**, et les rôles
sont réappliqués ensuite. ⚠️ Ils se retrouvent **par clé d'auteur résolue**, jamais par position :
`ResoudreAsync` écarte les noms vides et fusionne les variantes, donc sa liste peut être plus
courte que la saisie — un rapprochement par index décalerait tous les rôles suivants. Un test
couvre le cas « Maupassant, Guy de » rapproché de « Guy de Maupassant ».
### Deux règles d'interface, héritées telles quelles
- **Les rôles n'apparaissent qu'à partir de deux auteurs.** Un roman n'a qu'un signataire dont le
rôle ne se pose pas ; la question « qui écrit, qui dessine ? » ne se pose qu'à plusieurs.
- **Seul ce qui a été choisi s'affiche** : « Dobbs (scénario), Christophe Regnault (dessin) »,
et rien du tout quand le rôle est `NonPrecise`. Même règle que le format et le type de document.
### ⚠️ Le piège : le champ des noms se relie à chaque frappe
`EnregistrementLivre.Auteur` (la vue « une seule ligne ») **reconstruit la liste entière** à
chaque caractère tapé. Sans précaution, corriger une faute de frappe remettrait tous les rôles à
« non précisé » sous les yeux de l'utilisateur.
`Decouper` reprend donc les rôles des auteurs déjà saisis, en rapprochant sur la forme
**normalisée** du nom — ce qui les fait survivre à un accent ajouté après coup (vérifié en
exécution : « Christophe » → « Christophé » garde son rôle). Un nom réellement différent, lui,
repart à zéro : on ne devine pas qu'il s'agit de la même personne.
**Ce qui n'est délibérément pas fait** : ni traducteur, ni préfacier, ni photographe. La liste
reste courte tant que le besoin n'est pas constaté — une valeur s'ajoute sans migration, la
renommer une fois posée sur des centaines de liens, non.
## Type de document — migration `TypeDeDocument` (2026-08-19)
Besoin remonté : distinguer une BD d'un roman. Une BD était déjà catalogable telle quelle (elle