using Atomx.Common.Constants; using Atomx.Common.Entities; namespace Atomx.Data.CacheServices { public partial interface ICacheService { /// /// 获取支持充值的货币信息 /// /// Task> GetDepositCurrencies(); /// /// 获取所有可用的货币信息 /// /// /// Task?> GetCurrencies(bool? reload = null); /// /// 通过ID获取或更新缓存 /// /// /// /// Task GetCurrenciesById(long id, Currency? data = null); /// /// 根据代码获取货币信息 /// /// /// Task GetCurrency(string code); /// /// 从缓存中删除数据 /// /// /// Task RemoveCurrencies(long id); } public partial class CacheService : ICacheService { /// /// 获取支持充值的货币信息 /// /// public async Task> GetDepositCurrencies() { var data = await GetCurrencies(); return data.Where(p => p.EnablePay).ToList(); } public async Task?> GetCurrencies(bool? reload = null) { var cacheData = await GetCacheAsync>(CacheKeys.Currencies); if (cacheData == null || reload.HasValue) { var data = _dbContext.Currencies.Where(p => p.Enabled).ToList(); if (data != null) { cacheData = data; await SetCacheAsync(CacheKeys.Currencies, cacheData); } } return cacheData; } public async Task GetCurrenciesById(long id, Currency? data = null) { var cacheData = await GetCurrencies(); if (data != null) { var currency = cacheData.SingleOrDefault(p => p.Id == id); if (currency != null) { cacheData.Remove(currency); cacheData.Add(data); await SetCacheAsync(CacheKeys.Currencies, cacheData); } else { cacheData.Add(data); await SetCacheAsync(CacheKeys.Currencies, cacheData); } return data; } else { var manufacturer = cacheData.SingleOrDefault(p => p.Id == id); if (manufacturer != null) { return manufacturer; } return new Currency(); } } /// /// 根据代码获取货币信息 /// /// /// public async Task GetCurrency(string code) { var cacheData = await GetCurrencies(); if (cacheData != null) { return cacheData.SingleOrDefault(p => p.CurrencyCode == code); } return new Currency(); } public async Task RemoveCurrencies(long id) { var cacheData = await GetCurrencies(); if (cacheData != null) { var data = cacheData.SingleOrDefault(p => p.Id == id); if (data != null) { cacheData.Remove(data); await SetCacheAsync(CacheKeys.Currencies, cacheData); } } } } }