using Data_Coupler.Models; using System.Text.Json; namespace Data_Coupler.Services { /// /// Interfaccia per il servizio di gestione versione applicazione /// public interface IVersionService { /// /// Ottiene le informazioni sulla versione corrente dell'applicazione /// VersionInfo GetVersion(); /// /// Ottiene la versione formattata per display nell'UI /// string GetDisplayVersion(); } /// /// Servizio per gestire le informazioni di versione dell'applicazione /// Legge i dati da version.json generato durante il build /// public class VersionService : IVersionService { private readonly VersionInfo _versionInfo; private readonly ILogger _logger; private readonly IWebHostEnvironment _env; public VersionService(ILogger logger, IWebHostEnvironment env) { _logger = logger; _env = env; _versionInfo = LoadVersionInfo(); } /// /// Carica le informazioni di versione dal file version.json /// private VersionInfo LoadVersionInfo() { try { // Cerca il file version.json nella root dell'applicazione var versionFilePath = Path.Combine(_env.ContentRootPath, "version.json"); if (File.Exists(versionFilePath)) { var json = File.ReadAllText(versionFilePath); var version = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); if (version != null) { _logger.LogInformation("Version loaded: {Version}", version.GetFullVersion()); return version; } } else { _logger.LogWarning("version.json not found at {Path}, using default version", versionFilePath); } } catch (Exception ex) { _logger.LogError(ex, "Error loading version.json, using default version"); } // Versione di default se il file non esiste o c'รจ un errore return new VersionInfo { Version = "2.1.0", CommitSha = "local", Branch = "dev", BuildDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), BuildEnvironment = "Local" }; } /// /// Ottiene le informazioni complete sulla versione /// public VersionInfo GetVersion() { return _versionInfo; } /// /// Ottiene la versione formattata per display nell'UI /// public string GetDisplayVersion() { return _versionInfo.GetShortVersion(); } } }