using MaBibli.Api.Data; using MaBibli.Api.Endpoints; using MaBibli.Api.Services.Isbn; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); builder.Services.AddDbContext(options => options.UseSqlite(builder.Configuration.GetConnectionString("MaBibli"))); // Lookup ISBN : clients typés via IHttpClientFactory (pas de HttpClient instancié à la main). // Timeout court : une source lente ne doit pas bloquer la cascade, l'appelant bascule sur la suivante. var timeoutSources = TimeSpan.FromSeconds(10); builder.Services.AddHttpClient(http => { http.BaseAddress = new Uri(BnfClient.UrlBase); http.Timeout = timeoutSources; http.DefaultRequestHeaders.UserAgent.ParseAdd("MaBibli/0.1 (bibliotheque personnelle auto-hebergee)"); }); builder.Services.AddHttpClient(http => { http.BaseAddress = new Uri(OpenLibraryClient.UrlBase); http.Timeout = timeoutSources; http.DefaultRequestHeaders.UserAgent.ParseAdd("MaBibli/0.1 (bibliotheque personnelle auto-hebergee)"); }); builder.Services.AddScoped(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } // Le client Blazor WebAssembly est servi comme fichiers statiques par cette API : // un seul processus tourne sur le serveur. app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.MapIsbnEndpoints(); app.MapFallbackToFile("index.html"); app.Run();