Files
mabibli/MaBibli.Shared/Dtos/CandidatLivre.cs
T
mathieuandClaude Opus 5 f8f30dbcf7 Phase 2 : service de lookup ISBN en cascade BnF puis OpenLibrary
Recuperation des metadonnees d'un livre a partir de son ISBN, cote serveur
uniquement (aucune interface, aucune persistance).

Cascade : BnF en ISBN-13, puis BnF en ISBN-10 converti, puis OpenLibrary.
La conversion 13 -> 10 est indispensable et non optionnelle : la BnF indexe
l'ISBN tel qu'imprime, les ouvrages d'avant 2007 ne portent qu'un ISBN-10 et
sont introuvables par l'EAN-13 que lit le scanner.

Toutes les notices trouvees sont remontees (jusqu'a 5) : un meme ISBN peut
correspondre a plusieurs reeditions, le choix revient a l'utilisateur.

Le double appel /isbn puis /authors d'OpenLibrary est bien fait, avec repli
sur l'oeuvre quand l'edition ne porte aucun auteur : c'est le bug de BookLogr
(titre rempli, auteur vide) qu'il ne faut pas reproduire.

La couverture vient toujours d'OpenLibrary, avec ?default=false pour obtenir
un 404 plutot qu'une image placeholder.

87 tests xUnit, sur fixtures enregistrees : aucune dependance au reseau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 22:22:47 +02:00

48 lines
1.9 KiB
C#

namespace MaBibli.Shared.Dtos;
/// <summary>Source d'où proviennent les métadonnées d'un candidat.</summary>
public enum SourceMetadonnees
{
/// <summary>Catalogue général de la BnF, via son API SRU (Dublin Core).</summary>
Bnf = 0,
/// <summary>OpenLibrary (Internet Archive), second rideau de la cascade.</summary>
OpenLibrary = 1,
}
/// <summary>
/// Une notice candidate pour un ISBN donné.
/// </summary>
/// <remarks>
/// Un même ISBN peut correspondre à <b>plusieurs</b> notices (rééditions successives partageant
/// l'ISBN). Décision actée dans CLAUDE.md : on ne choisit pas à la place de l'utilisateur,
/// on lui présente tous les candidats. C'est l'interface (phase 3) qui fera choisir.
/// </remarks>
public record CandidatLivre
{
/// <summary>Titre nettoyé de la ponctuation ISBD.</summary>
public required string Titre { get; init; }
/// <summary>Auteur au format « Prénom Nom », ou <c>null</c> si la source n'en donne pas.</summary>
public string? Auteur { get; init; }
public string? Editeur { get; init; }
/// <summary>Année de publication telle que fournie par la source (texte : « 1979 », « March 2007 »…).</summary>
public string? Annee { get; init; }
/// <summary>Code langue tel que fourni par la source (« fre », « eng »…).</summary>
public string? Langue { get; init; }
/// <summary>URL de la couverture chez OpenLibrary, toujours renseignée (voir remarques du service).</summary>
public string? CoverUrl { get; init; }
public required SourceMetadonnees Source { get; init; }
/// <summary>Forme d'ISBN qui a effectivement produit cette notice (13 ou 10 converti).</summary>
public string? IsbnInterroge { get; init; }
/// <summary>Identifiant chez la source : ark BnF (<c>ark:/12148/cb…</c>) ou clé OpenLibrary (<c>/books/OL…M</c>).</summary>
public string? IdentifiantSource { get; init; }
}