98 lines
4.0 KiB
C#
98 lines
4.0 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
|
|
{
|
|
private static ILogger _logger = Dependency.GetInstance<ILogger>();
|
|
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 (_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>
|
|
/// 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)
|
|
{
|
|
_logger.Fatal($"ConfigurationRepository.SetValueRaw: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
|
}
|
|
}
|
|
}
|
|
} |