using Atomx.Common.Constant;
using Atomx.Common.Entities;
using Atomx.Common.Enums;
using Atomx.Common.Models;
using Atomx.Utils.Extension;
using Mapster;
namespace Atomx.Data.CacheServices
{
public partial interface ICacheService
{
///
/// 获取内容分类列表
///
///
///
Task> GetContentCategoryList(bool? reload = false);
///
/// 获取产品分类列表
///
///
///
Task> GetProductCategoryList(bool? reload = false);
///
/// 获取可用的缓存信息
///
///
Task> GetContentCategories(List? data = null);
///
/// 通过ID获取或更新缓存
///
///
///
///
Task GetContentCategoryById(long id, Category? data = null);
///
/// 从缓存中移除分类缓存
///
///
///
Task RemoveContentCategory(long id);
///
/// 获取可用的缓存信息
///
///
///
Task> GetProductCategories(bool? reload = false);
///
/// 通过ID获取或更新缓存
///
///
///
///
Task GetProductCategoryById(long id, Category? data = null);
///
/// 重缓存中移除产品分类
///
///
///
Task RemoveProductCategory(long id);
}
public partial class CacheService : ICacheService
{
///
/// 获取内容分类列表
///
///
///
public async Task> GetContentCategoryList(bool? reload = false)
{
var cacheData = await GetCacheAsync>(CacheKeys.ContentCategories);
bool needReload = reload.HasValue ? reload.Value : false;
if (cacheData == null || needReload)
{
var category = _dbContext.Categories.Where(p => p.Type == (int)CategoryType.Content).ToList();
var list = new List();
cacheData = BuildCategoryList(list, category, 0);
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
return cacheData;
}
///
/// 获取产品分类列表
///
///
///
public async Task> GetProductCategoryList(bool? reload = false)
{
var cacheData = await GetCacheAsync>(CacheKeys.ProductCategories);
bool needReload = reload.HasValue ? reload.Value : false;
if (cacheData == null || needReload)
{
var category = _dbContext.Categories.Where(p => p.Type == (int)CategoryType.Product).ToList();
var list = new List();
cacheData = BuildCategoryList(list, category, 0);
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
return cacheData;
}
List BuildCategoryList(List list, List data, long parentId)
{
var categories = data.Where(p => p.ParentId == parentId).OrderBy(p => p.DisplayOrder).ToList();
foreach (var item in categories)
{
var category = item.Adapt();
if (!string.IsNullOrEmpty(item.Path))
{
var ids = item.Path.Split(',').Select(p => p.ToLong()).ToList();
var breadcrumbs = string.Empty;
foreach (var id in ids)
{
var name = data.Where(p => p.Id == id).Select(p => p.Name).SingleOrDefault();
if (!string.IsNullOrEmpty(breadcrumbs))
{
breadcrumbs = breadcrumbs + " >> " + name;
}
else
{
breadcrumbs = name;
}
}
category.Breadcrumbs = breadcrumbs;
category.Breadcrumbs = breadcrumbs + " >> " + category.Name;
}
else
{
category.Breadcrumbs = item.Name;
}
list.Add(category);
if (data.Count(p => p.ParentId == item.Id) > 0)
{
List childlist = new List();
childlist = BuildCategoryList(childlist, data, item.Id);
list.AddRange(childlist);
}
}
return list;
}
public async Task GetProductCategoryById(long id, Category? data = null)
{
var cacheData = await GetProductCategories();
if (data != null)
{
var category = cacheData.SingleOrDefault(p => p.Id == id);
if (category != null)
{
cacheData.Remove(category);
cacheData.Add(data);
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
else
{
cacheData.Add(data);
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
return data;
}
else
{
var category = cacheData.SingleOrDefault(p => p.Id == id);
if (category == null)
{
category = _dbContext.Categories.SingleOrDefault(p => p.Id == id);
if (category != null)
{
cacheData.Add(category);
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
}
return category;
}
}
public async Task RemoveProductCategory(long id)
{
var cacheData = await GetProductCategories();
if (cacheData != null)
{
var data = cacheData.SingleOrDefault(p => p.Id == id);
if (data != null)
{
cacheData.Remove(data);
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
}
}
public async Task> GetContentCategories(List? data = null)
{
var cacheData = await GetCacheAsync>(CacheKeys.ContentCategories);
if (data != null)
{
cacheData = data;
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
else
{
if (cacheData == null)
{
return new List();
}
}
return cacheData;
}
///
/// 获取可用的缓存信息
///
///
///
public async Task> GetProductCategories(bool? reload = false)
{
var cacheData = await GetCacheAsync>(CacheKeys.ProductCategories);
bool needReload = reload.HasValue ? reload.Value : false;
if (cacheData == null || needReload)
{
var data = _dbContext.Categories.Where(p => p.Type == (int)CategoryType.Product && p.Enabled).ToList();
cacheData = data;
await SetCacheAsync(CacheKeys.ProductCategories, cacheData);
}
else
{
if (cacheData == null)
{
return new List();
}
}
return cacheData;
}
public async Task GetContentCategoryById(long id, Category? data = null)
{
var cacheData = await GetContentCategories();
if (data != null)
{
var category = cacheData.SingleOrDefault(p => p.Id == id);
if (category != null)
{
cacheData.Remove(category);
cacheData.Add(data);
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
else
{
cacheData.Add(data);
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
return data;
}
else
{
var category = cacheData.SingleOrDefault(p => p.Id == id);
if (category == null)
{
category = _dbContext.Categories.SingleOrDefault(p => p.Id == id);
if (category != null)
{
cacheData.Add(category);
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
}
return category;
}
}
public async Task RemoveContentCategory(long id)
{
var cacheData = await GetContentCategories();
if (cacheData != null)
{
var data = cacheData.SingleOrDefault(p => p.Id == id);
if (data != null)
{
cacheData.Remove(data);
await SetCacheAsync(CacheKeys.ContentCategories, cacheData);
}
}
}
}
}