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