chaosbot/ChaosBot/Database/Repository/ConfigurationRepository.cs

106 lines
4.3 KiB
C#

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