using System.Reflection; using MaBibli.Shared.Dtos; namespace MaBibli.Api.Endpoints; /// /// Ce que l'application sait d'elle-même : sa version publiée et sa date de build. /// /// /// C'est le serveur 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. /// 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(); return routes; } /// Extrait les deux valeurs de l'assembly, sans rien interpréter lui-même. public static VersionApplication Lire(Assembly assembly) => VersionApplication.Depuis( assembly.GetCustomAttribute()?.InformationalVersion, assembly.GetCustomAttributes() .FirstOrDefault(a => a.Key == "MaBibliDateBuild")?.Value); }