init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
184
Kreta.KretaServer/Caching/ConnectionStringCache.cs
Normal file
184
Kreta.KretaServer/Caching/ConnectionStringCache.cs
Normal file
|
@ -0,0 +1,184 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Kreta.DataAccessManual;
|
||||
using Kreta.Framework;
|
||||
using Kreta.Framework.Caching;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Kreta.Client.GlobalApi;
|
||||
using Kreta.Core.Enum;
|
||||
using Kreta.Core.FeatureToggle;
|
||||
using Kreta.Core.FeatureToggle.Configuration;
|
||||
using System.Configuration;
|
||||
using Kreta.Core;
|
||||
|
||||
namespace Kreta.KretaServer.Caching
|
||||
{
|
||||
public sealed class ConnectionStringCache : GenericCache<object>
|
||||
{
|
||||
private static readonly string SystemConnectionStringsCache = $"{nameof(Kreta)}_{nameof(SystemConnectionStringsCache)}";
|
||||
|
||||
private static readonly string IntezmenyConnectionStringsCache = $"{nameof(Kreta)}_{nameof(IntezmenyConnectionStringsCache)}";
|
||||
|
||||
public ConnectionStringCache(Framework.Caching.CacheManager cacheManager) : base(cacheManager, nameof(ConnectionStringCache))
|
||||
{
|
||||
}
|
||||
|
||||
#region Private methods
|
||||
|
||||
private List<string> LoadSystemConnectionStrings()
|
||||
{
|
||||
var systemConnectionStrings = new List<string>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(KretaServer.Instance.Configuration.IntezmenyConnectionStringFile))
|
||||
{
|
||||
string intezmenyConnectionStringFile = KretaServer.Instance.Configuration.IntezmenyConnectionStringFile;
|
||||
|
||||
try
|
||||
{
|
||||
if (File.Exists(intezmenyConnectionStringFile))
|
||||
{
|
||||
var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
|
||||
builder.AddJsonFile(intezmenyConnectionStringFile);
|
||||
IConfigurationRoot configuration = builder.Build();
|
||||
|
||||
systemConnectionStrings = configuration.GetSection("config:connectionStrings").GetChildren().Select(x => x.Value).ToList();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SDAServer.Instance.Logger.ExceptionThrown(ex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
systemConnectionStrings = new List<string> { KretaServer.Instance.Configuration.DBConnection };
|
||||
}
|
||||
|
||||
AddOrUpdate(SystemConnectionStringsCache, systemConnectionStrings, oldValue => systemConnectionStrings);
|
||||
|
||||
return systemConnectionStrings;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> GetIntezmenyConnectionStrings()
|
||||
{
|
||||
|
||||
var globalApiFeature = new UseGlobalApiConnectionStringFeature((FeatureConfigurationSection)ConfigurationManager.GetSection(Constants.ConfigurationSectionNames.FeatureConfig));
|
||||
|
||||
var result = (Dictionary<string, string>)Get(IntezmenyConnectionStringsCache) ??
|
||||
(globalApiFeature.IsEnabled ? LoadIntezmenyConnectionStringsGlobalApi() : LoadIntezmenyConnectionStrings());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> LoadIntezmenyConnectionStrings()
|
||||
{
|
||||
var intezmenyConnectionStrings = new Dictionary<string, string>();
|
||||
|
||||
IEnumerable<string> systemConnectionStrings = GetSystemConnectionStrings();
|
||||
|
||||
if (systemConnectionStrings.Any())
|
||||
{
|
||||
// intézmény kapcsolati leírók feltöltése (json fájlban megadott rendszer leíró db-kből lekérdezem a DB-khez tartozó intézményeket)
|
||||
foreach (var connectionString in systemConnectionStrings)
|
||||
{
|
||||
intezmenyConnectionStrings = Dal.ServiceSystemConnection.Run(connectionString, h =>
|
||||
{
|
||||
return intezmenyConnectionStrings.Concat(
|
||||
h.IntezmenyDal().GetOsszesIntezmeny()
|
||||
.Select(intezmeny => new { key = intezmeny.ToLower(), value = connectionString })
|
||||
.ToDictionary(k => k.key, v => v.value)
|
||||
).ToDictionary(k => k.Key, v => v.Value);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
AddOrUpdate(IntezmenyConnectionStringsCache, intezmenyConnectionStrings, oldValue => intezmenyConnectionStrings);
|
||||
|
||||
return intezmenyConnectionStrings;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> LoadIntezmenyConnectionStringsGlobalApi()
|
||||
{
|
||||
var systemType = KretaServer.Instance.Configuration.SystemType;
|
||||
|
||||
var intezmenyConnectionStrings = new Dictionary<string, string>();
|
||||
var globalDbConnection = KretaServer.Instance.Configuration.GlobalDbConnection;
|
||||
var globalApiClient = GlobalApiClientFactory.Build();
|
||||
var token = globalApiClient.GetPrivateToken();
|
||||
var dbConnectionList = globalApiClient.GetKretaAdatbaziselerhetosegek(token.AccessToken, systemType);
|
||||
|
||||
foreach (var dbConnenction in dbConnectionList)
|
||||
{
|
||||
intezmenyConnectionStrings.Add(dbConnenction.IntezmenyAzonosito.ToLower(), string.Format(globalDbConnection, dbConnenction.SqlInstanceName, dbConnenction.DatabaseName));
|
||||
}
|
||||
|
||||
AddOrUpdate(IntezmenyConnectionStringsCache, intezmenyConnectionStrings, oldValue => intezmenyConnectionStrings);
|
||||
return intezmenyConnectionStrings;
|
||||
}
|
||||
|
||||
private string GetIntezmenyiFelhasznalo(string intezmenyAzonosito)
|
||||
{
|
||||
return $"KR_{intezmenyAzonosito}_user";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
|
||||
public IEnumerable<string> GetOsszesIntezmeny()
|
||||
{
|
||||
return GetIntezmenyConnectionStrings().Keys;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetSystemConnectionStrings()
|
||||
{
|
||||
var result = (IList<string>)Get(SystemConnectionStringsCache) ?? LoadSystemConnectionStrings();
|
||||
return result;
|
||||
}
|
||||
|
||||
public string GetSystemConnectionString(string intezmenyAzonosito)
|
||||
{
|
||||
intezmenyAzonosito = intezmenyAzonosito.ToLower();
|
||||
Dictionary<string, string> intezmenyConnectionStrings = GetIntezmenyConnectionStrings();
|
||||
|
||||
return intezmenyConnectionStrings.TryGetValue(intezmenyAzonosito, out string value)
|
||||
? value
|
||||
: KretaServer.Instance.Configuration.DBConnection;
|
||||
}
|
||||
|
||||
public string GetIntezmenyConnectionString(string intezmenyAzonosito)
|
||||
{
|
||||
intezmenyAzonosito = intezmenyAzonosito.ToLower();
|
||||
string connectionString = GetSystemConnectionString(intezmenyAzonosito);
|
||||
Dictionary<string, string> intezmenyConnectionStrings = GetIntezmenyConnectionStrings();
|
||||
|
||||
if (intezmenyConnectionStrings.ContainsKey(intezmenyAzonosito))
|
||||
{
|
||||
var builder = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString)
|
||||
{
|
||||
UserID = GetIntezmenyiFelhasznalo(intezmenyAzonosito),
|
||||
};
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
return connectionString;
|
||||
}
|
||||
|
||||
public void FillCache()
|
||||
{
|
||||
_ = GetSystemConnectionStrings();
|
||||
_ = GetIntezmenyConnectionStrings();
|
||||
}
|
||||
|
||||
public void ResetCache()
|
||||
{
|
||||
_ = LoadSystemConnectionStrings();
|
||||
_ = LoadIntezmenyConnectionStrings();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
172
Kreta.KretaServer/Caching/SystemSettingsCache.cs
Normal file
172
Kreta.KretaServer/Caching/SystemSettingsCache.cs
Normal file
|
@ -0,0 +1,172 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Kreta.Core;
|
||||
using Kreta.DataAccessManual;
|
||||
using Kreta.DataAccessManual.Interfaces;
|
||||
using Kreta.Enums;
|
||||
using Kreta.Framework.Caching;
|
||||
using Kreta.KretaServer.Exceptions;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Kreta.KretaServer.Caching
|
||||
{
|
||||
public class SystemSettingsCache : GenericCache<SystemSettingsCache.SystemSettingsData>
|
||||
{
|
||||
private static readonly string SystemSettingsCacheKeyPrefix = $"{Constants.Cache.CacheKeyPrefix}{nameof(SystemSettingsCache)}_";
|
||||
private static readonly string SystemSettingsRegionPrefix = $"{Constants.Cache.CacheKeyPrefix}{nameof(SystemSettingsCache)}Region_";
|
||||
|
||||
public SystemSettingsCache(Framework.Caching.CacheManager cacheManager) : base(cacheManager, nameof(SystemSettingsCache))
|
||||
{
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class SystemSettingsData
|
||||
{
|
||||
public RendszerBeallitasTipusEnum BeallitasTipus { get; set; }
|
||||
public SystemSettingsControlTypeEnum Type { get; set; }
|
||||
public string Json { get; set; }
|
||||
public bool IsDisabled { get; set; }
|
||||
}
|
||||
|
||||
private string GetCacheKey(string keyPrefix, RendszerBeallitasTipusEnum beallitasTipus, string intezmenyAzonosito, int tanevId)
|
||||
{
|
||||
return $"{keyPrefix}{intezmenyAzonosito.ToLower()}.{tanevId}.{(int)beallitasTipus}";
|
||||
}
|
||||
|
||||
private static string GetRegionKey(string intezmenyAzonosito) => $"{SystemSettingsRegionPrefix}{intezmenyAzonosito}";
|
||||
|
||||
private SystemSettingsData LoadSystemSettingByType(IRendszerBeallitasDAL dal, RendszerBeallitasTipusEnum beallitasTipus, int tanevId)
|
||||
{
|
||||
var rb = dal.Get(beallitasTipus, tanevId);
|
||||
if (rb != null)
|
||||
{
|
||||
return new SystemSettingsData
|
||||
{
|
||||
Type = (SystemSettingsControlTypeEnum)rb.ErtekTipus,
|
||||
Json = rb.Ertek,
|
||||
BeallitasTipus = (RendszerBeallitasTipusEnum)rb.BeallitasTipus,
|
||||
IsDisabled = rb.IsDisabled
|
||||
};
|
||||
}
|
||||
|
||||
throw new KretaException($"System setting not found: {beallitasTipus}");
|
||||
}
|
||||
|
||||
private SystemSettingsData LoadSystemSettingByType(RendszerBeallitasTipusEnum beallitasTipus, string intezmenyAzonosito, int tanevId)
|
||||
{
|
||||
return Dal.OrganizationConnection.Run(intezmenyAzonosito, h =>
|
||||
{
|
||||
return LoadSystemSettingByType(h.RendszerBeallitas(), beallitasTipus, tanevId);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Visszaad egy rendszerbeállítást
|
||||
/// </summary>
|
||||
public SystemSettingsData GetSystemSetting(RendszerBeallitasTipusEnum beallitasTipus, string intezmenyAzonosito, int tanevId)
|
||||
{
|
||||
var key = GetCacheKey(SystemSettingsCacheKeyPrefix, beallitasTipus, intezmenyAzonosito, tanevId);
|
||||
var region = GetRegionKey(intezmenyAzonosito);
|
||||
|
||||
var result = GetOrAddWithRegion(key, region, (k, r) => LoadSystemSettingByType(beallitasTipus, intezmenyAzonosito, tanevId));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Visszaadja az összes rendszerbeállítást
|
||||
/// </summary>
|
||||
public List<SystemSettingsData> GetSystemSettings(string intezmenyAzonosito, int tanevId)
|
||||
{
|
||||
return Dal.OrganizationConnection.Run(intezmenyAzonosito, h =>
|
||||
{
|
||||
List<SystemSettingsData> result = new List<SystemSettingsData>();
|
||||
var dal = h.RendszerBeallitas();
|
||||
foreach (RendszerBeallitasTipusEnum beallitasTipus in Enum.GetValues(typeof(RendszerBeallitasTipusEnum)))
|
||||
{
|
||||
var key = GetCacheKey(SystemSettingsCacheKeyPrefix, beallitasTipus, intezmenyAzonosito, tanevId);
|
||||
var region = GetRegionKey(intezmenyAzonosito);
|
||||
|
||||
result.Add(GetOrAddWithRegion(key, region, (k, r) => LoadSystemSettingByType(dal, beallitasTipus, tanevId)));
|
||||
}
|
||||
return result;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ment egy rendszerbeállítás
|
||||
/// </summary>
|
||||
public void SetSystemSettings(RendszerBeallitasTipusEnum beallitasTipus, string intezmenyAzonosito, int tanevId, object settingobject, int? kovTanevId)
|
||||
{
|
||||
Dal.OrganizationConnection.Run(intezmenyAzonosito, h =>
|
||||
{
|
||||
var dal = h.RendszerBeallitas();
|
||||
var rb = dal.Get(beallitasTipus, tanevId);
|
||||
|
||||
if (rb != null)
|
||||
{
|
||||
string json = JsonConvert.SerializeObject(settingobject);
|
||||
rb.Ertek = json;
|
||||
dal.FullUpdate(rb);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Invalid System settings type given");
|
||||
}
|
||||
|
||||
var key = GetCacheKey(SystemSettingsCacheKeyPrefix, beallitasTipus, intezmenyAzonosito, tanevId);
|
||||
var region = GetRegionKey(intezmenyAzonosito);
|
||||
|
||||
var value = LoadSystemSettingByType(dal, beallitasTipus, tanevId);
|
||||
AddOrUpdateWithRegion(key, region, value, k => value);
|
||||
|
||||
if (kovTanevId.IsEntityId())
|
||||
{
|
||||
try
|
||||
{
|
||||
key = GetCacheKey(SystemSettingsCacheKeyPrefix, beallitasTipus, intezmenyAzonosito, (int)kovTanevId);
|
||||
region = GetRegionKey(intezmenyAzonosito);
|
||||
|
||||
value = LoadSystemSettingByType(dal, beallitasTipus, (int)kovTanevId);
|
||||
AddOrUpdateWithRegion(key, region, value, k => value);
|
||||
}
|
||||
catch (KretaException)
|
||||
{
|
||||
// Köv tanév esetén nem foglalkozunk azzal a hibával, hogy nem található a rendszerbeállítás,
|
||||
// mivel új rendszerbeállítás felvételekor nem tudjuk beszúrni a rendszerbeállítás táblába az értéket,
|
||||
// mert nem feltétlen szerepel tanévrendje események köv tanévhez.
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public bool ResetSystemSettings(string intezmenyAzonosito, int? intezmenyID, int? tanevID, List<int> exceptSystemSettings)
|
||||
{
|
||||
return Dal.OrganizationConnection.Run(intezmenyAzonosito, h =>
|
||||
{
|
||||
try
|
||||
{
|
||||
h.RendszerBeallitas().ResetSystemSettings(intezmenyID, tanevID, exceptSystemSettings);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var region = GetRegionKey(intezmenyAzonosito);
|
||||
ClearRegion(region);
|
||||
return true;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public void RemoveSystemSetting(RendszerBeallitasTipusEnum beallitasTipus, string intezmenyAzonosito, int tanevId)
|
||||
{
|
||||
var key = GetCacheKey(SystemSettingsCacheKeyPrefix, beallitasTipus, intezmenyAzonosito, tanevId);
|
||||
var region = GetRegionKey(intezmenyAzonosito);
|
||||
|
||||
RemoveFromRegion(key, region);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue