using Newtonsoft.Json; using SharedLibraryCore.Exceptions; using SharedLibraryCore.Interfaces; using System; using System.IO; using System.Threading.Tasks; namespace SharedLibraryCore.Configuration { public class BaseConfigurationHandler : IConfigurationHandler where T : IBaseConfiguration { T _configuration; public BaseConfigurationHandler(string fn) { FileName = Path.Join(Utilities.OperatingDirectory, "Configuration", $"{fn}.json"); Build(); } public string FileName { get; } public void Build() { try { var configContent = File.ReadAllText(FileName); _configuration = JsonConvert.DeserializeObject(configContent); } catch (FileNotFoundException) { _configuration = default; } catch (Exception e) { throw new ConfigurationException("MANAGER_CONFIGURATION_ERROR") { Errors = new[] { e.Message }, ConfigurationFileName = FileName }; } } public Task Save() { var settings = new JsonSerializerSettings() { Formatting = Formatting.Indented }; settings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); var appConfigJSON = JsonConvert.SerializeObject(_configuration, settings); return File.WriteAllTextAsync(FileName, appConfigJSON); } public T Configuration() { return _configuration; } public void Set(T config) { _configuration = config; } } }