using Atomx.Common.Constants; using Atomx.Common.Entities; namespace Atomx.Data.CacheServices { public partial interface ICacheService { /// /// 获取语言信息,Enabled = true, 可选择强制更新缓存 /// /// /// Task> GetLanguages(bool? reload = null); /// /// 通过ID获取或更新缓存 /// /// /// /// Task GetLanguageById(long id, Language? data = null); /// /// 通过代码获取语言 /// /// /// Task GetLanguageByCulture(string culture); } public partial class CacheService : ICacheService { public async Task> GetLanguages(bool? reload = null) { var cacheData = await GetCacheAsync>(CacheKeys.Languages); if (cacheData == null || reload.HasValue) { var data = _dbContext.Languages.Where(p => p.Enabled).ToList(); if (data != null) { cacheData = data; await SetCacheAsync(CacheKeys.Languages, cacheData); } } return cacheData; } public async Task GetLanguageById(long id, Language? data = null) { var cacheData = await GetLanguages(); if (data != null) { var language = cacheData.SingleOrDefault(p => p.Id == id); if (language != null) { cacheData.Remove(language); cacheData.Add(data); await SetCacheAsync(CacheKeys.Languages, cacheData); } else { cacheData.Add(data); await SetCacheAsync(CacheKeys.Languages, cacheData); } return data; } else { var language = cacheData.SingleOrDefault(p => p.Id == id); if (language != null) { return language; } return new Language(); } } /// /// 通过代码获取语言 /// /// /// public async Task GetLanguageByCulture(string culture) { var cacheData = await GetLanguages(); var language = cacheData.SingleOrDefault(p => p.Culture == culture); if (language == null) { language = _dbContext.Languages.SingleOrDefault(p => p.Culture == culture); if (language != null) { cacheData.Add(language); await SetCacheAsync(CacheKeys.Languages, cacheData); } } return language; } } }