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 { private static ILogger _logger = Program.Logger; 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 (_logger == null) return AppSettingsHandler.GetValue($"Servers:{guildId}:{configurationFlag}"); string valueSerialized = GetValueRaw(configurationFlag, Convert.ToInt64(guildId)); if (valueSerialized != null) return ServerConfigurationFlag.Deserialize(valueSerialized); return AppSettingsHandler.GetValue($"Servers:{guildId}:{configurationFlag}"); } public static string GetValueRaw(string configurationFlag, long guildId) { Dictionary filterColumns = new Dictionary(); filterColumns.Add("key", new FilterValue(configurationFlag)); filterColumns.Add("guildId", new FilterValue(guildId)); ServerConfigurationFlag serverConfigurationFlag = ServerConfigurationFlag.Query().Where("key", configurationFlag).Where("guildId", guildId).First(); if (serverConfigurationFlag != null) { return serverConfigurationFlag.serializedValue; } return null; } /// /// Get guild specific configuration option /// /// /// /// /// public static void SetValue(string configurationFlag, ulong guildId, T value) { SetValueRaw(configurationFlag, Convert.ToInt64(guildId), ServerConfigurationFlag.Serialize(value)); } public static void SetValueRaw(string configurationFlag, long guildId, string serializedValue) { try { int matchCount = ServerConfigurationFlag.Query().Where("key", configurationFlag).Where("guildId", guildId).Count(); if (matchCount > 0) { ServerConfigurationFlag.Query() .Where("key", configurationFlag) .Where("guildId", guildId) .Set("key", configurationFlag) .Set("guildId", guildId) .Set("serializedValue", serializedValue) .Update(); return; } ServerConfigurationFlag newValue = new ServerConfigurationFlag(configurationFlag, guildId); newValue.serializedValue = serializedValue; ServerConfigurationFlag.Query().Insert(newValue); } catch (Exception ex) { _logger.Fatal($"ConfigurationRepository.SetValueRaw: Exception [{ex}] thrown, <[{ex.Message}]>."); } } } }