Rien n'empêchait de rescanner un livre déjà catalogué. Plutôt qu'un index unique — qui interdirait le second exemplaire, cas parfaitement légitime — la création répond 409 avec les fiches semblables, et « confirmerDoublon » enregistre la même saisie. Deux critères, dont aucun n'est une clé : ISBN identique, ou clé d'œuvre et auteur communs. La clé d'œuvre étant un préfixe de TitreNormalise, SQL dégrossit sur la colonne indexée et l'égalité exacte se vérifie ensuite en mémoire. Vérifié en exécution : avertissement, retour au formulaire intact, et ajout confirmé créant bien un second exemplaire. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
25 lines
1.2 KiB
C#
25 lines
1.2 KiB
C#
namespace MaBibli.Shared.Dtos;
|
|
|
|
/// <summary>
|
|
/// Livres déjà catalogués qui ressemblent à celui qu'on est en train d'ajouter.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// <b>C'est un avertissement, jamais un refus.</b> Posséder deux exemplaires du même livre est
|
|
/// parfaitement légitime — on garde le sien et on prête l'autre — et l'ISBN est facultatif, donc
|
|
/// il ne peut pas servir de clé unique. Un index unique en base interdirait le second exemplaire
|
|
/// au lieu de rendre service ; ici l'utilisateur voit ce qu'il a déjà, et tranche.
|
|
/// <para>
|
|
/// Le rapprochement est <b>faillible dans les deux sens</b> : il rate une réédition retitrée
|
|
/// (<see cref="Textes.CleOeuvre"/>) et il signale le poche à côté du grand format, qui sont deux
|
|
/// exemplaires bien distincts. C'est exactement pourquoi la décision revient à l'utilisateur.
|
|
/// </para>
|
|
/// </remarks>
|
|
public record DoublonsLivre
|
|
{
|
|
/// <summary>Phrase destinée à l'utilisateur, nommant ce qu'il possède déjà.</summary>
|
|
public string Message { get; set; } = string.Empty;
|
|
|
|
/// <summary>Les fiches en cause, pour que l'écran les montre plutôt que de les décrire.</summary>
|
|
public List<LivreDto> Livres { get; set; } = [];
|
|
}
|