using Atomx.Common.Constant;
using Atomx.Common.Entities;
using Microsoft.EntityFrameworkCore;
namespace Atomx.Data.CacheServices
{
public partial interface ICacheService
{
///
/// 通过文化名城获取对应的本地化译文
///
///
///
Task> GetLocaleResourcesAsync(string culture);
///
/// 添加或更新文化本地化信息
///
///
///
Task SetLocaleResources(LocaleResource localeResource);
///
/// 删除文化本地化资源信息
///
///
///
Task DeleteLocaleResources(LocaleResource localeResource);
///
/// 重载本地化资源
///
///
///
Task ReloadLocaleResources(string culture);
///
/// 移除文化本地化资源缓存
///
///
///
Task RemoveLocaleResources(string culture);
///
/// 指定文化本地化资源获和名城获取译文
///
///
///
///
Task GetLocaleResourcesString(string culture, string name);
}
public partial class CacheService : ICacheService
{
///
/// 通过文化名城获取对应的本地化译文,如果缓存不存在则从数据库加载
///
///
///
public async Task> GetLocaleResourcesAsync(string culture)
{
var key = $"{CacheKeys.LocaleResourcePrefix}{culture}";
var cacheData = GetCache>(key);
if (cacheData == null)
{
var language = await GetLanguageByCulture(culture);
if (language == null)
{
return null;
}
var data = await _dbContext.LocaleResources.Where(p => p.LanguageId == language.Id).ToDictionaryAsync(p => p.Name, p => p.Value);
if (data.Any())
{
cacheData = data;
SetCache(key, cacheData);
}
}
return cacheData;
}
///
/// 添加或更新文化本地化信息
///
///
///
public async Task SetLocaleResources(LocaleResource localeResource)
{
var language = await GetLanguageById(localeResource.LanguageId);
if (language == null)
{
return;
}
var key = $"{CacheKeys.LocaleResourcePrefix}{language.Culture}";
var data = await GetLocaleResourcesAsync(language.Culture);
if (data.ContainsKey(localeResource.Name))
{
data[localeResource.Name] = localeResource.Value;
}
else
{
data.Add(localeResource.Name, localeResource.Value);
}
SetCache(key, data);
}
///
/// 删除文化本地化资源信息
///
///
///
public async Task DeleteLocaleResources(LocaleResource localeResource)
{
var language = await GetLanguageById(localeResource.LanguageId);
if (language == null)
{
return;
}
var key = $"{CacheKeys.LocaleResourcePrefix}{language.Culture}";
var data = await GetLocaleResourcesAsync(language.Culture);
data.Remove(localeResource.Name);
}
///
/// 重载本地化资源
///
///
///
public async Task ReloadLocaleResources(string culture)
{
var key = $"{CacheKeys.LocaleResourcePrefix}{culture}";
var cacheData = await GetCacheAsync>(key);
var language = await GetLanguageByCulture(culture);
if (language == null)
{
return;
}
var data = await _dbContext.LocaleResources.Where(p => p.LanguageId == language.Id).ToDictionaryAsync(p => p.Name, p => p.Value);
if (data.Any())
{
cacheData = data;
await SetCacheAsync(key, cacheData);
}
}
///
/// 移除文化本地化资源缓存
///
///
///
public async Task RemoveLocaleResources(string culture)
{
var key = $"{CacheKeys.LocaleResourcePrefix}{culture}";
await Remove(key);
}
///
/// 指定文化本地化资源获和名城获取译文
///
///
///
///
public async Task GetLocaleResourcesString(string culture, string name)
{
var key = $"{CacheKeys.LocaleResourcePrefix}{culture}";
var cacheData = await GetCacheAsync>(key);
if (cacheData == null)
{
return string.Empty;
}
if (cacheData.TryGetValue(name, out string value))
{
return value;
}
else
{
return string.Empty;
}
}
}
}