midway-fatcms 0.0.7 → 0.0.8

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 (120) hide show
  1. package/.qoder/skills/midway-fatcms/01-quick-start.md +231 -0
  2. package/.qoder/skills/midway-fatcms/02-crud-quick.md +337 -0
  3. package/.qoder/skills/midway-fatcms/03-crud-sharding.md +488 -0
  4. package/.qoder/skills/midway-fatcms/04-condition-operators.md +93 -0
  5. package/.qoder/skills/midway-fatcms/05-configuration.md +290 -0
  6. package/.qoder/skills/midway-fatcms/06-builtin-functions.md +241 -0
  7. package/.qoder/skills/midway-fatcms/07-examples.md +500 -0
  8. package/.qoder/skills/midway-fatcms/SKILL.md +96 -0
  9. package/README.md +9 -9
  10. package/dist/controller/base/BaseApiController.d.ts +1 -2
  11. package/dist/controller/base/BaseApiController.js +0 -4
  12. package/dist/controller/gateway/DocGatewayController.js +1 -1
  13. package/dist/controller/manage/FlowConfigManageApi.js +4 -2
  14. package/dist/controller/manage/SysConfigMangeApi.js +6 -1
  15. package/dist/controller/manage/UserAccountManageApi.js +7 -2
  16. package/dist/index.d.ts +2 -2
  17. package/dist/index.js +2 -2
  18. package/dist/libs/crud-pro/CrudPro.d.ts +23 -2
  19. package/dist/libs/crud-pro/CrudPro.js +53 -2
  20. package/dist/libs/crud-pro/interfaces.d.ts +82 -12
  21. package/dist/libs/crud-pro/models/CrudResult.d.ts +115 -0
  22. package/dist/libs/crud-pro/models/CrudResult.js +126 -0
  23. package/dist/libs/crud-pro/models/RequestModel.d.ts +2 -2
  24. package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +36 -2
  25. package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +8 -4
  26. package/dist/libs/crud-pro/services/CrudProTableMetaService.js +1 -2
  27. package/dist/libs/crud-pro-quick/CrudProQuick.d.ts +295 -0
  28. package/dist/libs/crud-pro-quick/CrudProQuick.js +529 -0
  29. package/dist/libs/crud-pro-quick/fixSoftDelete.d.ts +30 -0
  30. package/dist/{service/curd → libs/crud-pro-quick}/fixSoftDelete.js +3 -6
  31. package/dist/libs/crud-pro-quick/index.d.ts +36 -0
  32. package/dist/libs/crud-pro-quick/index.js +49 -0
  33. package/dist/libs/crud-pro-quick/models.d.ts +33 -0
  34. package/dist/libs/crud-pro-quick/models.js +2 -0
  35. package/dist/libs/crud-sharding/ShardingConfig.d.ts +15 -2
  36. package/dist/libs/crud-sharding/ShardingConfig.js +2 -2
  37. package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +119 -274
  38. package/dist/libs/crud-sharding/ShardingCrudPro.js +544 -340
  39. package/dist/libs/crud-sharding/ShardingMerger.d.ts +10 -18
  40. package/dist/libs/crud-sharding/ShardingMerger.js +27 -44
  41. package/dist/libs/crud-sharding/ShardingResult.d.ts +33 -0
  42. package/dist/libs/crud-sharding/ShardingResult.js +16 -0
  43. package/dist/libs/crud-sharding/ShardingRouter.d.ts +1 -0
  44. package/dist/libs/crud-sharding/ShardingRouter.js +25 -6
  45. package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +21 -4
  46. package/dist/libs/crud-sharding/ShardingTableCreator.js +193 -59
  47. package/dist/libs/crud-sharding/ShardingUtils.d.ts +48 -0
  48. package/dist/libs/crud-sharding/ShardingUtils.js +122 -1
  49. package/dist/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
  50. package/dist/libs/crud-sharding/index.d.ts +4 -3
  51. package/dist/libs/crud-sharding/index.js +14 -2
  52. package/dist/models/bizmodels.d.ts +2 -6
  53. package/dist/service/SysAppService.d.ts +2 -2
  54. package/dist/service/SysAppService.js +16 -5
  55. package/dist/service/SysConfigService.d.ts +1 -1
  56. package/dist/service/SysConfigService.js +7 -2
  57. package/dist/service/SysDictDataService.js +14 -4
  58. package/dist/service/SysMenuService.js +7 -2
  59. package/dist/service/curd/CurdMixService.d.ts +6 -4
  60. package/dist/service/curd/CurdMixService.js +16 -2
  61. package/dist/service/curd/CurdProService.d.ts +43 -27
  62. package/dist/service/curd/CurdProService.js +32 -33
  63. package/dist/service/flow/FlowConfigService.js +7 -2
  64. package/dist/service/flow/FlowInstanceCrudService.js +22 -19
  65. package/package.json +1 -1
  66. package/src/controller/base/BaseApiController.ts +0 -5
  67. package/src/controller/gateway/DocGatewayController.ts +1 -1
  68. package/src/controller/manage/CrudStandardDesignApi.ts +4 -3
  69. package/src/controller/manage/FlowConfigManageApi.ts +4 -2
  70. package/src/controller/manage/SysConfigMangeApi.ts +6 -1
  71. package/src/controller/manage/UserAccountManageApi.ts +7 -2
  72. package/src/index.ts +2 -2
  73. package/src/libs/crud-pro/CrudPro.ts +62 -4
  74. package/src/libs/crud-pro/interfaces.ts +110 -15
  75. package/src/libs/crud-pro/models/CrudResult.ts +178 -0
  76. package/src/libs/crud-pro/models/RequestModel.ts +2 -2
  77. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +41 -2
  78. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +11 -7
  79. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +1 -2
  80. package/src/libs/crud-pro-quick/CrudProQuick.ts +594 -0
  81. package/src/{service/curd → libs/crud-pro-quick}/fixSoftDelete.ts +23 -13
  82. package/src/libs/crud-pro-quick/index.ts +52 -0
  83. package/src/libs/crud-pro-quick/models.ts +35 -0
  84. package/src/libs/crud-sharding/ShardingConfig.ts +18 -2
  85. package/src/libs/crud-sharding/ShardingCrudPro.ts +660 -390
  86. package/src/libs/crud-sharding/ShardingMerger.ts +35 -63
  87. package/src/libs/crud-sharding/ShardingResult.ts +29 -0
  88. package/src/libs/crud-sharding/ShardingRouter.ts +27 -6
  89. package/src/libs/crud-sharding/ShardingTableCreator.ts +214 -71
  90. package/src/libs/crud-sharding/ShardingUtils.ts +137 -0
  91. package/src/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
  92. package/src/libs/crud-sharding/index.ts +14 -3
  93. package/src/models/bizmodels.ts +4 -7
  94. package/src/service/SysAppService.ts +18 -7
  95. package/src/service/SysConfigService.ts +8 -3
  96. package/src/service/SysDictDataService.ts +14 -4
  97. package/src/service/SysMenuService.ts +7 -2
  98. package/src/service/crudstd/CrudStdService.ts +2 -2
  99. package/src/service/curd/CurdMixService.ts +26 -5
  100. package/src/service/curd/CurdProService.ts +58 -39
  101. package/src/service/flow/FlowConfigService.ts +7 -2
  102. package/src/service/flow/FlowInstanceCrudService.ts +23 -20
  103. package/.qoder/skills/midway-fatcms-crud/SKILL.md +0 -375
  104. package/.qoder/skills/midway-fatcms-crud/examples.md +0 -990
  105. package/.qoder/skills/midway-fatcms-crud/reference.md +0 -568
  106. package/dist/libs/crud-pro/README.md +0 -809
  107. package/dist/libs/crud-pro/README_FUNC.md +0 -193
  108. package/dist/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
  109. package/dist/models/StandardColumns.d.ts +0 -71
  110. package/dist/models/StandardColumns.js +0 -28
  111. package/dist/service/curd/CrudProQuick.d.ts +0 -190
  112. package/dist/service/curd/CrudProQuick.js +0 -319
  113. package/dist/service/curd/README.md +0 -1100
  114. package/dist/service/curd/fixSoftDelete.d.ts +0 -20
  115. package/src/libs/crud-pro/README.md +0 -809
  116. package/src/libs/crud-pro/README_FUNC.md +0 -193
  117. package/src/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
  118. package/src/models/StandardColumns.ts +0 -76
  119. package/src/service/curd/CrudProQuick.ts +0 -360
  120. package/src/service/curd/README.md +0 -1100
@@ -1,193 +0,0 @@
1
- # CrudPro 内置函数参考
2
-
3
- CrudPro 的 `IFuncCfgModel` 支持 `functionName` 方式调用内置函数。内置函数由四个工具类注册:`DateTimeUtils`、`CompareUtils`、`MixinUtils`、`TypeUtils`。
4
-
5
- > 源码位置:`src/libs/crud-pro/services/CrudProServiceBase.ts` → `createBuildInExecuteFuncMap()`
6
-
7
- ## 调用方式
8
-
9
- `functionName` 是 `IFuncCfgModel` 的属性之一,可在 `updateCfg`、`validateCfg`、`executeWhen`、`validate` 等配置中使用。
10
-
11
- ### 无参调用
12
-
13
- ```typescript
14
- 'data.created_at': { functionName: 'getCurrentTimeString' }
15
- ```
16
-
17
- ### 带参调用
18
-
19
- ```typescript
20
- 'data.order_date': { functionName: 'getCurrentDateFormat', functionParams: ['YYYYMMDD'] }
21
- ```
22
-
23
- `functionParams` 中的每个元素可以是基础类型(string / number / boolean),也可以嵌套 `IFuncCfgModel` 对象:
24
-
25
- ```typescript
26
- {
27
- functionName: 'eq',
28
- functionParams: [
29
- { contextAsBool: 'res.is_exist' },
30
- { constBool: false }
31
- ]
32
- }
33
- ```
34
-
35
- ## DateTimeUtils — 日期时间
36
-
37
- | 函数名 | 参数 | 返回值 | 说明 |
38
- |--------|------|--------|------|
39
- | `getCurrentTimeStampMs` | 无 | `number` | 当前时间戳(毫秒) |
40
- | `getCurrentTimeStampSecond` | 无 | `number` | 当前时间戳(秒) |
41
- | `getCurrentTimeString` | 无 | `string` | 当前时间,格式 `YYYY-MM-DD HH:mm:ss` |
42
- | `getCurrentDateFormat` | `format: string` | `string` | 按指定格式返回当前时间 |
43
- | `getYesterdayDateFormat` | `format: string` | `string` | 按指定格式返回昨天时间 |
44
-
45
- **示例:**
46
-
47
- ```typescript
48
- updateCfg: {
49
- 'data.created_at': { functionName: 'getCurrentTimeString' },
50
- 'data.created_ts': { functionName: 'getCurrentTimeStampMs' },
51
- 'data.order_date': { functionName: 'getCurrentDateFormat', functionParams: ['YYYYMMDD'] },
52
- 'data.yesterday': { functionName: 'getYesterdayDateFormat', functionParams: ['YYYY-MM-DD'] },
53
- }
54
- ```
55
-
56
- ## CompareUtils — 比较运算
57
-
58
- | 函数名 | 参数 | 返回值 | 说明 |
59
- |--------|------|--------|------|
60
- | `eq` | `a: any, b: any` | `boolean` | 相等比较(`==`,兼容类型转换) |
61
- | `ne` | `a: any, b: any` | `boolean` | 不相等 |
62
- | `gt` | `a: any, b: any` | `boolean` | 大于 |
63
- | `gte` | `a: any, b: any` | `boolean` | 大于等于 |
64
- | `lt` | `a: any, b: any` | `boolean` | 小于 |
65
- | `lte` | `a: any, b: any` | `boolean` | 小于等于 |
66
-
67
- **示例:**
68
-
69
- ```typescript
70
- // executeWhen:仅当 is_exist 为 false 时执行插入
71
- executeWhen: {
72
- functionName: 'eq',
73
- functionParams: [{ contextAsBool: 'res.is_exist' }, { constBool: false }]
74
- }
75
-
76
- // validate:确保数量大于 0
77
- validate: {
78
- functionName: 'gt',
79
- functionParams: [{ context: '$current' }, { constNumber: 0 }],
80
- message: '数量必须大于0'
81
- }
82
- ```
83
-
84
- ## MixinUtils — 通用工具
85
-
86
- | 函数名 | 参数 | 返回值 | 说明 |
87
- |--------|------|--------|------|
88
- | `isNil` | `obj: any` | `boolean` | 是否为 null 或 undefined |
89
- | `isNotNil` | `obj: any` | `boolean` | 不为 null 且不为 undefined |
90
- | `isEmpty` | `obj: any` | `boolean` | 是否为空(null / undefined / 空字符串 / 空数组 / 空对象) |
91
- | `isNotEmpty` | `obj: any` | `boolean` | 是否非空 |
92
- | `equals` | `obj1: any, obj2: any` | `boolean` | 严格相等(`===`) |
93
- | `equalsIgnoreCase` | `str1: string, str2: string` | `boolean` | 忽略大小写比较字符串 |
94
- | `startsWith` | `str1: string, str2: string` | `boolean` | 字符串前缀判断 |
95
- | `isValidFieldName` | `s: string` | `boolean` | 合法字段名(字母开头,仅含字母/数字/下划线) |
96
- | `selectNotEmpty` | `a: any, b: any` | `any` | 返回第一个非空值 |
97
- | `hasAny` | `a: string[], b: string[]` | `boolean` | 集合 A 是否包含集合 B 中的任意元素 |
98
- | `parseValueByType` | `value: any, targetType: string` | `any` | 按类型转换值(string / number / boolean / array / JSONObject) |
99
- | `sleepMs` | `ms: number` | `Promise` | 延时等待 |
100
- | `uuid` | 无 | `string` | 生成 UUID v4(优先 `crypto.getRandomValues`,降级 `Math.random`) |
101
- | `generateSnowflakeId` | `machineId?: number` | `string` | 生成雪花ID(64位整数字符串) |
102
-
103
- **uuid 和雪花ID 示例:**
104
-
105
- ```typescript
106
- updateCfg: {
107
- // UUID v4:适合需要标准唯一标识的场景
108
- 'data.id': { functionName: 'uuid' },
109
-
110
- // 雪花ID:适合需要趋势递增、时间有序的场景
111
- 'data.order_id': { functionName: 'generateSnowflakeId' },
112
-
113
- // 雪花ID:指定机器ID(0-1023),多实例部署时区分
114
- 'data.trace_id': { functionName: 'generateSnowflakeId', functionParams: [1] },
115
- }
116
- ```
117
-
118
- > **雪花ID machineId 获取优先级**:函数参数 > 环境变量 `SNOWFLAKE_MACHINE_ID` > `process.pid` 低10位。多实例部署时建议设置环境变量 `SNOWFLAKE_MACHINE_ID` 为 0-1023 的唯一值。
119
-
120
- ## TypeUtils — 类型判断
121
-
122
- | 函数名 | 参数 | 返回值 | 说明 |
123
- |--------|------|--------|------|
124
- | `isBasicType` | `value: any` | `boolean` | 基础类型(boolean / string / number / null) |
125
- | `isBoolean` | `value: any` | `boolean` | 布尔值 |
126
- | `isString` | `value: any` | `boolean` | 字符串 |
127
- | `isInteger` | `value: any` | `boolean` | 整数 |
128
- | `isNumber` | `value: any` | `boolean` | 数字 |
129
- | `isNumeric` | `value: any` | `boolean` | 数字或可转换数字的字符串 |
130
- | `isValidName` | `value: any` | `boolean` | 合法命名(字母开头,字母/数字/下划线) |
131
- | `isChinesePhone` | `value: string` | `boolean` | 中文手机号 |
132
- | `isEmailStrValid` | `value: string` | `boolean` | 合法邮箱地址 |
133
- | `pickNumber` | `s: string` | `number \| null` | 从字符串中提取数字部分 |
134
-
135
- ## 自定义函数扩展
136
-
137
- 除内置函数外,可通过覆写 `IExecuteContextFunc.getFunctionMap()` 注册自定义函数。
138
-
139
- 函数查找顺序:`getFunctionMap()` → `buildInExecuteFuncMap`(内置函数),自定义函数优先级更高,可覆盖内置函数。
140
-
141
- ### 注册方式
142
-
143
- 继承 `BaseExecuteContextFunc`,覆写 `getFunctionMap()` 方法返回函数映射表:
144
-
145
- ```typescript
146
- import { BaseExecuteContextFunc } from './libs/crud-pro/models/ExecuteContextFunc';
147
-
148
- class MyContextFunc extends BaseExecuteContextFunc {
149
-
150
- // 覆写此方法,返回自定义函数映射表
151
- getFunctionMap(): any {
152
- return {
153
- // 无参函数
154
- generateOrderNo: (prefix: string) => {
155
- return prefix + Date.now().toString(36).toUpperCase();
156
- },
157
-
158
- // 带参函数:参数来自 functionParams 配置
159
- formatAmount: (amount: number, currency: string) => {
160
- return currency + ' ' + amount.toFixed(2);
161
- },
162
-
163
- // 可访问 FuncContext 的函数(通过 this 关键字)
164
- getVisitorName: function(this: any) {
165
- return this.reqModel?.visitor?.nickName || 'anonymous';
166
- },
167
- };
168
- }
169
- }
170
-
171
- // 创建 CrudPro 实例时注入
172
- const crudPro = new CrudPro();
173
- crudPro.contextFunc = new MyContextFunc(/* 构造参数 */);
174
- ```
175
-
176
- ### 在配置中使用
177
-
178
- 注册后即可在 `updateCfg`、`validateCfg`、`functionCfg` 等场景中通过 `functionName` 调用:
179
-
180
- ```typescript
181
- const cfgJson: IRequestCfgModel = {
182
- method: 'order.create',
183
- sqlSimpleName: KeysOfSimpleSQL.SIMPLE_INSERT,
184
- updateCfg: {
185
- 'data.order_no': { functionName: 'generateOrderNo', functionParams: ['PRE'] },
186
- },
187
- };
188
- ```
189
-
190
- > **注意**:`functionParams` 中配置的参数会按顺序传入函数。如果函数需要访问 `FuncContext`(如 `reqModel`、`resModel`、`currentValue`),
191
- > 需使用普通 `function`(非箭头函数)并通过 `this` 访问,框架会以 `func.apply(funcContext, params)` 方式调用。
192
-
193
- > **注意**:`generateOrderNo` 等并非内置函数,需通过 `contextFunc` 扩展注册后才可使用,否则运行时抛出 `RUN_FUNCTION_NOT_FOUND` 异常。