Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts, scan de code-barres, consultation hors-ligne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
39 lines
1.7 KiB
C#
39 lines
1.7 KiB
C#
using System.Reflection;
|
|
using MaBibli.Shared.Dtos;
|
|
|
|
namespace MaBibli.Api.Endpoints;
|
|
|
|
/// <summary>
|
|
/// Ce que l'application sait d'elle-même : sa version publiée et sa date de build.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// C'est le <b>serveur</b> qui répond, et non le client Blazor, bien que les deux soient
|
|
/// compilés du même coup : lire ses propres attributs depuis le WebAssembly dépendrait de ce que
|
|
/// le trimmer veut bien conserver, alors qu'ici la lecture est certaine. La page « À propos »
|
|
/// affiche donc la version du binaire réellement déployé — ce qu'on veut savoir en diagnostiquant
|
|
/// un appareil.
|
|
/// </remarks>
|
|
public static class VersionEndpoints
|
|
{
|
|
// Lue une fois : les attributs d'un assembly ne changent pas en cours d'exécution.
|
|
private static readonly VersionApplication Version = Lire(typeof(VersionEndpoints).Assembly);
|
|
|
|
public static IEndpointRouteBuilder MapVersionEndpoints(this IEndpointRouteBuilder routes)
|
|
{
|
|
routes.MapGet("/api/version", () => Results.Ok(Version))
|
|
.WithName("VersionApplication")
|
|
.WithTags("Version")
|
|
.WithSummary("Version publiée et date de build, ou « rien » pour un binaire non publié.")
|
|
.Produces<VersionApplication>();
|
|
|
|
return routes;
|
|
}
|
|
|
|
/// <summary>Extrait les deux valeurs de l'assembly, sans rien interpréter lui-même.</summary>
|
|
public static VersionApplication Lire(Assembly assembly) =>
|
|
VersionApplication.Depuis(
|
|
assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion,
|
|
assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
|
|
.FirstOrDefault(a => a.Key == "MaBibliDateBuild")?.Value);
|
|
}
|