diff --git a/OpenAuth.App/DynamicApiApp/DynamicApiApp.cs b/OpenAuth.App/DynamicApiApp/DynamicApiApp.cs
index 703332c8..30d60c79 100644
--- a/OpenAuth.App/DynamicApiApp/DynamicApiApp.cs
+++ b/OpenAuth.App/DynamicApiApp/DynamicApiApp.cs
@@ -1,18 +1,18 @@
using System;
using System.Linq;
-using System.Reflection;
using System.Threading.Tasks;
+using System.Collections.Generic;
using Infrastructure;
using OpenAuth.App.Interface;
using OpenAuth.App.Response;
-using OpenAuth.Repository.Core;
using SqlSugar;
+using OpenAuth.App.Request;
namespace OpenAuth.App
{
///
/// 动态API应用层
- /// 用于处理任意实体的CRUD操作
+ /// 用于直接操作数据库表,不依赖实体
///
public class DynamicApiApp
{
@@ -26,45 +26,39 @@ namespace OpenAuth.App
}
///
- /// 获取实体列表
+ /// 获取表数据列表
///
- /// 实体名称,例如:ExternalDataSource
- /// 页码
- /// 每页记录数
- /// 搜索关键字
+ /// 查询参数
///
- public async Task GetList(string entityName, int page = 1, int limit = 10, string key = "")
+ public async Task GetList(QueryDynamicListReq req)
{
var result = new TableData();
try
{
- // 获取实体类型
- var entityType = GetEntityType(entityName);
- if (entityType == null)
+ // 验证表名是否存在
+ if (!TableExists(req.TableName))
{
result.code = 500;
- result.msg = $"未找到实体:{entityName}";
+ result.msg = $"表不存在:{req.TableName}";
return result;
}
// 创建动态查询
- dynamic queryable = _client.GetType().GetMethod("Queryable", new Type[] { })
- .MakeGenericMethod(entityType)
- .Invoke(_client, null);
+ var queryable = _client.Queryable().AS(req.TableName);
+
+ // 获取表结构
+ var columns = GetTableColumns(req.TableName);
// 如果有搜索关键字,尝试在常见字段中搜索
- if (!string.IsNullOrEmpty(key))
+ if (!string.IsNullOrEmpty(req.key))
{
- // 获取实体的所有属性
- var properties = entityType.GetProperties();
+ //todo: 尝试在Name、Title等常见字段中搜索
+ var nameColumn = columns.FirstOrDefault(c =>
+ c.DbColumnName.Equals("Name", StringComparison.OrdinalIgnoreCase));
- // 尝试在Name、Title等常见字段中搜索
- var nameProperty = properties.FirstOrDefault(p =>
- p.Name.Equals("Name", StringComparison.OrdinalIgnoreCase));
-
- if (nameProperty != null)
+ if (nameColumn != null)
{
- queryable = queryable.Where($"{nameProperty.Name} like @key", new { key = $"%{key}%" });
+ queryable = queryable.Where($"{nameColumn.DbColumnName} like @key", new { key = $"%{req.key}%" });
}
}
@@ -72,9 +66,10 @@ namespace OpenAuth.App
var total = await queryable.CountAsync();
// 分页查询
- var list = await queryable.OrderBy("CreateTime DESC")
- .Skip((page - 1) * limit)
- .Take(limit)
+ var list = await queryable
+ .OrderBy($"{ columns[0].DbColumnName } DESC")
+ .Skip((req.page - 1) * req.limit)
+ .Take(req.limit)
.ToListAsync();
result.data = list;
@@ -90,31 +85,36 @@ namespace OpenAuth.App
}
///
- /// 获取实体详情
+ /// 获取表数据详情
///
- /// 实体名称,例如:ExternalDataSource
- /// 实体ID
+ /// 表名称
+ /// 记录ID
///
- public Response