chaosbot/ChaosBot/Database/Repository/ConfigurationRepository.cs

60 lines
2.3 KiB
C#

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";
/// <summary>
/// Get global configuration option
/// </summary>
/// <param name="configurationFlag"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetValue<T>(string configurationFlag)
{
return AppSettingsHandler.GetValue<T>(configurationFlag);
}
/// <summary>
/// Get guild specific configuration option
/// </summary>
/// <param name="configurationFlag"></param>
/// <param name="guildId"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetValue<T>(string configurationFlag, ulong guildId)
{
if (Program._logger == null) return AppSettingsHandler.GetValue<T>($"Servers:{guildId}:{configurationFlag}");
Program._logger.Info($"===> called for {configurationFlag} in {guildId}");
Dictionary<string, object> filterColumns = new Dictionary<string, object>();
filterColumns.Add("key", configurationFlag);
filterColumns.Add("guildId", Convert.ToInt64(guildId));
DataTable valueTable = Controller.SelectQuery(ServersTable, filterColumns: filterColumns);
if (valueTable.Rows.Count == 1)
{
return ServerConfigurationFlag<T>.Deserialize(valueTable.Rows[0]["serializedValue"].ToString());
}
return AppSettingsHandler.GetValue<T>($"Servers:{guildId}:{configurationFlag}");
}
/// <summary>
/// Grab configuration from appsettings.json, method does not look at the database
/// </summary>
/// <param name="configurationFlag"></param>
/// <returns></returns>
public static IConfigurationSection GetSection(string configurationFlag)
{
return AppSettingsHandler.GetSection(configurationFlag);
}
}
}