Signaler les envies déjà entrées au catalogue, sans les supprimer

La demande initiale était de retirer l'envie ; c'est refusé. Le catalogue
est commun et la liste d'envies personnelle : supprimer modifierait la
liste d'un autre en silence, avec sa note. Et le rapprochement par clé
d'œuvre est faillible, alors qu'une suppression ne se rattrape pas.

L'étiquette « Déjà au catalogue » mène à la fiche, pour vérifier avant de
retirer. Le critère est celui des doublons, la convention d'auteur commun
étant désormais partagée par les deux (RapprochementAuteurs).

Au passage : accolade manquante sur .etiquette-souhaite, qui avalait la
règle suivante — le bandeau de mise à jour perdait son style.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 21:30:55 +02:00
co-authored by Claude Opus 5
parent 383ed43227
commit a49125ddc3
9 changed files with 301 additions and 42 deletions
@@ -285,27 +285,9 @@ public sealed class ServiceCatalogue(MaBibliDbContext db, IServiceAuteurs auteur
private IQueryable<Livre> AvecAuteurs() =>
db.Livres.AsNoTracking().Include(l => l.Auteurs).ThenInclude(la => la.Auteur);
/// <summary>
/// Un des auteurs du livre catalogué est-il l'un de ceux qu'on est en train de saisir ?
/// </summary>
/// <remarks>
/// Deux fiches sans aucun auteur comptent comme concordantes : le titre est alors la seule
/// information disponible, et refuser de le signaler reviendrait à ne rien dire du tout.
/// </remarks>
private static bool MemeAuteur(Livre livre, IReadOnlyList<string> saisis)
{
var connus = livre.Auteurs
.Select(la => la.Auteur?.Nom)
.Where(nom => !string.IsNullOrWhiteSpace(nom))
.ToList();
if (connus.Count == 0 && saisis.Count == 0)
{
return true;
}
return connus.Any(connu => saisis.Any(saisi => RapprochementAuteurs.SontLeMemeAuteur(connu, saisi)));
}
/// <summary>Un des auteurs du livre catalogué est-il l'un de ceux qu'on est en train de saisir ?</summary>
private static bool MemeAuteur(Livre livre, IReadOnlyList<string> saisis) =>
RapprochementAuteurs.PartagentUnAuteur(livre.Auteurs.Select(la => la.Auteur?.Nom), saisis);
/// <summary>Phrase d'avertissement, écrite pour être lue telle quelle par l'utilisateur.</summary>
/// <remarks>