midway-fatcms 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/.qoder/skills/midway-fatcms-crud/SKILL.md +375 -0
  2. package/.qoder/skills/midway-fatcms-crud/examples.md +990 -0
  3. package/.qoder/skills/midway-fatcms-crud/reference.md +568 -0
  4. package/README.md +377 -134
  5. package/dist/controller/manage/CrudStandardDesignApi.d.ts +0 -2
  6. package/dist/controller/manage/CrudStandardDesignApi.js +11 -85
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +2 -0
  9. package/dist/libs/crud-pro/CrudPro.d.ts +9 -1
  10. package/dist/libs/crud-pro/CrudPro.js +15 -0
  11. package/dist/libs/crud-pro/README.md +809 -0
  12. package/dist/libs/crud-pro/README_FUNC.md +193 -0
  13. package/dist/libs/crud-pro/exceptions.d.ts +2 -0
  14. package/dist/libs/crud-pro/exceptions.js +2 -0
  15. package/dist/libs/crud-pro/interfaces.d.ts +34 -1
  16. package/dist/libs/crud-pro/models/ExecuteContext.d.ts +3 -3
  17. package/dist/libs/crud-pro/models/ExecuteContext.js +2 -0
  18. package/dist/libs/crud-pro/models/RequestModel.d.ts +6 -2
  19. package/dist/libs/crud-pro/models/RequestModel.js +20 -53
  20. package/dist/libs/crud-pro/models/ResModel.d.ts +6 -4
  21. package/dist/libs/crud-pro/models/ServiceHub.d.ts +1 -0
  22. package/dist/libs/crud-pro/models/keys.d.ts +6 -1
  23. package/dist/libs/crud-pro/models/keys.js +5 -0
  24. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.d.ts +52 -0
  25. package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.js +158 -0
  26. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +20 -1
  27. package/dist/libs/crud-pro/services/CrudProFieldValidateService.d.ts +7 -0
  28. package/dist/libs/crud-pro/services/CrudProFieldValidateService.js +32 -0
  29. package/dist/libs/crud-pro/services/CrudProGenSqlService.d.ts +13 -0
  30. package/dist/libs/crud-pro/services/CrudProGenSqlService.js +44 -7
  31. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.d.ts +43 -0
  32. package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +132 -1
  33. package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +15 -1
  34. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +107 -0
  35. package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +5 -1
  36. package/dist/libs/crud-pro/services/CurdProServiceHub.js +11 -0
  37. package/dist/libs/crud-pro/utils/DateTimeUtils.d.ts +1 -0
  38. package/dist/libs/crud-pro/utils/DateTimeUtils.js +3 -0
  39. package/dist/libs/crud-pro/utils/MixinUtils.d.ts +32 -0
  40. package/dist/libs/crud-pro/utils/MixinUtils.js +85 -1
  41. package/dist/libs/crud-pro/utils/OrderByUtils.d.ts +70 -0
  42. package/dist/libs/crud-pro/utils/OrderByUtils.js +158 -0
  43. package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
  44. package/dist/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
  45. package/dist/libs/crud-sharding/ShardingConfig.d.ts +218 -0
  46. package/dist/libs/crud-sharding/ShardingConfig.js +32 -0
  47. package/dist/libs/crud-sharding/ShardingCountCache.d.ts +69 -0
  48. package/dist/libs/crud-sharding/ShardingCountCache.js +160 -0
  49. package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +363 -0
  50. package/dist/libs/crud-sharding/ShardingCrudPro.js +675 -0
  51. package/dist/libs/crud-sharding/ShardingMerger.d.ts +130 -0
  52. package/dist/libs/crud-sharding/ShardingMerger.js +282 -0
  53. package/dist/libs/crud-sharding/ShardingRouter.d.ts +69 -0
  54. package/dist/libs/crud-sharding/ShardingRouter.js +377 -0
  55. package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +146 -0
  56. package/dist/libs/crud-sharding/ShardingTableCreator.js +805 -0
  57. package/dist/libs/crud-sharding/ShardingUtils.d.ts +38 -0
  58. package/dist/libs/crud-sharding/ShardingUtils.js +77 -0
  59. package/dist/libs/crud-sharding/index.d.ts +45 -0
  60. package/dist/libs/crud-sharding/index.js +55 -0
  61. package/dist/models/StandardColumns.d.ts +71 -0
  62. package/dist/models/StandardColumns.js +28 -0
  63. package/dist/service/SysAppService.js +2 -2
  64. package/dist/service/SysConfigService.js +1 -1
  65. package/dist/service/SysDictDataService.js +2 -2
  66. package/dist/service/SysMenuService.js +1 -1
  67. package/dist/service/UserAccountService.d.ts +1 -1
  68. package/dist/service/crudstd/CrudStdService.d.ts +0 -1
  69. package/dist/service/crudstd/CrudStdService.js +0 -27
  70. package/dist/service/curd/CrudProQuick.d.ts +134 -4
  71. package/dist/service/curd/CrudProQuick.js +155 -3
  72. package/dist/service/curd/CurdMixService.d.ts +2 -1
  73. package/dist/service/curd/CurdMixService.js +5 -1
  74. package/dist/service/curd/CurdProService.d.ts +44 -2
  75. package/dist/service/curd/CurdProService.js +53 -1
  76. package/dist/service/curd/README.md +1100 -0
  77. package/dist/service/curd/fixSoftDelete.d.ts +14 -0
  78. package/dist/service/curd/fixSoftDelete.js +29 -11
  79. package/dist/service/flow/FlowConfigService.js +1 -1
  80. package/dist/service/flow/FlowInstanceCrudService.js +1 -1
  81. package/package.json +4 -1
  82. package/src/controller/gateway/AsyncTaskController.ts +1 -1
  83. package/src/controller/manage/CrudStandardDesignApi.ts +16 -100
  84. package/src/index.ts +3 -0
  85. package/src/libs/crud-pro/CrudPro.ts +19 -1
  86. package/src/libs/crud-pro/README.md +809 -0
  87. package/src/libs/crud-pro/README_FUNC.md +193 -0
  88. package/src/libs/crud-pro/exceptions.ts +2 -0
  89. package/src/libs/crud-pro/interfaces.ts +38 -1
  90. package/src/libs/crud-pro/models/ExecuteContext.ts +6 -3
  91. package/src/libs/crud-pro/models/RequestModel.ts +23 -65
  92. package/src/libs/crud-pro/models/ResModel.ts +10 -4
  93. package/src/libs/crud-pro/models/ServiceHub.ts +2 -0
  94. package/src/libs/crud-pro/models/keys.ts +5 -0
  95. package/src/libs/crud-pro/services/CrudProDataTypeConvertService.ts +171 -0
  96. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +24 -1
  97. package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +53 -1
  98. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +51 -7
  99. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +159 -2
  100. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +139 -1
  101. package/src/libs/crud-pro/services/CurdProServiceHub.ts +16 -1
  102. package/src/libs/crud-pro/utils/DateTimeUtils.ts +3 -0
  103. package/src/libs/crud-pro/utils/MixinUtils.ts +97 -1
  104. package/src/libs/crud-pro/utils/OrderByUtils.ts +169 -0
  105. package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -1
  106. package/src/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
  107. package/src/libs/crud-sharding/ShardingConfig.ts +240 -0
  108. package/src/libs/crud-sharding/ShardingCountCache.ts +200 -0
  109. package/src/libs/crud-sharding/ShardingCrudPro.ts +835 -0
  110. package/src/libs/crud-sharding/ShardingMerger.ts +384 -0
  111. package/src/libs/crud-sharding/ShardingRouter.ts +512 -0
  112. package/src/libs/crud-sharding/ShardingTableCreator.ts +1007 -0
  113. package/src/libs/crud-sharding/ShardingUtils.ts +84 -0
  114. package/src/libs/crud-sharding/index.ts +64 -0
  115. package/src/models/StandardColumns.ts +76 -0
  116. package/src/service/FileCenterService.ts +1 -1
  117. package/src/service/SysAppService.ts +2 -2
  118. package/src/service/SysConfigService.ts +1 -1
  119. package/src/service/SysDictDataService.ts +2 -2
  120. package/src/service/SysMenuService.ts +2 -2
  121. package/src/service/WorkbenchService.ts +1 -1
  122. package/src/service/anyapi/AnyApiService.ts +1 -1
  123. package/src/service/asyncTask/AsyncTaskRunnerService.ts +1 -1
  124. package/src/service/crudstd/CrudStdService.ts +0 -32
  125. package/src/service/curd/CrudProQuick.ts +164 -5
  126. package/src/service/curd/CurdMixService.ts +7 -2
  127. package/src/service/curd/CurdProService.ts +62 -3
  128. package/src/service/curd/README.md +1100 -0
  129. package/src/service/curd/fixCfgModel.ts +1 -2
  130. package/src/service/curd/fixSoftDelete.ts +38 -16
  131. package/src/service/flow/FlowConfigService.ts +1 -1
  132. package/src/service/flow/FlowInstanceCrudService.ts +1 -1
@@ -2,5 +2,19 @@ import { KeysOfSimpleSQL } from "../../libs/crud-pro/models/keys";
2
2
  import { IRequestModel } from "../../libs/crud-pro/interfaces";
3
3
  import { IRequestCfgModel2 } from "../../models/bizmodels";
4
4
  import { Context } from "@midwayjs/koa";
5
+ /**
6
+ * 软删除处理函数
7
+ *
8
+ * 当 cfgModel.enableSoftDelete === true 时,自动处理软删除逻辑:
9
+ *
10
+ * 1. INSERT 操作:自动设置 deleted_at = 0
11
+ * 2. DELETE 操作:转为 UPDATE,设置 deleted_at = 时间戳, deleted_by = 当前用户
12
+ * 3. QUERY 操作:自动添加 deleted_at = 0 条件
13
+ *
14
+ * @param oldSqlSimpleName 原始 SQL 类型
15
+ * @param cfgModel 配置模型
16
+ * @param params 请求参数(会被修改)
17
+ * @param ctx 请求上下文(用于获取当前用户信息)
18
+ */
5
19
  declare function fixSoftDelete(oldSqlSimpleName: KeysOfSimpleSQL, cfgModel: IRequestCfgModel2, params: IRequestModel, ctx?: Context): void;
6
20
  export { fixSoftDelete, };
@@ -2,42 +2,60 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fixSoftDelete = void 0;
4
4
  const keys_1 = require("../../libs/crud-pro/models/keys");
5
+ /**
6
+ * 软删除处理函数
7
+ *
8
+ * 当 cfgModel.enableSoftDelete === true 时,自动处理软删除逻辑:
9
+ *
10
+ * 1. INSERT 操作:自动设置 deleted_at = 0
11
+ * 2. DELETE 操作:转为 UPDATE,设置 deleted_at = 时间戳, deleted_by = 当前用户
12
+ * 3. QUERY 操作:自动添加 deleted_at = 0 条件
13
+ *
14
+ * @param oldSqlSimpleName 原始 SQL 类型
15
+ * @param cfgModel 配置模型
16
+ * @param params 请求参数(会被修改)
17
+ * @param ctx 请求上下文(用于获取当前用户信息)
18
+ */
5
19
  function fixSoftDelete(oldSqlSimpleName, cfgModel, params, ctx) {
6
20
  var _a;
7
- // 没有开启软删除。不做处理,直接物理删除
21
+ // 没有开启软删除,不做处理,直接物理删除
8
22
  if (cfgModel.enableSoftDelete !== true) {
9
23
  return;
10
24
  }
11
- // 刚插入的话,肯定是未删除的
25
+ // INSERT 操作:刚插入的数据,肯定是未删除的
12
26
  if (keys_1.KeysOfSimpleSQL.SIMPLE_INSERT === oldSqlSimpleName) {
13
27
  if (!params.data) {
14
28
  params.data = {};
15
29
  }
16
- params.data.deleted_at = 0; // 默认值为 0; 0代表未删除
30
+ const dataObj = params.data;
31
+ dataObj.deleted_at = 0;
17
32
  }
18
- // 删除操作,如果是软删除修改为update语句。
19
- // 标准软删除:deleted_at 字段为0代表未删除,有任意时间字段代表已删除。
33
+ // DELETE 操作:如果是软删除,修改为 UPDATE 语句
34
+ // 标准软删除:deleted_at 字段为 0 代表未删除,有任意时间戳代表已删除
20
35
  if (keys_1.KeysOfSimpleSQL.SIMPLE_DELETE === oldSqlSimpleName) {
21
36
  if (!params.condition || Object.keys(params.condition).length === 0) {
22
37
  throw new Error('执行删除操作,必须指定删除条件');
23
38
  }
39
+ // 获取当前用户信息
40
+ const sessionInfo = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.userSession) === null || _a === void 0 ? void 0 : _a.getSessionInfo();
41
+ // 在原有 data 对象上添加软删除字段
24
42
  if (!params.data) {
25
43
  params.data = {};
26
44
  }
27
- const sessionInfo = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.userSession) === null || _a === void 0 ? void 0 : _a.getSessionInfo();
28
- params.data.deleted_at = Date.now(); // 默认值为 0; 0代表未删除
29
- params.data.deleted_by = (sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.accountId) || "";
30
- // 执行update操作
45
+ const dataObj = params.data;
46
+ dataObj.deleted_at = Date.now();
47
+ dataObj.deleted_by = (sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.accountId) || '';
48
+ // 改为执行 UPDATE 操作
31
49
  cfgModel.sqlSimpleName = keys_1.KeysOfSimpleSQL.SIMPLE_UPDATE;
32
50
  }
33
- // 查询操作。强制查询未删除的。
51
+ // QUERY 操作:强制查询未删除的记录
34
52
  if (keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_ONE === oldSqlSimpleName
35
53
  || keys_1.KeysOfSimpleSQL.SIMPLE_QUERY === oldSqlSimpleName
36
54
  || keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_PAGE === oldSqlSimpleName) {
37
55
  if (!params.condition) {
38
56
  params.condition = {};
39
57
  }
40
- params.condition.deleted_at = 0; // 未删除
58
+ params.condition.deleted_at = 0;
41
59
  }
42
60
  }
43
61
  exports.fixSoftDelete = fixSoftDelete;
@@ -47,7 +47,7 @@ exports.ParsedFlowConfig = ParsedFlowConfig;
47
47
  let FlowConfigService = class FlowConfigService extends BaseService_1.BaseService {
48
48
  get flow_config() {
49
49
  const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
50
- return this.curdProService.getBbUtil(SystemDbName, SystemDbType, FlowModel_1.FLOW_TABLES.flow_config);
50
+ return this.curdProService.getQuickCrud(SystemDbName, SystemDbType, FlowModel_1.FLOW_TABLES.flow_config);
51
51
  }
52
52
  toCacheKey(flow_code, flow_version) {
53
53
  if (!flow_code || typeof flow_code !== 'string') {
@@ -23,7 +23,7 @@ exports.getCurrentDateTime = getCurrentDateTime;
23
23
  let FlowInstanceCrudService = class FlowInstanceCrudService extends BaseService_1.BaseService {
24
24
  get flowDB() {
25
25
  const { FlowDbName, FlowDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
26
- const util = this.curdProService.getBbUtil(FlowDbName, FlowDbType);
26
+ const util = this.curdProService.getQuickCrud(FlowDbName, FlowDbType);
27
27
  util.setBaseCfgModel({ maxLimit: 100000 });
28
28
  return util;
29
29
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "midway-fatcms",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "This is a midway component sample",
5
5
  "main": "dist/index.js",
6
6
  "typings": "index.d.ts",
@@ -22,12 +22,15 @@
22
22
  "dist/**/*.d.ts",
23
23
  "dist/**/*.html",
24
24
  "dist/**/*.ico",
25
+ "dist/**/*.md",
25
26
  "src/**/*.txt",
26
27
  "src/**/*.js",
27
28
  "src/**/*.ts",
28
29
  "src/**/*.d.ts",
29
30
  "src/**/*.html",
30
31
  "src/**/*.ico",
32
+ "src/**/*.md",
33
+ ".qoder/**/*.md",
31
34
  "index.d.ts",
32
35
  "tsconfig.json",
33
36
  ".prettierrc.js",
@@ -111,7 +111,7 @@ export class AsyncTaskController extends BaseApiController {
111
111
  },
112
112
  };
113
113
  const res = await this.executeSysSimpleSQL(SystemTables.sys_async_tasks, KeysOfSimpleSQL.SIMPLE_QUERY_ONE);
114
- const taskObj: SysAsyncTaskEntity = res.getOneObj();
114
+ const taskObj = res.getOneObj() as SysAsyncTaskEntity;
115
115
  if (!taskObj) {
116
116
  throw new CommonException('任务不存在');
117
117
  }
@@ -62,34 +62,22 @@ export class CrudStandardDesignApi extends BaseApiController {
62
62
  const { databaseName } = this.ctx.request.body as any;
63
63
  const { dbType, dbName } = parseDatabaseName(databaseName);
64
64
 
65
- if (dbType === SqlDbType.postgres) {
66
- return this.getTableListOfPostgreSQL(dbName);
67
- }
68
-
69
- if (dbType === SqlDbType.sqlserver) {
70
- return this.getTableListOfSqlserver(dbName);
71
- }
72
-
73
- const res = await this.curdMixService.executeSQL({
74
- executeSql: 'SHOW TABLES',
75
- sqlDatabase: dbName,
76
- sqlDbType: SqlDbType.mysql,
77
- crudType: KeyOfCrudTypes.SYS_QUERY,
78
- });
79
-
80
- const arr = JSON.parse(JSON.stringify(res));
81
- const tableNames: string[] = arr.map(a => {
82
- const v = Object.values(a);
83
- const tableName = v[0];
84
- return {
85
- value: tableName,
86
- label: tableName,
87
- dbName,
88
- dbType,
89
- tableName,
90
- };
91
- });
92
- return CommonResult.successRes(tableNames);
65
+ // 使用 CrudProTableMetaService 获取所有表和视图信息(跳过缓存,强制刷新)
66
+ const { tables } = await this.curdMixService.getAllTableInfos(
67
+ { sqlDatabase: dbName, sqlDbType: dbType },
68
+ { skipCache: true, refreshCache: true }
69
+ );
70
+
71
+ const result = tables.map(table => ({
72
+ value: table.name,
73
+ label: table.name,
74
+ dbName,
75
+ dbType,
76
+ tableName: table.name,
77
+ tableType: table.tableType,
78
+ }));
79
+
80
+ return CommonResult.successRes(result);
93
81
  }
94
82
 
95
83
  @Post('/getTableFields')
@@ -162,78 +150,6 @@ export class CrudStandardDesignApi extends BaseApiController {
162
150
  return this.executeSysSimpleSQL(SystemTables.sys_perm_func, KeysOfSimpleSQL.SIMPLE_QUERY_PAGE);
163
151
  }
164
152
 
165
- private async getTableListOfSqlserver(dbName: string): Promise<CommonResult> {
166
- const dbConfig = this.sqlserver2Config[dbName];
167
- if (!dbConfig) {
168
- throw new CommonException('DB_NOT_FOUND', '数据库配置没有找到:' + dbName);
169
- }
170
-
171
- const dbType = SqlDbType.sqlserver;
172
-
173
- const sql = 'SELECT name as tablename FROM sys.tables';
174
- const arr = await this.curdMixService.executeSQL({
175
- executeSql: sql,
176
- sqlDatabase: dbName,
177
- sqlDbType: dbType,
178
- crudType: KeyOfCrudTypes.SYS_QUERY,
179
- executeSqlArgs: [],
180
- });
181
-
182
- const tableNames: string[] = arr.map(v => {
183
- const tableName = v.tablename;
184
- return {
185
- value: tableName, //[dbName, dbType, tableName].join(SPLIT_CONST),
186
- label: tableName,
187
- dbName,
188
- dbType,
189
- tableName,
190
- };
191
- });
192
- return CommonResult.successRes(tableNames);
193
- }
194
-
195
- private async getTableListOfPostgreSQL(dbName: string): Promise<CommonResult> {
196
- const dbConfig = this.postgres2Config[dbName];
197
- if (!dbConfig) {
198
- throw new CommonException('DB_NOT_FOUND', '数据库配置没有找到:' + dbName);
199
- }
200
-
201
- const dbType = SqlDbType.postgres;
202
- const schemaname = 'public';
203
-
204
- const tableListSql = '' + 'SELECT tablename\n' + 'FROM pg_tables\n' + `WHERE schemaname = '${schemaname}' \n` + 'ORDER BY tablename;';
205
-
206
- const viewListSql = '' + 'SELECT viewname as tablename\n' + 'FROM pg_views\n' + `WHERE schemaname = '${schemaname}' \n` + 'ORDER BY viewname;';
207
-
208
- const toSelectOptions = async (executeSql: string, tableType: string) => {
209
- const arr = await this.curdMixService.executeSQL({
210
- executeSql: executeSql,
211
- sqlDatabase: dbName,
212
- sqlDbType: dbType,
213
- crudType: KeyOfCrudTypes.SYS_QUERY,
214
- executeSqlArgs: [],
215
- });
216
- return arr.map(v => {
217
- const tableName = v.tablename;
218
- return {
219
- value: tableName, //[dbName, dbType, tableName].join(SPLIT_CONST),
220
- label: tableName,
221
- dbName,
222
- dbType,
223
- tableName,
224
- tableType,
225
- };
226
- });
227
- };
228
-
229
- const tableNames: any[] = await toSelectOptions(tableListSql, 'table');
230
- const viewNames: any[] = await toSelectOptions(viewListSql, 'view');
231
-
232
- const tableNameMerge = [...tableNames, ...viewNames];
233
-
234
- return CommonResult.successRes(tableNameMerge);
235
- }
236
-
237
153
  private async getTableFieldsOfSqlServer(dbName: string, tableName: string): Promise<CommonResult> {
238
154
  const dbConfig = this.sqlserver2Config[dbName];
239
155
  if (!dbConfig) {
package/src/index.ts CHANGED
@@ -87,6 +87,8 @@ export * from './models/contextLogger';
87
87
  export * from './models/devops';
88
88
  export * from './models/SystemTables';
89
89
  export * from './models/AsyncTaskModel';
90
+ export * from './models/StandardColumns';
91
+
90
92
  export * from './schedule/index';
91
93
 
92
94
  export * from './libs/utils/common-dto';
@@ -111,5 +113,6 @@ export * from './libs/crud-pro/models/ExecuteContextFunc';
111
113
  export * from './libs/crud-pro/models/RequestCfgModel';
112
114
  export * from './libs/crud-pro/models/SqlSegArg';
113
115
  export * from './libs/crud-pro/models/ResModel';
116
+ export * from './libs/crud-sharding/index';
114
117
 
115
118
  export * from './libs/global-config/global-config';
@@ -1,4 +1,4 @@
1
- import { ICrudProCfg, ILogger, IRequestCfgModel, IRequestModel, ISqlCfgModel, IVisitor } from './interfaces';
1
+ import { ICrudProCfg, ILogger, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery, IVisitor } from './interfaces';
2
2
  import { ExecuteContext } from './models/ExecuteContext';
3
3
  import { RequestModel } from './models/RequestModel';
4
4
  import { CurdProServiceHub } from './services/CurdProServiceHub';
@@ -110,7 +110,11 @@ class CrudPro {
110
110
  // 如果是 sqlSimpleName模式的 update/insert,则需要将 reqJson.data 部分根据真实的表结构进行过滤
111
111
  await this.filterDataByTableMetaIfNeeded(reqModel, cfgModel);
112
112
 
113
+ // 根据表结构字段类型,自动转换数据格式(如 PostgreSQL ARRAY 字段)
114
+ await this.convertDataFieldTypeIfNeeded(reqModel, cfgModel);
115
+
113
116
  // 参数校验
117
+ this.serviceHub.validateDataType(cfgModel, reqModel);
114
118
  this.serviceHub.validateByAllow(cfgModel, reqModel);
115
119
  this.serviceHub.validateByReject(cfgModel, reqModel);
116
120
  this.serviceHub.validateByCfg(cfgModel, reqModel);
@@ -148,6 +152,10 @@ class CrudPro {
148
152
  return this.serviceHub.getCachedCfgByMethod(method, isEnableCache);
149
153
  }
150
154
 
155
+ public async getAllTableInfos(query: ITableNamesQuery, options?: ITableNamesOptions): Promise<ITableListResult> {
156
+ return this.serviceHub.getAllTableInfos(query, options);
157
+ }
158
+
151
159
  /**
152
160
  * 如果是 INSERT/UPDATE 操作(sqlSimpleName 模式),根据真实表结构过滤 reqModel.data 中的字段
153
161
  * 避免传入不存在的字段导致 SQL 执行报错
@@ -215,6 +223,16 @@ class CrudPro {
215
223
  return insertOrUpdateTypes.includes(sqlSimpleName as KeysOfSimpleSQL);
216
224
  }
217
225
 
226
+ /**
227
+ * 根据表结构字段类型,自动转换数据格式
228
+ * 例如:PostgreSQL 的 ARRAY 类型字段,需要将 JSON 数组转为 PG 数组字面量格式
229
+ * @param reqModel 请求模型
230
+ * @param cfgModel 配置模型
231
+ */
232
+ private async convertDataFieldTypeIfNeeded(reqModel: RequestModel, cfgModel: RequestCfgModel): Promise<void> {
233
+ await this.serviceHub.convertDataTypeByTableMeta(reqModel, cfgModel);
234
+ }
235
+
218
236
  private async executeSQLList() {
219
237
  try {
220
238
  await this.serviceHub.executeSqlCfgModels();