Files
Mathieu LimonierandClaude Opus 5 6a6d745af4 MaBibli 1.0.0
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>
2026-08-22 22:36:16 +02:00

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);
}