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.
- package/.qoder/skills/midway-fatcms-crud/SKILL.md +375 -0
- package/.qoder/skills/midway-fatcms-crud/examples.md +990 -0
- package/.qoder/skills/midway-fatcms-crud/reference.md +568 -0
- package/README.md +377 -134
- package/dist/controller/manage/CrudStandardDesignApi.d.ts +0 -2
- package/dist/controller/manage/CrudStandardDesignApi.js +11 -85
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/libs/crud-pro/CrudPro.d.ts +9 -1
- package/dist/libs/crud-pro/CrudPro.js +15 -0
- package/dist/libs/crud-pro/README.md +809 -0
- package/dist/libs/crud-pro/README_FUNC.md +193 -0
- package/dist/libs/crud-pro/exceptions.d.ts +2 -0
- package/dist/libs/crud-pro/exceptions.js +2 -0
- package/dist/libs/crud-pro/interfaces.d.ts +34 -1
- package/dist/libs/crud-pro/models/ExecuteContext.d.ts +3 -3
- package/dist/libs/crud-pro/models/ExecuteContext.js +2 -0
- package/dist/libs/crud-pro/models/RequestModel.d.ts +6 -2
- package/dist/libs/crud-pro/models/RequestModel.js +20 -53
- package/dist/libs/crud-pro/models/ResModel.d.ts +6 -4
- package/dist/libs/crud-pro/models/ServiceHub.d.ts +1 -0
- package/dist/libs/crud-pro/models/keys.d.ts +6 -1
- package/dist/libs/crud-pro/models/keys.js +5 -0
- package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.d.ts +52 -0
- package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.js +158 -0
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +20 -1
- package/dist/libs/crud-pro/services/CrudProFieldValidateService.d.ts +7 -0
- package/dist/libs/crud-pro/services/CrudProFieldValidateService.js +32 -0
- package/dist/libs/crud-pro/services/CrudProGenSqlService.d.ts +13 -0
- package/dist/libs/crud-pro/services/CrudProGenSqlService.js +44 -7
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.d.ts +43 -0
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +132 -1
- package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +15 -1
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +107 -0
- package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +5 -1
- package/dist/libs/crud-pro/services/CurdProServiceHub.js +11 -0
- package/dist/libs/crud-pro/utils/DateTimeUtils.d.ts +1 -0
- package/dist/libs/crud-pro/utils/DateTimeUtils.js +3 -0
- package/dist/libs/crud-pro/utils/MixinUtils.d.ts +32 -0
- package/dist/libs/crud-pro/utils/MixinUtils.js +85 -1
- package/dist/libs/crud-pro/utils/OrderByUtils.d.ts +70 -0
- package/dist/libs/crud-pro/utils/OrderByUtils.js +158 -0
- package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
- package/dist/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
- package/dist/libs/crud-sharding/ShardingConfig.d.ts +218 -0
- package/dist/libs/crud-sharding/ShardingConfig.js +32 -0
- package/dist/libs/crud-sharding/ShardingCountCache.d.ts +69 -0
- package/dist/libs/crud-sharding/ShardingCountCache.js +160 -0
- package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +363 -0
- package/dist/libs/crud-sharding/ShardingCrudPro.js +675 -0
- package/dist/libs/crud-sharding/ShardingMerger.d.ts +130 -0
- package/dist/libs/crud-sharding/ShardingMerger.js +282 -0
- package/dist/libs/crud-sharding/ShardingRouter.d.ts +69 -0
- package/dist/libs/crud-sharding/ShardingRouter.js +377 -0
- package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +146 -0
- package/dist/libs/crud-sharding/ShardingTableCreator.js +805 -0
- package/dist/libs/crud-sharding/ShardingUtils.d.ts +38 -0
- package/dist/libs/crud-sharding/ShardingUtils.js +77 -0
- package/dist/libs/crud-sharding/index.d.ts +45 -0
- package/dist/libs/crud-sharding/index.js +55 -0
- package/dist/models/StandardColumns.d.ts +71 -0
- package/dist/models/StandardColumns.js +28 -0
- package/dist/service/SysAppService.js +2 -2
- package/dist/service/SysConfigService.js +1 -1
- package/dist/service/SysDictDataService.js +2 -2
- package/dist/service/SysMenuService.js +1 -1
- package/dist/service/UserAccountService.d.ts +1 -1
- package/dist/service/crudstd/CrudStdService.d.ts +0 -1
- package/dist/service/crudstd/CrudStdService.js +0 -27
- package/dist/service/curd/CrudProQuick.d.ts +134 -4
- package/dist/service/curd/CrudProQuick.js +155 -3
- package/dist/service/curd/CurdMixService.d.ts +2 -1
- package/dist/service/curd/CurdMixService.js +5 -1
- package/dist/service/curd/CurdProService.d.ts +44 -2
- package/dist/service/curd/CurdProService.js +53 -1
- package/dist/service/curd/README.md +1100 -0
- package/dist/service/curd/fixSoftDelete.d.ts +14 -0
- package/dist/service/curd/fixSoftDelete.js +29 -11
- package/dist/service/flow/FlowConfigService.js +1 -1
- package/dist/service/flow/FlowInstanceCrudService.js +1 -1
- package/package.json +4 -1
- package/src/controller/gateway/AsyncTaskController.ts +1 -1
- package/src/controller/manage/CrudStandardDesignApi.ts +16 -100
- package/src/index.ts +3 -0
- package/src/libs/crud-pro/CrudPro.ts +19 -1
- package/src/libs/crud-pro/README.md +809 -0
- package/src/libs/crud-pro/README_FUNC.md +193 -0
- package/src/libs/crud-pro/exceptions.ts +2 -0
- package/src/libs/crud-pro/interfaces.ts +38 -1
- package/src/libs/crud-pro/models/ExecuteContext.ts +6 -3
- package/src/libs/crud-pro/models/RequestModel.ts +23 -65
- package/src/libs/crud-pro/models/ResModel.ts +10 -4
- package/src/libs/crud-pro/models/ServiceHub.ts +2 -0
- package/src/libs/crud-pro/models/keys.ts +5 -0
- package/src/libs/crud-pro/services/CrudProDataTypeConvertService.ts +171 -0
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +24 -1
- package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +53 -1
- package/src/libs/crud-pro/services/CrudProGenSqlService.ts +51 -7
- package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +159 -2
- package/src/libs/crud-pro/services/CrudProTableMetaService.ts +139 -1
- package/src/libs/crud-pro/services/CurdProServiceHub.ts +16 -1
- package/src/libs/crud-pro/utils/DateTimeUtils.ts +3 -0
- package/src/libs/crud-pro/utils/MixinUtils.ts +97 -1
- package/src/libs/crud-pro/utils/OrderByUtils.ts +169 -0
- package/src/libs/crud-pro/utils/ValidateUtils.ts +1 -1
- package/src/libs/crud-sharding/ROUTING_LOGIC.md +944 -0
- package/src/libs/crud-sharding/ShardingConfig.ts +240 -0
- package/src/libs/crud-sharding/ShardingCountCache.ts +200 -0
- package/src/libs/crud-sharding/ShardingCrudPro.ts +835 -0
- package/src/libs/crud-sharding/ShardingMerger.ts +384 -0
- package/src/libs/crud-sharding/ShardingRouter.ts +512 -0
- package/src/libs/crud-sharding/ShardingTableCreator.ts +1007 -0
- package/src/libs/crud-sharding/ShardingUtils.ts +84 -0
- package/src/libs/crud-sharding/index.ts +64 -0
- package/src/models/StandardColumns.ts +76 -0
- package/src/service/FileCenterService.ts +1 -1
- package/src/service/SysAppService.ts +2 -2
- package/src/service/SysConfigService.ts +1 -1
- package/src/service/SysDictDataService.ts +2 -2
- package/src/service/SysMenuService.ts +2 -2
- package/src/service/WorkbenchService.ts +1 -1
- package/src/service/anyapi/AnyApiService.ts +1 -1
- package/src/service/asyncTask/AsyncTaskRunnerService.ts +1 -1
- package/src/service/crudstd/CrudStdService.ts +0 -32
- package/src/service/curd/CrudProQuick.ts +164 -5
- package/src/service/curd/CurdMixService.ts +7 -2
- package/src/service/curd/CurdProService.ts +62 -3
- package/src/service/curd/README.md +1100 -0
- package/src/service/curd/fixCfgModel.ts +1 -2
- package/src/service/curd/fixSoftDelete.ts +38 -16
- package/src/service/flow/FlowConfigService.ts +1 -1
- package/src/service/flow/FlowInstanceCrudService.ts +1 -1
|
@@ -15,6 +15,11 @@ class CrudProQuick {
|
|
|
15
15
|
this.curdPro = args.curdPro;
|
|
16
16
|
this.sqlTable = args.sqlTable; // 全局sqlTable为空时,单独调用时就必须传sqlTable参数。
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* 设置基础配置模型,合并到实例的 baseCfgModel 中,后续所有 CRUD 操作都会携带这些配置
|
|
20
|
+
* 例如可以统一设置 maxLimit、sqlSimpleName 等公共参数,避免每次调用都重复传入
|
|
21
|
+
* @param baseCfgModel 要合并的配置项
|
|
22
|
+
*/
|
|
18
23
|
setBaseCfgModel(baseCfgModel) {
|
|
19
24
|
Object.assign(this.baseCfgModel, baseCfgModel);
|
|
20
25
|
}
|
|
@@ -89,6 +94,13 @@ class CrudProQuick {
|
|
|
89
94
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
90
95
|
return res.getResRows();
|
|
91
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* 分页查询数据列表,返回包含 rows 和 total_count 的分页结果
|
|
99
|
+
* 内部使用 SIMPLE_QUERY_PAGE 模式,reqJson 中可传入 pageNo、pageSize 控制分页
|
|
100
|
+
* @param reqJson 请求参数,支持 condition(查询条件)、pageNo、pageSize 等
|
|
101
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
102
|
+
* @returns ResModelPageQuery 包含 rows(数据行数组)和 total_count(总记录数)
|
|
103
|
+
*/
|
|
92
104
|
async getListPage(reqJson, sqlTable) {
|
|
93
105
|
const cfgModel = {
|
|
94
106
|
sqlTable,
|
|
@@ -97,6 +109,28 @@ class CrudProQuick {
|
|
|
97
109
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
98
110
|
return res.getResModelForQueryPage();
|
|
99
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 判断满足条件的记录是否存在
|
|
114
|
+
* 内部使用 SIMPLE_QUERY_EXIST 模式,通过 SELECT EXISTS 子查询实现,找到首条匹配即返回,比 COUNT(*) 更高效
|
|
115
|
+
* @param reqJson 请求参数,通过 condition 指定查询条件
|
|
116
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
117
|
+
* @returns boolean 存在返回 true,不存在返回 false
|
|
118
|
+
*/
|
|
119
|
+
async isExist(reqJson, sqlTable) {
|
|
120
|
+
const cfgModel = {
|
|
121
|
+
sqlTable,
|
|
122
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_QUERY_EXIST,
|
|
123
|
+
};
|
|
124
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
125
|
+
return res.getResModel().is_exist;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 查询满足条件的记录总数
|
|
129
|
+
* 内部使用 SIMPLE_QUERY_COUNT 模式,仅返回 count 结果
|
|
130
|
+
* @param reqJson 请求参数,通过 condition 指定查询条件
|
|
131
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
132
|
+
* @returns number 满足条件的记录总数
|
|
133
|
+
*/
|
|
100
134
|
async getTotalCount(reqJson, sqlTable) {
|
|
101
135
|
const cfgModel = {
|
|
102
136
|
sqlTable,
|
|
@@ -105,6 +139,13 @@ class CrudProQuick {
|
|
|
105
139
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
106
140
|
return res.getResModel().total_count;
|
|
107
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* 插入一条数据记录
|
|
144
|
+
* 内部使用 SIMPLE_INSERT 模式,通过 reqJson.data 传入要插入的字段和值
|
|
145
|
+
* @param reqJson 请求参数,data 字段中包含要插入的键值对
|
|
146
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
147
|
+
* @returns ResModelAffected 包含受影响的行数信息
|
|
148
|
+
*/
|
|
108
149
|
async insertObject(reqJson, sqlTable) {
|
|
109
150
|
const cfgModel = {
|
|
110
151
|
sqlTable,
|
|
@@ -113,6 +154,36 @@ class CrudProQuick {
|
|
|
113
154
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
114
155
|
return res.getResModel().affected;
|
|
115
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* 批量插入数据记录
|
|
159
|
+
* 内部使用 SIMPLE_BATCH_INSERT 模式,单条 SQL 插入多行数据,效率远高于循环单条插入
|
|
160
|
+
*
|
|
161
|
+
* @param reqJson 请求参数,data 为对象数组 [{name:'a'},{name:'b'}]
|
|
162
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
163
|
+
* @returns ResModelAffected 包含受影响的行数信息
|
|
164
|
+
*
|
|
165
|
+
* 注意事项:
|
|
166
|
+
* - affectedRows: 返回实际插入的行数,所有数据库均正确返回
|
|
167
|
+
* - insertId: 仅返回第一条记录的自增ID,后续记录的ID需通过 insertId + index 推算
|
|
168
|
+
* - MySQL: 返回第一条的 insertId
|
|
169
|
+
* - PostgreSQL: RETURNING * 返回所有行,但仅取第一条的 id
|
|
170
|
+
* - SQL Server: OUTPUT 返回所有行,但仅取第一条的 id
|
|
171
|
+
*/
|
|
172
|
+
async batchInsert(reqJson, sqlTable) {
|
|
173
|
+
const cfgModel = {
|
|
174
|
+
sqlTable,
|
|
175
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_BATCH_INSERT,
|
|
176
|
+
};
|
|
177
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
178
|
+
return res.getResModel().affected;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 更新数据记录
|
|
182
|
+
* 内部使用 SIMPLE_UPDATE 模式,通过 reqJson.data 传入要更新的字段和值,通过 reqJson.condition 指定更新条件
|
|
183
|
+
* @param reqJson 请求参数,data 为更新内容,condition 为更新条件
|
|
184
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
185
|
+
* @returns ResModelAffected 包含受影响的行数信息
|
|
186
|
+
*/
|
|
116
187
|
async updateObject(reqJson, sqlTable) {
|
|
117
188
|
const cfgModel = {
|
|
118
189
|
sqlTable,
|
|
@@ -121,6 +192,13 @@ class CrudProQuick {
|
|
|
121
192
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
122
193
|
return res.getResModel().affected;
|
|
123
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* 插入或更新数据记录(upsert)
|
|
197
|
+
* 内部使用 SIMPLE_INSERT_OR_UPDATE 模式,若记录已存在则更新,不存在则插入
|
|
198
|
+
* @param reqJson 请求参数,data 为要插入/更新的内容,condition 为判断条件
|
|
199
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
200
|
+
* @returns ResModelStandard 返回完整的结果模型,包含 affected、insertId 等多种返回值
|
|
201
|
+
*/
|
|
124
202
|
async insertOrUpdate(reqJson, sqlTable) {
|
|
125
203
|
const cfgModel = {
|
|
126
204
|
sqlTable,
|
|
@@ -129,6 +207,37 @@ class CrudProQuick {
|
|
|
129
207
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
130
208
|
return res.getResModel(); // 因为它有三个返回值
|
|
131
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* 使用数据库原生 upsert 语法插入或更新(ON DUPLICATE KEY UPDATE / ON CONFLICT / MERGE)
|
|
212
|
+
* 内部使用 SIMPLE_INSERT_ON_DUPLICATE_UPDATE 模式,单条 SQL 完成 upsert,效率更高
|
|
213
|
+
*
|
|
214
|
+
* 数据库差异:
|
|
215
|
+
* - MySQL: ON DUPLICATE KEY UPDATE(依赖唯一索引/主键)
|
|
216
|
+
* - PostgreSQL: ON CONFLICT (...) DO UPDATE(需配置 uniqueColumn)
|
|
217
|
+
* - SQL Server: IF EXISTS ... ELSE ...(需配置 uniqueColumn,仅支持单列)
|
|
218
|
+
*
|
|
219
|
+
* @param reqJson 请求参数,data 为要插入/更新的内容
|
|
220
|
+
* @param uniqueColumn 唯一列名(PostgreSQL/SQL Server 必需),PostgreSQL 支持多列,SQL Server 仅支持单列
|
|
221
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
222
|
+
* @returns ResModelAffected 包含受影响的行数信息
|
|
223
|
+
*/
|
|
224
|
+
async insertOnDuplicate(reqJson, uniqueColumn, sqlTable) {
|
|
225
|
+
const cfgModel = {
|
|
226
|
+
sqlTable,
|
|
227
|
+
sqlSimpleName: keys_1.KeysOfSimpleSQL.SIMPLE_INSERT_ON_DUPLICATE_UPDATE,
|
|
228
|
+
uniqueColumn,
|
|
229
|
+
};
|
|
230
|
+
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
231
|
+
return res.getResModel().affected;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* 删除数据记录
|
|
235
|
+
* 内部使用 SIMPLE_DELETE 模式,通过 reqJson.condition 指定删除条件
|
|
236
|
+
* 注意:如果启用了软删除,实际执行的是更新操作而非物理删除
|
|
237
|
+
* @param reqJson 请求参数,condition 为删除条件
|
|
238
|
+
* @param sqlTable 数据库表名,若构造实例时已设置全局 sqlTable 则可省略
|
|
239
|
+
* @returns ResModelAffected 包含受影响的行数信息
|
|
240
|
+
*/
|
|
132
241
|
async deleteObject(reqJson, sqlTable) {
|
|
133
242
|
const cfgModel = {
|
|
134
243
|
sqlTable,
|
|
@@ -137,6 +246,13 @@ class CrudProQuick {
|
|
|
137
246
|
const res = await this.executeCrudByCfg(reqJson, cfgModel);
|
|
138
247
|
return res.getResModel().affected;
|
|
139
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* 执行自定义 SQL 语句(经 CrudPro 框架封装处理)
|
|
251
|
+
* 与 executeNativeSQL 不同,此方法执行的 SQL 会经过框架的参数绑定等安全处理
|
|
252
|
+
* @param executeSql 要执行的 SQL 语句,支持参数占位符
|
|
253
|
+
* @param args SQL 参数数组,与占位符一一对应
|
|
254
|
+
* @returns any SQL 执行结果
|
|
255
|
+
*/
|
|
140
256
|
async executeSQL(executeSql, args) {
|
|
141
257
|
const sqlCfgModel = {
|
|
142
258
|
executeSql: executeSql,
|
|
@@ -148,9 +264,45 @@ class CrudProQuick {
|
|
|
148
264
|
return await this.curdPro.executeSQL(sqlCfgModel);
|
|
149
265
|
}
|
|
150
266
|
/**
|
|
151
|
-
* 执行数据库的原生SQL
|
|
152
|
-
*
|
|
153
|
-
*
|
|
267
|
+
* 执行数据库的原生SQL语句,不做任何封装
|
|
268
|
+
*
|
|
269
|
+
* 返回值结构取决于 SQL 类型和数据库类型:
|
|
270
|
+
*
|
|
271
|
+
* **SELECT 查询**: 返回行数据数组
|
|
272
|
+
*
|
|
273
|
+
* **INSERT/UPDATE/DELETE**: 返回数据库驱动的原始结果
|
|
274
|
+
* - MySQL: `NativeSqlResultMySQL` - 包含 insertId、affectedRows、changedRows 等
|
|
275
|
+
* - PostgreSQL: 空数组(pg 驱动返回 rows 为空)
|
|
276
|
+
* - SQL Server: 空数组(mssql 驱动返回 recordset 为空)
|
|
277
|
+
*
|
|
278
|
+
* **注意**:
|
|
279
|
+
* - 使用 `?` 作为占位符,框架会自动转换为对应数据库的占位符
|
|
280
|
+
* - PostgreSQL/SQL Server 会将 `?` 转换为 `$1, $2, ...` 或 `@fatcms_ms1, @fatcms_ms2, ...`
|
|
281
|
+
*
|
|
282
|
+
* @typeParam T 返回值类型,默认 any。
|
|
283
|
+
* 预定义类型位于 `@/libs/crud-pro/models/ResModel`:
|
|
284
|
+
* - `NativeSqlSelectResult` - SELECT 查询返回的行数组
|
|
285
|
+
* - `NativeSqlResultMySQL` - MySQL INSERT/UPDATE/DELETE 返回结果
|
|
286
|
+
* - 或自定义行类型数组,如 `{id: number, name: string}[]`
|
|
287
|
+
*
|
|
288
|
+
* @param executeNativeSql 原生 SQL 语句,使用 `?` 作为参数占位符
|
|
289
|
+
* @param args 参数数组,与 SQL 中的 `?` 一一对应
|
|
290
|
+
* @returns 根据 SQL 类型返回对应结果
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* // SELECT 查询 - 使用自定义行类型
|
|
294
|
+
* const rows = await crudProQuick.executeNativeSQL<{id: number, name: string}[]>(
|
|
295
|
+
* 'SELECT id, name FROM user WHERE age > ?',
|
|
296
|
+
* [18]
|
|
297
|
+
* );
|
|
298
|
+
*
|
|
299
|
+
* // INSERT - MySQL 返回 NativeSqlResultMySQL
|
|
300
|
+
* // 需先导入: import { NativeSqlResultMySQL } from '../../libs/crud-pro/models/ResModel';
|
|
301
|
+
* const result = await crudProQuick.executeNativeSQL<NativeSqlResultMySQL>(
|
|
302
|
+
* 'INSERT INTO user (name, age) VALUES (?, ?)',
|
|
303
|
+
* ['张三', 20]
|
|
304
|
+
* );
|
|
305
|
+
* console.log(result.insertId, result.affectedRows);
|
|
154
306
|
*/
|
|
155
307
|
async executeNativeSQL(executeNativeSql, args) {
|
|
156
308
|
const sqlCfgModel = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel } from '../../libs/crud-pro/interfaces';
|
|
1
|
+
import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery } from '../../libs/crud-pro/interfaces';
|
|
2
2
|
import { IRequestCfgModel2 } from '../../models/bizmodels';
|
|
3
3
|
import { SqlDbType } from '../../libs/crud-pro/models/keys';
|
|
4
4
|
import { ExecuteContext } from '../../libs/crud-pro/models/ExecuteContext';
|
|
@@ -25,4 +25,5 @@ export declare class CurdMixService {
|
|
|
25
25
|
* @returns
|
|
26
26
|
*/
|
|
27
27
|
linkColumnRelationDatas(rows: any[], param: ILinkColumnRelationParam): Promise<void>;
|
|
28
|
+
getAllTableInfos(query: ITableNamesQuery, options?: ITableNamesOptions): Promise<ITableListResult>;
|
|
28
29
|
}
|
|
@@ -32,7 +32,7 @@ let CurdMixService = class CurdMixService {
|
|
|
32
32
|
}
|
|
33
33
|
getBbUtil(sqlDatabase, sqlDbType, sqlTable) {
|
|
34
34
|
this.prepare();
|
|
35
|
-
return this.curdProService.
|
|
35
|
+
return this.curdProService.getQuickCrud(sqlDatabase, sqlDbType, sqlTable);
|
|
36
36
|
}
|
|
37
37
|
async executeSQL(sqlCfgModel) {
|
|
38
38
|
this.prepare();
|
|
@@ -69,6 +69,10 @@ let CurdMixService = class CurdMixService {
|
|
|
69
69
|
await handler.handleExecuteContext(exeCtx);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
+
async getAllTableInfos(query, options) {
|
|
73
|
+
this.prepare();
|
|
74
|
+
return this.curdProService.getAllTableInfos(query, options);
|
|
75
|
+
}
|
|
72
76
|
};
|
|
73
77
|
__decorate([
|
|
74
78
|
(0, core_1.Inject)(),
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Context } from '@midwayjs/koa';
|
|
2
|
-
import { IRequestCfgModel, IRequestModel, ISqlCfgModel } from '../../libs/crud-pro/interfaces';
|
|
2
|
+
import { IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery } from '../../libs/crud-pro/interfaces';
|
|
3
3
|
import { SqlDbType } from '../../libs/crud-pro/models/keys';
|
|
4
4
|
import { ExecuteContext, IExecuteContextHandler } from '../../libs/crud-pro/models/ExecuteContext';
|
|
5
5
|
import { RelatedType } from './CurdMixUtils';
|
|
6
6
|
import { BaseService } from '../base/BaseService';
|
|
7
7
|
import { IRequestCfgModel2 } from '../../models/bizmodels';
|
|
8
|
-
import { CrudProQuick } from '
|
|
8
|
+
import { CrudProQuick } from './CrudProQuick';
|
|
9
|
+
import { ShardingCrudPro, IShardingConfig } from '../../libs/crud-sharding';
|
|
9
10
|
export declare class CurdProService extends BaseService {
|
|
10
11
|
protected ctx: Context;
|
|
11
12
|
private mysql2Config;
|
|
@@ -27,6 +28,47 @@ export declare class CurdProService extends BaseService {
|
|
|
27
28
|
executeCrud(reqJson: IRequestModel): Promise<ExecuteContext>;
|
|
28
29
|
executeSQL(sqlCfgModel: ISqlCfgModel): Promise<any>;
|
|
29
30
|
executeCrudByCfg(reqJson: IRequestModel, cfgModel: IRequestCfgModel2): Promise<ExecuteContext>;
|
|
31
|
+
/**
|
|
32
|
+
* 获取 CrudProQuick 工具类(已废弃)
|
|
33
|
+
*
|
|
34
|
+
* @deprecated 请使用 getQuickCrud 替代
|
|
35
|
+
* @param sqlDatabase 数据库名
|
|
36
|
+
* @param sqlDbType 数据库类型
|
|
37
|
+
* @param sqlTable 表名(可选)
|
|
38
|
+
* @returns CrudProQuick 实例
|
|
39
|
+
*/
|
|
30
40
|
getBbUtil(sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string): CrudProQuick;
|
|
41
|
+
/**
|
|
42
|
+
* 获取 CrudProQuick 工具类
|
|
43
|
+
*
|
|
44
|
+
* 提供快速 CRUD 操作的便捷方法,封装了常用的数据库操作。
|
|
45
|
+
*
|
|
46
|
+
* @param sqlDatabase 数据库名
|
|
47
|
+
* @param sqlDbType 数据库类型
|
|
48
|
+
* @param sqlTable 表名(可选)
|
|
49
|
+
* @returns CrudProQuick 实例
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const quick = curdProService.getQuickCrud('mydb', SqlDbType.mysql, 't_user');
|
|
53
|
+
* const users = await quick.query({ status: 'active' });
|
|
54
|
+
*/
|
|
55
|
+
getQuickCrud(sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string): CrudProQuick;
|
|
56
|
+
/**
|
|
57
|
+
* 获取分表 CRUD 操作器
|
|
58
|
+
*
|
|
59
|
+
* @param sqlDatabase 数据库名
|
|
60
|
+
* @param sqlDbType 数据库类型
|
|
61
|
+
* @param shardingConfig 分表配置
|
|
62
|
+
* @returns ShardingCrudPro 实例
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const sharding = curdProService.getShardingCrud('mydb', SqlDbType.mysql, {
|
|
66
|
+
* type: ShardingType.MONTH,
|
|
67
|
+
* baseTable: 't_order',
|
|
68
|
+
* timeColumn: 'created_at',
|
|
69
|
+
* });
|
|
70
|
+
*/
|
|
71
|
+
getShardingCrud(sqlDatabase: string, sqlDbType: SqlDbType, shardingConfig: IShardingConfig): ShardingCrudPro;
|
|
31
72
|
getCachedCfgByMethod(method: string): Promise<IRequestCfgModel>;
|
|
73
|
+
getAllTableInfos(query: ITableNamesQuery, options?: ITableNamesOptions): Promise<ITableListResult>;
|
|
32
74
|
}
|
|
@@ -20,7 +20,8 @@ const keys_1 = require("../../libs/crud-pro/models/keys");
|
|
|
20
20
|
const exceptions_1 = require("../../libs/crud-pro/exceptions");
|
|
21
21
|
const ExecuteContextFunc_1 = require("../../libs/crud-pro/models/ExecuteContextFunc");
|
|
22
22
|
const BaseService_1 = require("../base/BaseService");
|
|
23
|
-
const CrudProQuick_1 = require("
|
|
23
|
+
const CrudProQuick_1 = require("./CrudProQuick");
|
|
24
|
+
const crud_sharding_1 = require("../../libs/crud-sharding");
|
|
24
25
|
const fixCfgModel_1 = require("./fixCfgModel");
|
|
25
26
|
const global_config_1 = require("../../libs/global-config/global-config");
|
|
26
27
|
const fixSoftDelete_1 = require("../../service/curd/fixSoftDelete");
|
|
@@ -179,15 +180,66 @@ let CurdProService = class CurdProService extends BaseService_1.BaseService {
|
|
|
179
180
|
(0, fixSoftDelete_1.fixSoftDelete)(cfgModel.sqlSimpleName, cfgModel, reqJson, this.ctx);
|
|
180
181
|
return await curdPro.executeCrudByCfg(reqJson, cfgModel);
|
|
181
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* 获取 CrudProQuick 工具类(已废弃)
|
|
185
|
+
*
|
|
186
|
+
* @deprecated 请使用 getQuickCrud 替代
|
|
187
|
+
* @param sqlDatabase 数据库名
|
|
188
|
+
* @param sqlDbType 数据库类型
|
|
189
|
+
* @param sqlTable 表名(可选)
|
|
190
|
+
* @returns CrudProQuick 实例
|
|
191
|
+
*/
|
|
182
192
|
getBbUtil(sqlDatabase, sqlDbType, sqlTable) {
|
|
193
|
+
return this.getQuickCrud(sqlDatabase, sqlDbType, sqlTable);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 获取 CrudProQuick 工具类
|
|
197
|
+
*
|
|
198
|
+
* 提供快速 CRUD 操作的便捷方法,封装了常用的数据库操作。
|
|
199
|
+
*
|
|
200
|
+
* @param sqlDatabase 数据库名
|
|
201
|
+
* @param sqlDbType 数据库类型
|
|
202
|
+
* @param sqlTable 表名(可选)
|
|
203
|
+
* @returns CrudProQuick 实例
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* const quick = curdProService.getQuickCrud('mydb', SqlDbType.mysql, 't_user');
|
|
207
|
+
* const users = await quick.query({ status: 'active' });
|
|
208
|
+
*/
|
|
209
|
+
getQuickCrud(sqlDatabase, sqlDbType, sqlTable) {
|
|
183
210
|
const curdPro = this.getCrudPro();
|
|
184
211
|
return new CrudProQuick_1.CrudProQuick({ curdPro, sqlDatabase, sqlDbType, sqlTable, ctx: this.ctx });
|
|
185
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* 获取分表 CRUD 操作器
|
|
215
|
+
*
|
|
216
|
+
* @param sqlDatabase 数据库名
|
|
217
|
+
* @param sqlDbType 数据库类型
|
|
218
|
+
* @param shardingConfig 分表配置
|
|
219
|
+
* @returns ShardingCrudPro 实例
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* const sharding = curdProService.getShardingCrud('mydb', SqlDbType.mysql, {
|
|
223
|
+
* type: ShardingType.MONTH,
|
|
224
|
+
* baseTable: 't_order',
|
|
225
|
+
* timeColumn: 'created_at',
|
|
226
|
+
* });
|
|
227
|
+
*/
|
|
228
|
+
getShardingCrud(sqlDatabase, sqlDbType, shardingConfig) {
|
|
229
|
+
const curdPro = this.getCrudPro();
|
|
230
|
+
const sharding = new crud_sharding_1.ShardingCrudPro(curdPro, shardingConfig);
|
|
231
|
+
sharding.setBaseCfg({ sqlDatabase, sqlDbType });
|
|
232
|
+
return sharding;
|
|
233
|
+
}
|
|
186
234
|
async getCachedCfgByMethod(method) {
|
|
187
235
|
const curdPro = this.getCrudPro();
|
|
188
236
|
const isEnableCache = !this.isEnableDebug(); // 开发环境不使用缓存
|
|
189
237
|
return curdPro.getCachedCfgByMethod(method, isEnableCache);
|
|
190
238
|
}
|
|
239
|
+
async getAllTableInfos(query, options) {
|
|
240
|
+
const curdPro = this.getCrudPro();
|
|
241
|
+
return curdPro.getAllTableInfos(query, options);
|
|
242
|
+
}
|
|
191
243
|
};
|
|
192
244
|
__decorate([
|
|
193
245
|
(0, core_1.Inject)(),
|