using SqlSugar;
using System.Linq.Expressions;
using System.Reflection;
using Wood.Entity;
using Wood.Util;
namespace Wood.Data.Repository
{
public static class RepositoryExtension
{
#region 过滤器清除
///
/// 清除delete 过滤器
///
/// ISugarQueryable
public static ISugarQueryable ClearDeleteFilter(this SimpleClient repository) where T : EntityBase, new()
{
return repository.AsQueryable().ClearFilter();
}
///
/// 清除 数据范围 过滤器
///
/// ISugarQueryable
public static ISugarQueryable ClearDataScopeFilter(this SimpleClient repository) where T : EntityBase, new()
{
return repository.AsQueryable().ClearFilter();
}
///
/// 设置自定义 status 过滤器
///
/// ISugarQueryable
public static ISugarQueryable AddStatusFilter(this SimpleClient repository, int status = 1) where T : EntityBaseExtra, new()
{
var query = repository.AsQueryable();
return query.Where(it => status == it.Status);
}
///
/// 设置自定义 status 过滤器
///
/// ISugarQueryable
public static ISugarQueryable AddStatusFilter(this SimpleClient repository, params int[] status) where T : EntityBaseExtra, new()
{
var query = repository.AsQueryable();
return query.Where(it => status.Contains(it.Status));
}
#endregion
///
/// 实体假删除异步 _rep.FakeDeleteAsync(entity)
///
///
///
/// 要删除的实体
///
public static Task FakeDeleteAsync(this SimpleClient repository, T entity) where T : EntityBase, new()
{
entity.IsDelete = true;
return repository.Context.Updateable(entity).UpdateColumns(it => new { it.IsDelete, it.UpdateTime, it.UpdateUserId }).ExecuteCommandAsync();
}
///
/// 实体假删除 db.FakeDelete(entity)
///
///
///
///
///
public static Task FakeDeleteAsync(this SimpleClient repository, Expression> whereExpression) where T : EntityBase, new()
{
long? userId = GlobalContext.UserInfo?.UserId;
return repository.Context.Updateable()
.AS()
.SetColumns("IsDelete", true)
.SetColumns("UpdateUserId", userId)
.SetColumns("UpdateTime", DateTime.Now)
.Where(whereExpression)
.ExecuteCommandAsync();
}
///
/// 实体假删除 db.FakeDelete(entity)
///
///
///
///
///
public static Task FakeDeleteAsync(this SimpleClient repository, List entity) where T : EntityBase, new()
{
foreach (var item in entity)
item.IsDelete = true;
return repository.Context.Updateable(entity).UpdateColumns(it => new { it.IsDelete, it.UpdateTime, it.UpdateUserId }).ExecuteCommandAsync();
}
///
/// 根据表名查询
///
///
///
public static ISugarQueryable AS(this ISugarQueryable queryable)
{
var info = GetTableInfo();
return queryable.AS($"{info}");
}
///
/// 根据表名查询
///
///
///
///
///
public static ISugarQueryable AS(this ISugarQueryable queryable)
{
var info = GetTableInfo();
return queryable.AS($"{info}");
}
///
/// 根据表名更新
///
///
///
public static IUpdateable AS(this IUpdateable updateable) where T : EntityBase, new()
{
var info = GetTableInfo();
return updateable.AS($"{info}");
}
///
/// 根据表名新增
///
///
///
public static IInsertable AS(this IInsertable insertable) where T : EntityBase, new()
{
var info = GetTableInfo();
return insertable.AS($"{info}");
}
///
/// 根据表名删除
///
///
///
public static IDeleteable AS(this IDeleteable deleteable) where T : EntityBase, new()
{
var info = GetTableInfo();
return deleteable.AS($"{info}");
}
///
/// 根据实体类型获取表信息
///
///
///
private static string? GetTableInfo()
{
var entityType = typeof(T);
var tableName = entityType.GetCustomAttribute()?.TableName;
return tableName;
}
}
}