using System; using System.Collections.Generic; using System.Data; using ChaosBot.Database.Entity; using Microsoft.Extensions.Configuration; using NLog; namespace ChaosBot.Database.Repository { public static class ConfigurationRepository { public static IConfiguration AppSettingsHandler { get; set; } private static readonly string ServersTable = "ServerConfigurationFlags"; /// /// Get global configuration option /// /// /// /// public static T GetValue(string configurationFlag) { return AppSettingsHandler.GetValue(configurationFlag); } /// /// Get guild specific configuration option /// /// /// /// /// public static T GetValue(string configurationFlag, ulong guildId) { if (Program._logger == null) return AppSettingsHandler.GetValue($"Servers:{guildId}:{configurationFlag}"); Program._logger.Info($"===> called for {configurationFlag} in {guildId}"); Dictionary filterColumns = new Dictionary(); filterColumns.Add("key", configurationFlag); filterColumns.Add("guildId", Convert.ToInt64(guildId)); DataTable valueTable = Controller.SelectQuery(ServersTable, filterColumns: filterColumns); if (valueTable.Rows.Count == 1) { return ServerConfigurationFlag.Deserialize(valueTable.Rows[0]["serializedValue"].ToString()); } return AppSettingsHandler.GetValue($"Servers:{guildId}:{configurationFlag}"); } /// /// Grab configuration from appsettings.json, method does not look at the database /// /// /// public static IConfigurationSection GetSection(string configurationFlag) { return AppSettingsHandler.GetSection(configurationFlag); } } }