using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using Infrastructure;
using OpenAuth.App.Interface;
using OpenAuth.App.Response;
using SqlSugar;
using OpenAuth.App.Request;
namespace OpenAuth.App
{
///
/// 动态API应用层
/// 用于直接操作数据库表,不依赖实体
///
public class DynamicApiApp
{
private readonly ISqlSugarClient _client;
private readonly IAuth _auth;
private readonly IServiceProvider _serviceProvider;
public DynamicApiApp(ISqlSugarClient client, IAuth auth, IServiceProvider serviceProvider)
{
_client = client;
_auth = auth;
_serviceProvider = serviceProvider;
}
///
/// 获取表数据列表
///
/// 查询参数
///
public async Task GetList(QueryDynamicListReq req)
{
var result = new TableData();
try
{
// 验证表名是否存在
if (!TableExists(req.TableName))
{
result.code = 500;
result.msg = $"表不存在:{req.TableName}";
return result;
}
// 创建动态查询
var queryable = _client.Queryable().AS(req.TableName);
// 获取表结构
var columns = GetTableColumns(req.TableName);
// 如果有搜索关键字,尝试在常见字段中搜索
if (!string.IsNullOrEmpty(req.key))
{
//todo: 尝试在Name、Title等常见字段中搜索
var nameColumn = columns.FirstOrDefault(c =>
c.DbColumnName.Equals("Name", StringComparison.OrdinalIgnoreCase));
if (nameColumn != null)
{
queryable = queryable.Where($"{nameColumn.DbColumnName} like @key", new { key = $"%{req.key}%" });
}
}
// 获取总记录数
var total = await queryable.CountAsync();
// 分页查询
var list = await queryable
.OrderBy($"{columns[0].DbColumnName} DESC")
.Skip((req.page - 1) * req.limit)
.Take(req.limit)
.ToListAsync();
result.data = list;
result.count = total;
}
catch (Exception ex)
{
result.code = 500;
result.msg = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
///
/// 获取表数据详情
///
/// 表名称
/// 记录ID
///
public async Task> Get(QueryDynamicEntityReq req)
{
var result = new Response