midway-fatcms 0.0.7 → 0.0.9
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/01-quick-start.md +231 -0
- package/.qoder/skills/midway-fatcms/02-crud-quick.md +375 -0
- package/.qoder/skills/midway-fatcms/03-crud-sharding.md +489 -0
- package/.qoder/skills/midway-fatcms/04-condition-operators.md +93 -0
- package/.qoder/skills/midway-fatcms/05-configuration.md +290 -0
- package/.qoder/skills/midway-fatcms/06-builtin-functions.md +241 -0
- package/.qoder/skills/midway-fatcms/07-examples.md +504 -0
- package/.qoder/skills/midway-fatcms/SKILL.md +96 -0
- package/README.md +9 -9
- package/dist/configuration.d.ts +10 -0
- package/dist/configuration.js +26 -0
- package/dist/controller/base/BaseApiController.d.ts +1 -2
- package/dist/controller/base/BaseApiController.js +0 -4
- package/dist/controller/gateway/DocGatewayController.js +1 -1
- package/dist/controller/helpers.controller.d.ts +6 -0
- package/dist/controller/helpers.controller.js +19 -0
- package/dist/controller/manage/FlowConfigManageApi.js +4 -2
- package/dist/controller/manage/SysConfigMangeApi.js +6 -1
- package/dist/controller/manage/UserAccountManageApi.js +7 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/libs/crud-pro/CrudPro.d.ts +51 -3
- package/dist/libs/crud-pro/CrudPro.js +111 -4
- package/dist/libs/crud-pro/exceptions.d.ts +7 -0
- package/dist/libs/crud-pro/exceptions.js +7 -0
- package/dist/libs/crud-pro/interfaces.d.ts +83 -12
- package/dist/libs/crud-pro/models/CrudResult.d.ts +116 -0
- package/dist/libs/crud-pro/models/CrudResult.js +126 -0
- package/dist/libs/crud-pro/models/RequestModel.d.ts +2 -2
- package/dist/libs/crud-pro/models/ServiceHub.d.ts +2 -0
- package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.d.ts +70 -2
- package/dist/libs/crud-pro/services/CrudProDataTypeConvertService.js +205 -13
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +36 -2
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +8 -4
- package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +36 -0
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +97 -4
- package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +2 -0
- package/dist/libs/crud-pro/services/CurdProServiceHub.js +6 -0
- package/dist/libs/crud-pro-quick/CrudProQuick.d.ts +382 -0
- package/dist/libs/crud-pro-quick/CrudProQuick.js +689 -0
- package/dist/libs/crud-pro-quick/fixSoftDelete.d.ts +30 -0
- package/dist/{service/curd → libs/crud-pro-quick}/fixSoftDelete.js +3 -6
- package/dist/libs/crud-pro-quick/index.d.ts +36 -0
- package/dist/libs/crud-pro-quick/index.js +49 -0
- package/dist/libs/crud-pro-quick/models.d.ts +33 -0
- package/dist/libs/crud-pro-quick/models.js +2 -0
- package/dist/libs/crud-sharding/ShardingBase.d.ts +78 -0
- package/dist/libs/crud-sharding/ShardingBase.js +179 -0
- package/dist/libs/crud-sharding/ShardingByCustomCrud.d.ts +35 -0
- package/dist/libs/crud-sharding/ShardingByCustomCrud.js +297 -0
- package/dist/libs/crud-sharding/ShardingByHashCrud.d.ts +38 -0
- package/dist/libs/crud-sharding/ShardingByHashCrud.js +86 -0
- package/dist/libs/crud-sharding/ShardingByKeyCrud.d.ts +39 -0
- package/dist/libs/crud-sharding/ShardingByKeyCrud.js +74 -0
- package/dist/libs/crud-sharding/ShardingByTimeCrud.d.ts +66 -0
- package/dist/libs/crud-sharding/ShardingByTimeCrud.js +524 -0
- package/dist/libs/crud-sharding/ShardingConfig.d.ts +25 -10
- package/dist/libs/crud-sharding/ShardingConfig.js +5 -5
- package/dist/libs/crud-sharding/ShardingMerger.d.ts +10 -18
- package/dist/libs/crud-sharding/ShardingMerger.js +27 -44
- package/dist/libs/crud-sharding/ShardingResult.d.ts +33 -0
- package/dist/libs/crud-sharding/ShardingResult.js +16 -0
- package/dist/libs/crud-sharding/ShardingTableCreator.d.ts +21 -4
- package/dist/libs/crud-sharding/ShardingTableCreator.js +193 -59
- package/dist/libs/crud-sharding/ShardingUtils.d.ts +48 -0
- package/dist/libs/crud-sharding/ShardingUtils.js +122 -1
- package/dist/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
- package/dist/libs/crud-sharding/index.d.ts +13 -15
- package/dist/libs/crud-sharding/index.js +33 -17
- package/dist/models/RedisKeys.d.ts +1 -0
- package/dist/models/RedisKeys.js +1 -0
- package/dist/models/bizmodels.d.ts +2 -6
- package/dist/service/SysAppService.d.ts +2 -2
- package/dist/service/SysAppService.js +16 -5
- package/dist/service/SysConfigService.d.ts +1 -1
- package/dist/service/SysConfigService.js +7 -2
- package/dist/service/SysDictDataService.js +14 -4
- package/dist/service/SysMenuService.js +7 -2
- package/dist/service/TableMetaCacheRedisSubscriber.d.ts +31 -0
- package/dist/service/TableMetaCacheRedisSubscriber.js +98 -0
- package/dist/service/curd/CurdMixService.d.ts +6 -4
- package/dist/service/curd/CurdMixService.js +16 -2
- package/dist/service/curd/CurdProService.d.ts +149 -29
- package/dist/service/curd/CurdProService.js +157 -38
- package/dist/service/flow/FlowConfigService.js +7 -2
- package/dist/service/flow/FlowInstanceCrudService.js +22 -19
- package/package.json +1 -1
- package/src/configuration.ts +27 -0
- package/src/controller/base/BaseApiController.ts +0 -5
- package/src/controller/gateway/DocGatewayController.ts +1 -1
- package/src/controller/helpers.controller.ts +15 -0
- package/src/controller/manage/CrudStandardDesignApi.ts +4 -3
- package/src/controller/manage/FlowConfigManageApi.ts +4 -2
- package/src/controller/manage/SysConfigMangeApi.ts +6 -1
- package/src/controller/manage/UserAccountManageApi.ts +7 -2
- package/src/index.ts +2 -2
- package/src/libs/crud-pro/CrudPro.ts +134 -7
- package/src/libs/crud-pro/exceptions.ts +8 -0
- package/src/libs/crud-pro/interfaces.ts +111 -15
- package/src/libs/crud-pro/models/CrudResult.ts +178 -0
- package/src/libs/crud-pro/models/RequestModel.ts +2 -2
- package/src/libs/crud-pro/models/ServiceHub.ts +4 -0
- package/src/libs/crud-pro/services/CrudProDataTypeConvertService.ts +238 -15
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +41 -2
- package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +11 -7
- package/src/libs/crud-pro/services/CrudProTableMetaService.ts +110 -3
- package/src/libs/crud-pro/services/CurdProServiceHub.ts +8 -0
- package/src/libs/crud-pro-quick/CrudProQuick.ts +782 -0
- package/src/{service/curd → libs/crud-pro-quick}/fixSoftDelete.ts +23 -13
- package/src/libs/crud-pro-quick/index.ts +52 -0
- package/src/libs/crud-pro-quick/models.ts +35 -0
- package/src/libs/crud-sharding/ShardingBase.ts +256 -0
- package/src/libs/crud-sharding/ShardingByCustomCrud.ts +329 -0
- package/src/libs/crud-sharding/ShardingByHashCrud.ts +111 -0
- package/src/libs/crud-sharding/ShardingByKeyCrud.ts +97 -0
- package/src/libs/crud-sharding/ShardingByTimeCrud.ts +628 -0
- package/src/libs/crud-sharding/ShardingConfig.ts +28 -10
- package/src/libs/crud-sharding/ShardingMerger.ts +35 -63
- package/src/libs/crud-sharding/ShardingResult.ts +29 -0
- package/src/libs/crud-sharding/ShardingTableCreator.ts +214 -71
- package/src/libs/crud-sharding/ShardingUtils.ts +137 -0
- package/src/libs/crud-sharding/TIME_COLUMN_CLEAN_SPEC.md +488 -0
- package/src/libs/crud-sharding/index.ts +30 -16
- package/src/models/RedisKeys.ts +1 -0
- package/src/models/bizmodels.ts +4 -7
- package/src/service/SysAppService.ts +18 -7
- package/src/service/SysConfigService.ts +8 -3
- package/src/service/SysDictDataService.ts +14 -4
- package/src/service/SysMenuService.ts +7 -2
- package/src/service/TableMetaCacheRedisSubscriber.ts +105 -0
- package/src/service/crudstd/CrudStdService.ts +2 -2
- package/src/service/curd/CurdMixService.ts +26 -5
- package/src/service/curd/CurdProService.ts +186 -45
- package/src/service/flow/FlowConfigService.ts +7 -2
- package/src/service/flow/FlowInstanceCrudService.ts +23 -20
- package/.qoder/skills/midway-fatcms-crud/SKILL.md +0 -375
- package/.qoder/skills/midway-fatcms-crud/examples.md +0 -990
- package/.qoder/skills/midway-fatcms-crud/reference.md +0 -568
- package/dist/libs/crud-pro/README.md +0 -809
- package/dist/libs/crud-pro/README_FUNC.md +0 -193
- package/dist/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
- package/dist/libs/crud-sharding/ShardingCrudPro.d.ts +0 -363
- package/dist/libs/crud-sharding/ShardingCrudPro.js +0 -675
- package/dist/libs/crud-sharding/ShardingRouter.d.ts +0 -69
- package/dist/libs/crud-sharding/ShardingRouter.js +0 -377
- package/dist/models/StandardColumns.d.ts +0 -71
- package/dist/models/StandardColumns.js +0 -28
- package/dist/service/curd/CrudProQuick.d.ts +0 -190
- package/dist/service/curd/CrudProQuick.js +0 -319
- package/dist/service/curd/README.md +0 -1100
- package/dist/service/curd/fixSoftDelete.d.ts +0 -20
- package/src/libs/crud-pro/README.md +0 -809
- package/src/libs/crud-pro/README_FUNC.md +0 -193
- package/src/libs/crud-sharding/ROUTING_LOGIC.md +0 -944
- package/src/libs/crud-sharding/ShardingCrudPro.ts +0 -835
- package/src/libs/crud-sharding/ShardingRouter.ts +0 -512
- package/src/models/StandardColumns.ts +0 -76
- package/src/service/curd/CrudProQuick.ts +0 -360
- package/src/service/curd/README.md +0 -1100
|
@@ -7,15 +7,15 @@
|
|
|
7
7
|
* - YEAR: 按年分表,如 order_2024, order_2025
|
|
8
8
|
* - MONTH: 按月分表,如 order_202401, order_202402
|
|
9
9
|
* - DAY: 按日分表,如 order_20240101
|
|
10
|
-
* - RANGE: 按范围分表,如 user_0 ~ user_99
|
|
11
10
|
* - HASH: 按哈希分表,如 order_01 ~ order_16
|
|
11
|
+
* - KEY: 按键值分表,字段原值=表后缀,如 order_east, order_west
|
|
12
12
|
* - CUSTOM: 自定义分表规则
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
|
-
* import {
|
|
15
|
+
* import { ShardingByTimeCrud, ShardingType } from '../../libs/crud-sharding';
|
|
16
16
|
*
|
|
17
|
-
* //
|
|
18
|
-
* const sharding = new
|
|
17
|
+
* // 创建时间分表操作器
|
|
18
|
+
* const sharding = new ShardingByTimeCrud(crudProFactory, {
|
|
19
19
|
* type: ShardingType.MONTH,
|
|
20
20
|
* baseTable: 't_order',
|
|
21
21
|
* timeColumn: 'created_at',
|
|
@@ -25,21 +25,19 @@
|
|
|
25
25
|
* await sharding.insert({
|
|
26
26
|
* data: { order_id: '001', amount: 100, created_at: '2024-03-15' },
|
|
27
27
|
* });
|
|
28
|
-
*
|
|
29
|
-
* // 分页查询(自动合并多表结果)
|
|
30
|
-
* const result = await sharding.queryPage({
|
|
31
|
-
* condition: { created_at: { $gte: '2024-01-01', $lte: '2024-03-31' } },
|
|
32
|
-
* pageNo: 1,
|
|
33
|
-
* pageSize: 10,
|
|
34
|
-
* });
|
|
35
28
|
*/
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
29
|
+
export { ShardingBase } from './ShardingBase';
|
|
30
|
+
export { ShardingByTimeCrud } from './ShardingByTimeCrud';
|
|
31
|
+
export { ShardingByHashCrud } from './ShardingByHashCrud';
|
|
32
|
+
export { ShardingByKeyCrud } from './ShardingByKeyCrud';
|
|
33
|
+
export { ShardingByCustomCrud } from './ShardingByCustomCrud';
|
|
34
|
+
export { ShardingBase as ShardingCrudPro } from './ShardingBase';
|
|
38
35
|
export { ShardingMerger } from './ShardingMerger';
|
|
39
36
|
export { ShardingType } from './ShardingConfig';
|
|
40
37
|
export type { IShardingConfig, IShardingRouterContext, IShardingRouterFunc, IShardingTimeRange, IShardingTableCreateOptions, IShardingTableCreateResult, IShardingCountCacheConfig, } from './ShardingConfig';
|
|
41
|
-
export
|
|
42
|
-
export type {
|
|
38
|
+
export { ShardingBatchInsertResult } from './ShardingResult';
|
|
39
|
+
export type { IShardingPageQueryResult, IShardingListQueryResult } from './ShardingMerger';
|
|
40
|
+
export { CrudWriteResult, CrudQueryOneResult, CrudQueryListResult, CrudQueryPageResult, CrudExistResult, CrudCountResult, CrudUpsertResult, } from '../../libs/crud-pro/models/CrudResult';
|
|
43
41
|
export { ShardingTableCreator } from './ShardingTableCreator';
|
|
44
42
|
export { ShardingCountCache, shardingHashCondition } from './ShardingCountCache';
|
|
45
43
|
export type { ShardingTimeGranularity } from './ShardingUtils';
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
* - YEAR: 按年分表,如 order_2024, order_2025
|
|
9
9
|
* - MONTH: 按月分表,如 order_202401, order_202402
|
|
10
10
|
* - DAY: 按日分表,如 order_20240101
|
|
11
|
-
* - RANGE: 按范围分表,如 user_0 ~ user_99
|
|
12
11
|
* - HASH: 按哈希分表,如 order_01 ~ order_16
|
|
12
|
+
* - KEY: 按键值分表,字段原值=表后缀,如 order_east, order_west
|
|
13
13
|
* - CUSTOM: 自定义分表规则
|
|
14
14
|
*
|
|
15
15
|
* @example
|
|
16
|
-
* import {
|
|
16
|
+
* import { ShardingByTimeCrud, ShardingType } from '../../libs/crud-sharding';
|
|
17
17
|
*
|
|
18
|
-
* //
|
|
19
|
-
* const sharding = new
|
|
18
|
+
* // 创建时间分表操作器
|
|
19
|
+
* const sharding = new ShardingByTimeCrud(crudProFactory, {
|
|
20
20
|
* type: ShardingType.MONTH,
|
|
21
21
|
* baseTable: 't_order',
|
|
22
22
|
* timeColumn: 'created_at',
|
|
@@ -26,26 +26,42 @@
|
|
|
26
26
|
* await sharding.insert({
|
|
27
27
|
* data: { order_id: '001', amount: 100, created_at: '2024-03-15' },
|
|
28
28
|
* });
|
|
29
|
-
*
|
|
30
|
-
* // 分页查询(自动合并多表结果)
|
|
31
|
-
* const result = await sharding.queryPage({
|
|
32
|
-
* condition: { created_at: { $gte: '2024-01-01', $lte: '2024-03-31' } },
|
|
33
|
-
* pageNo: 1,
|
|
34
|
-
* pageSize: 10,
|
|
35
|
-
* });
|
|
36
29
|
*/
|
|
37
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.shardingHashCondition = exports.ShardingCountCache = exports.ShardingTableCreator = exports.ShardingType = exports.ShardingMerger = exports.
|
|
39
|
-
//
|
|
40
|
-
var
|
|
41
|
-
Object.defineProperty(exports, "
|
|
42
|
-
|
|
43
|
-
|
|
31
|
+
exports.shardingHashCondition = exports.ShardingCountCache = exports.ShardingTableCreator = exports.CrudUpsertResult = exports.CrudCountResult = exports.CrudExistResult = exports.CrudQueryPageResult = exports.CrudQueryListResult = exports.CrudQueryOneResult = exports.CrudWriteResult = exports.ShardingBatchInsertResult = exports.ShardingType = exports.ShardingMerger = exports.ShardingCrudPro = exports.ShardingByCustomCrud = exports.ShardingByKeyCrud = exports.ShardingByHashCrud = exports.ShardingByTimeCrud = exports.ShardingBase = void 0;
|
|
32
|
+
// 基类
|
|
33
|
+
var ShardingBase_1 = require("./ShardingBase");
|
|
34
|
+
Object.defineProperty(exports, "ShardingBase", { enumerable: true, get: function () { return ShardingBase_1.ShardingBase; } });
|
|
35
|
+
// 四个子类
|
|
36
|
+
var ShardingByTimeCrud_1 = require("./ShardingByTimeCrud");
|
|
37
|
+
Object.defineProperty(exports, "ShardingByTimeCrud", { enumerable: true, get: function () { return ShardingByTimeCrud_1.ShardingByTimeCrud; } });
|
|
38
|
+
var ShardingByHashCrud_1 = require("./ShardingByHashCrud");
|
|
39
|
+
Object.defineProperty(exports, "ShardingByHashCrud", { enumerable: true, get: function () { return ShardingByHashCrud_1.ShardingByHashCrud; } });
|
|
40
|
+
var ShardingByKeyCrud_1 = require("./ShardingByKeyCrud");
|
|
41
|
+
Object.defineProperty(exports, "ShardingByKeyCrud", { enumerable: true, get: function () { return ShardingByKeyCrud_1.ShardingByKeyCrud; } });
|
|
42
|
+
var ShardingByCustomCrud_1 = require("./ShardingByCustomCrud");
|
|
43
|
+
Object.defineProperty(exports, "ShardingByCustomCrud", { enumerable: true, get: function () { return ShardingByCustomCrud_1.ShardingByCustomCrud; } });
|
|
44
|
+
// 兼容旧代码:ShardingCrudPro → ShardingBase
|
|
45
|
+
var ShardingBase_2 = require("./ShardingBase");
|
|
46
|
+
Object.defineProperty(exports, "ShardingCrudPro", { enumerable: true, get: function () { return ShardingBase_2.ShardingBase; } });
|
|
47
|
+
// 合并器(仅 Time 使用)
|
|
44
48
|
var ShardingMerger_1 = require("./ShardingMerger");
|
|
45
49
|
Object.defineProperty(exports, "ShardingMerger", { enumerable: true, get: function () { return ShardingMerger_1.ShardingMerger; } });
|
|
46
50
|
// 配置和类型
|
|
47
51
|
var ShardingConfig_1 = require("./ShardingConfig");
|
|
48
52
|
Object.defineProperty(exports, "ShardingType", { enumerable: true, get: function () { return ShardingConfig_1.ShardingType; } });
|
|
53
|
+
// 结果类型
|
|
54
|
+
var ShardingResult_1 = require("./ShardingResult");
|
|
55
|
+
Object.defineProperty(exports, "ShardingBatchInsertResult", { enumerable: true, get: function () { return ShardingResult_1.ShardingBatchInsertResult; } });
|
|
56
|
+
// 重新导出 CrudResult 类型
|
|
57
|
+
var CrudResult_1 = require("../../libs/crud-pro/models/CrudResult");
|
|
58
|
+
Object.defineProperty(exports, "CrudWriteResult", { enumerable: true, get: function () { return CrudResult_1.CrudWriteResult; } });
|
|
59
|
+
Object.defineProperty(exports, "CrudQueryOneResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryOneResult; } });
|
|
60
|
+
Object.defineProperty(exports, "CrudQueryListResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryListResult; } });
|
|
61
|
+
Object.defineProperty(exports, "CrudQueryPageResult", { enumerable: true, get: function () { return CrudResult_1.CrudQueryPageResult; } });
|
|
62
|
+
Object.defineProperty(exports, "CrudExistResult", { enumerable: true, get: function () { return CrudResult_1.CrudExistResult; } });
|
|
63
|
+
Object.defineProperty(exports, "CrudCountResult", { enumerable: true, get: function () { return CrudResult_1.CrudCountResult; } });
|
|
64
|
+
Object.defineProperty(exports, "CrudUpsertResult", { enumerable: true, get: function () { return CrudResult_1.CrudUpsertResult; } });
|
|
49
65
|
// 分表创建器
|
|
50
66
|
var ShardingTableCreator_1 = require("./ShardingTableCreator");
|
|
51
67
|
Object.defineProperty(exports, "ShardingTableCreator", { enumerable: true, get: function () { return ShardingTableCreator_1.ShardingTableCreator; } });
|
package/dist/models/RedisKeys.js
CHANGED
|
@@ -14,5 +14,6 @@ const RedisKeys = {
|
|
|
14
14
|
CURD_MIX_BY_DICT_PREFIX: 'FatCurdMixByDict@@',
|
|
15
15
|
QUERY_ENUM_INFO_PREFIX: 'FatQueryEnum@@',
|
|
16
16
|
REDIS_LOCK_MIDDILEWARE: 'FatRedisLock@@',
|
|
17
|
+
TABLE_META_CACHE_INVALIDATE_CHANNEL: 'FatTableMetaCacheInvalidate',
|
|
17
18
|
};
|
|
18
19
|
exports.RedisKeys = RedisKeys;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IVisitor } from '../libs/crud-pro/interfaces';
|
|
2
2
|
import { CacheLevelEnum } from "../models/SystemEntities";
|
|
3
|
+
export type { IRequestCfgModel2 } from '../libs/crud-pro-quick';
|
|
3
4
|
export interface IAccountEntity {
|
|
4
5
|
nick_name: string;
|
|
5
6
|
avatar: string;
|
|
@@ -81,11 +82,6 @@ export declare const CTX_VISITOR_AVATAR = "visitor.avatar";
|
|
|
81
82
|
export declare const CTX_VISITOR_NICKNAME = "visitor.nickName";
|
|
82
83
|
export declare const CTX_VISITOR_ACCOUNT_TYPE = "visitor.accountType";
|
|
83
84
|
export declare const CTX_WORKBENCH_CODE = "visitor.workbenchCode";
|
|
84
|
-
export interface IRequestCfgModel2 extends IRequestCfgModel {
|
|
85
|
-
enableStandardUpdateCfg?: boolean | string[];
|
|
86
|
-
enableStandardUpdateCfgCondition?: boolean | string[];
|
|
87
|
-
enableSoftDelete?: boolean;
|
|
88
|
-
}
|
|
89
85
|
export interface IVisitorExt extends IVisitor {
|
|
90
86
|
workbenchCode: string;
|
|
91
87
|
avatar: string;
|
|
@@ -7,8 +7,8 @@ export declare class SysAppService extends BaseService {
|
|
|
7
7
|
getSysAppPageOne({ page_path, workbench_code }: {
|
|
8
8
|
page_path: string;
|
|
9
9
|
workbench_code: string;
|
|
10
|
-
}): Promise<any
|
|
11
|
-
getSysAppOne(app_code: string): Promise<any
|
|
10
|
+
}): Promise<Record<string, any>>;
|
|
11
|
+
getSysAppOne(app_code: string): Promise<Record<string, any>>;
|
|
12
12
|
deletePrivateField(parsedAppInfo: any): any;
|
|
13
13
|
removeSysAppOneCache(app_code: string): Promise<any>;
|
|
14
14
|
removeSysAppCacheByCondition({ condition }: any): Promise<void>;
|
|
@@ -20,11 +20,19 @@ const bizmodels_1 = require("../models/bizmodels");
|
|
|
20
20
|
let SysAppService = class SysAppService extends BaseService_1.BaseService {
|
|
21
21
|
get sysAppDao() {
|
|
22
22
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
23
|
-
return this.curdProService.getQuickCrud(
|
|
23
|
+
return this.curdProService.getQuickCrud({
|
|
24
|
+
sqlDatabase: SystemDbName,
|
|
25
|
+
sqlDbType: SystemDbType,
|
|
26
|
+
sqlTable: SystemTables_1.SystemTables.sys_app,
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
get sysAppPageDao() {
|
|
26
30
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
27
|
-
return this.curdProService.getQuickCrud(
|
|
31
|
+
return this.curdProService.getQuickCrud({
|
|
32
|
+
sqlDatabase: SystemDbName,
|
|
33
|
+
sqlDbType: SystemDbType,
|
|
34
|
+
sqlTable: SystemTables_1.SystemTables.sys_app_page,
|
|
35
|
+
});
|
|
28
36
|
}
|
|
29
37
|
async getSysAppPageOne({ page_path, workbench_code }) {
|
|
30
38
|
if (!page_path || typeof page_path !== 'string') {
|
|
@@ -37,9 +45,10 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
|
|
|
37
45
|
cacheKey: `${workbench_code}#${page_path}`,
|
|
38
46
|
cacheName: bizmodels_1.CacheNameEnum.GetSysAppPageOne,
|
|
39
47
|
getter: async () => {
|
|
40
|
-
|
|
48
|
+
const res = await this.sysAppPageDao.findOne({
|
|
41
49
|
condition: { page_path, workbench_code, deleted_at: 0 }
|
|
42
50
|
});
|
|
51
|
+
return res.row;
|
|
43
52
|
},
|
|
44
53
|
});
|
|
45
54
|
}
|
|
@@ -51,9 +60,10 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
|
|
|
51
60
|
cacheKey: app_code,
|
|
52
61
|
cacheName: bizmodels_1.CacheNameEnum.GetSysAppOne,
|
|
53
62
|
getter: async () => {
|
|
54
|
-
|
|
63
|
+
const res = await this.sysAppDao.findOne({
|
|
55
64
|
condition: { app_code, deleted_at: 0 }
|
|
56
65
|
});
|
|
66
|
+
return res.row;
|
|
57
67
|
},
|
|
58
68
|
});
|
|
59
69
|
}
|
|
@@ -85,10 +95,11 @@ let SysAppService = class SysAppService extends BaseService_1.BaseService {
|
|
|
85
95
|
if (!condition) {
|
|
86
96
|
throw new Error('[removeSysAppCacheByCondition] condition required');
|
|
87
97
|
}
|
|
88
|
-
const
|
|
98
|
+
const res = await this.sysAppDao.findList({
|
|
89
99
|
condition: condition,
|
|
90
100
|
columns: ['id', 'app_code']
|
|
91
101
|
});
|
|
102
|
+
const appList = res.rows;
|
|
92
103
|
for (const app of appList) {
|
|
93
104
|
await this.removeSysAppOneCache(app.app_code);
|
|
94
105
|
}
|
|
@@ -5,6 +5,6 @@ export declare class SysConfigService extends BaseService {
|
|
|
5
5
|
private curdProService;
|
|
6
6
|
private cacheServiceFactory;
|
|
7
7
|
private get sysConfigsDao();
|
|
8
|
-
getSysConfigOne(config_code: string): Promise<any
|
|
8
|
+
getSysConfigOne(config_code: string): Promise<Record<string, any>>;
|
|
9
9
|
removeSysConfigOneCache(config_code: string): Promise<any>;
|
|
10
10
|
}
|
|
@@ -20,7 +20,11 @@ const CacheServiceFactory_1 = require("../service/base/cache/CacheServiceFactory
|
|
|
20
20
|
let SysConfigService = class SysConfigService extends BaseService_1.BaseService {
|
|
21
21
|
get sysConfigsDao() {
|
|
22
22
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
23
|
-
return this.curdProService.getQuickCrud(
|
|
23
|
+
return this.curdProService.getQuickCrud({
|
|
24
|
+
sqlDatabase: SystemDbName,
|
|
25
|
+
sqlDbType: SystemDbType,
|
|
26
|
+
sqlTable: SystemTables_1.SystemTables.sys_configs,
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
async getSysConfigOne(config_code) {
|
|
26
30
|
if (!config_code || typeof config_code !== 'string') {
|
|
@@ -30,9 +34,10 @@ let SysConfigService = class SysConfigService extends BaseService_1.BaseService
|
|
|
30
34
|
cacheKey: config_code,
|
|
31
35
|
cacheName: bizmodels_1.CacheNameEnum.GetSysConfigOne,
|
|
32
36
|
getter: async () => {
|
|
33
|
-
|
|
37
|
+
const res = await this.sysConfigsDao.findOne({
|
|
34
38
|
condition: { config_code, deleted_at: 0 }
|
|
35
39
|
});
|
|
40
|
+
return res.row;
|
|
36
41
|
},
|
|
37
42
|
});
|
|
38
43
|
}
|
|
@@ -20,11 +20,19 @@ const bizmodels_1 = require("../models/bizmodels");
|
|
|
20
20
|
let SysDictDataService = class SysDictDataService extends BaseService_1.BaseService {
|
|
21
21
|
get sys_data_dict_item() {
|
|
22
22
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
23
|
-
return this.curdProService.getQuickCrud(
|
|
23
|
+
return this.curdProService.getQuickCrud({
|
|
24
|
+
sqlDatabase: SystemDbName,
|
|
25
|
+
sqlDbType: SystemDbType,
|
|
26
|
+
sqlTable: SystemTables_1.SystemTables.sys_data_dict_item,
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
// private get sys_data_dict(){
|
|
26
30
|
// const { SystemDbName, SystemDbType } = GLOBAL_STATIC_CONFIG.getConfig();
|
|
27
|
-
// return this.curdProService.getQuickCrud(
|
|
31
|
+
// return this.curdProService.getQuickCrud({
|
|
32
|
+
// sqlDatabase: SystemDbName,
|
|
33
|
+
// sqlDbType: SystemDbType,
|
|
34
|
+
// sqlTable: SystemTables.sys_data_dict,
|
|
35
|
+
// })
|
|
28
36
|
// }
|
|
29
37
|
async getDataDictItemsByDictCode(dict_code) {
|
|
30
38
|
if (!dict_code || typeof dict_code !== 'string') {
|
|
@@ -34,14 +42,16 @@ let SysDictDataService = class SysDictDataService extends BaseService_1.BaseServ
|
|
|
34
42
|
cacheKey: dict_code,
|
|
35
43
|
cacheName: bizmodels_1.CacheNameEnum.GetDataDictItemsByDictCode,
|
|
36
44
|
getter: async () => {
|
|
37
|
-
|
|
45
|
+
const res = await this.sys_data_dict_item.findList({
|
|
38
46
|
condition: { dict_code, status: 1, deleted_at: 0 }
|
|
39
47
|
});
|
|
48
|
+
return res.rows;
|
|
40
49
|
},
|
|
41
50
|
});
|
|
42
51
|
}
|
|
43
52
|
async removeCacheByDictItemId(dict_item_id) {
|
|
44
|
-
const
|
|
53
|
+
const res = await this.sys_data_dict_item.findOne({ condition: { id: dict_item_id } });
|
|
54
|
+
const dictItemObj = res.row;
|
|
45
55
|
return this.removeCacheByDictCode(dictItemObj['dict_code']);
|
|
46
56
|
}
|
|
47
57
|
// public async removeCacheByDictId(dict_id: string) {
|
|
@@ -20,7 +20,11 @@ const bizmodels_1 = require("../models/bizmodels");
|
|
|
20
20
|
let SysMenuService = class SysMenuService extends BaseService_1.BaseService {
|
|
21
21
|
get sys_menus_table() {
|
|
22
22
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
23
|
-
return this.curdProService.getQuickCrud(
|
|
23
|
+
return this.curdProService.getQuickCrud({
|
|
24
|
+
sqlDatabase: SystemDbName,
|
|
25
|
+
sqlDbType: SystemDbType,
|
|
26
|
+
sqlTable: SystemTables_1.SystemTables.sys_menus,
|
|
27
|
+
});
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
30
|
* 获取所有菜单列表
|
|
@@ -31,9 +35,10 @@ let SysMenuService = class SysMenuService extends BaseService_1.BaseService {
|
|
|
31
35
|
cacheKey: bizmodels_1.CacheNameEnum.GetSysMenusList,
|
|
32
36
|
cacheName: bizmodels_1.CacheNameEnum.GetSysMenusList,
|
|
33
37
|
getter: async () => {
|
|
34
|
-
|
|
38
|
+
const res = await this.sys_menus_table.findList({
|
|
35
39
|
condition: {}
|
|
36
40
|
});
|
|
41
|
+
return res.rows;
|
|
37
42
|
},
|
|
38
43
|
});
|
|
39
44
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { RedisService } from '@midwayjs/redis';
|
|
2
|
+
/**
|
|
3
|
+
* 初始化发布客户端
|
|
4
|
+
*
|
|
5
|
+
* 在 Midway 容器初始化完成后调用,注入已有的 RedisService 实例
|
|
6
|
+
* @param client RedisService 实例
|
|
7
|
+
*/
|
|
8
|
+
export declare function initTableMetaCachePublishClient(client: RedisService): void;
|
|
9
|
+
/**
|
|
10
|
+
* 初始化 Redis 订阅,监听缓存失效广播
|
|
11
|
+
*
|
|
12
|
+
* 使用 RedisService.duplicate() 创建独立的订阅连接。
|
|
13
|
+
* 收到广播后自动清空本节点的本地缓存。
|
|
14
|
+
*
|
|
15
|
+
* @param mainClient 已有的 RedisService 实例,用于 duplicate 出订阅连接
|
|
16
|
+
*/
|
|
17
|
+
export declare function initTableMetaCacheSubscriber(mainClient: RedisService): void;
|
|
18
|
+
/**
|
|
19
|
+
* 清空本节点缓存并广播通知集群中其他节点
|
|
20
|
+
*
|
|
21
|
+
* 调用流程:
|
|
22
|
+
* 1. 清空本节点本地缓存
|
|
23
|
+
* 2. 通过 Redis PUBLISH 广播消息
|
|
24
|
+
* 3. 其他节点收到消息后清空各自的本地缓存
|
|
25
|
+
*
|
|
26
|
+
* @returns 清空前的缓存统计
|
|
27
|
+
*/
|
|
28
|
+
export declare function clearTableMetaCacheWithBroadcast(): {
|
|
29
|
+
metaCacheCount: number;
|
|
30
|
+
tableInfoCacheCount: number;
|
|
31
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearTableMetaCacheWithBroadcast = exports.initTableMetaCacheSubscriber = exports.initTableMetaCachePublishClient = void 0;
|
|
4
|
+
const CrudProTableMetaService_1 = require("../libs/crud-pro/services/CrudProTableMetaService");
|
|
5
|
+
const RedisKeys_1 = require("../models/RedisKeys");
|
|
6
|
+
const CHANNEL = RedisKeys_1.RedisKeys.TABLE_META_CACHE_INVALIDATE_CHANNEL;
|
|
7
|
+
/**
|
|
8
|
+
* 本节点唯一标识,用于区分是自己发出的广播还是其他节点发出的
|
|
9
|
+
* 避免重复清空(本节点已在发布前清空过)
|
|
10
|
+
*/
|
|
11
|
+
const NODE_ID = `node_${process.pid}_${Date.now()}`;
|
|
12
|
+
/**
|
|
13
|
+
* 用于发布消息的 Redis 客户端(复用 @midwayjs/redis 注入的实例)
|
|
14
|
+
*/
|
|
15
|
+
let publishClient = null;
|
|
16
|
+
/**
|
|
17
|
+
* 用于订阅的 Redis 客户端(独立连接,ioredis 规定订阅连接不能执行普通命令)
|
|
18
|
+
*/
|
|
19
|
+
let subscribeClient = null;
|
|
20
|
+
/**
|
|
21
|
+
* 初始化发布客户端
|
|
22
|
+
*
|
|
23
|
+
* 在 Midway 容器初始化完成后调用,注入已有的 RedisService 实例
|
|
24
|
+
* @param client RedisService 实例
|
|
25
|
+
*/
|
|
26
|
+
function initTableMetaCachePublishClient(client) {
|
|
27
|
+
publishClient = client;
|
|
28
|
+
}
|
|
29
|
+
exports.initTableMetaCachePublishClient = initTableMetaCachePublishClient;
|
|
30
|
+
/**
|
|
31
|
+
* 初始化 Redis 订阅,监听缓存失效广播
|
|
32
|
+
*
|
|
33
|
+
* 使用 RedisService.duplicate() 创建独立的订阅连接。
|
|
34
|
+
* 收到广播后自动清空本节点的本地缓存。
|
|
35
|
+
*
|
|
36
|
+
* @param mainClient 已有的 RedisService 实例,用于 duplicate 出订阅连接
|
|
37
|
+
*/
|
|
38
|
+
function initTableMetaCacheSubscriber(mainClient) {
|
|
39
|
+
if (subscribeClient) {
|
|
40
|
+
return; // 防止重复初始化
|
|
41
|
+
}
|
|
42
|
+
// duplicate() 创建一个同配置的独立连接
|
|
43
|
+
subscribeClient = mainClient.duplicate();
|
|
44
|
+
subscribeClient.subscribe(CHANNEL).catch((err) => {
|
|
45
|
+
console.error('[TableMetaCacheRedis] subscribe failed:', err.message);
|
|
46
|
+
});
|
|
47
|
+
subscribeClient.on('message', (channel, message) => {
|
|
48
|
+
if (channel !== CHANNEL)
|
|
49
|
+
return;
|
|
50
|
+
try {
|
|
51
|
+
const data = JSON.parse(message);
|
|
52
|
+
// 跳过自己发出的广播(本节点已在发布前清空过)
|
|
53
|
+
if (data.nodeId === NODE_ID)
|
|
54
|
+
return;
|
|
55
|
+
const stats = (0, CrudProTableMetaService_1.clearTableMetaCache)();
|
|
56
|
+
console.info(`[TableMetaCacheRedis] 收到其他节点(${data.nodeId})的缓存清空广播,已清空本地缓存:`, stats);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.error('[TableMetaCacheRedis] 处理缓存失效广播异常:', e);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
subscribeClient.on('error', (err) => {
|
|
63
|
+
console.error('[TableMetaCacheRedis] subscriber connection error:', err.message);
|
|
64
|
+
});
|
|
65
|
+
console.info('[TableMetaCacheRedis] 订阅已启动,监听频道:', CHANNEL);
|
|
66
|
+
}
|
|
67
|
+
exports.initTableMetaCacheSubscriber = initTableMetaCacheSubscriber;
|
|
68
|
+
/**
|
|
69
|
+
* 清空本节点缓存并广播通知集群中其他节点
|
|
70
|
+
*
|
|
71
|
+
* 调用流程:
|
|
72
|
+
* 1. 清空本节点本地缓存
|
|
73
|
+
* 2. 通过 Redis PUBLISH 广播消息
|
|
74
|
+
* 3. 其他节点收到消息后清空各自的本地缓存
|
|
75
|
+
*
|
|
76
|
+
* @returns 清空前的缓存统计
|
|
77
|
+
*/
|
|
78
|
+
function clearTableMetaCacheWithBroadcast() {
|
|
79
|
+
// 1. 清空本节点缓存
|
|
80
|
+
const stats = (0, CrudProTableMetaService_1.clearTableMetaCache)();
|
|
81
|
+
// 2. 广播通知其他节点
|
|
82
|
+
if (publishClient && typeof publishClient.publish === 'function') {
|
|
83
|
+
const message = JSON.stringify({
|
|
84
|
+
nodeId: NODE_ID,
|
|
85
|
+
timestamp: Date.now(),
|
|
86
|
+
beforeClear: stats,
|
|
87
|
+
});
|
|
88
|
+
publishClient.publish(CHANNEL, message).catch((err) => {
|
|
89
|
+
console.error('[TableMetaCacheRedis] publish failed:', err.message);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// 没有 Redis 连接时仅清空本地(单节点部署降级)
|
|
94
|
+
console.info('[TableMetaCacheRedis] 无 Redis 发布客户端,仅清空本节点缓存');
|
|
95
|
+
}
|
|
96
|
+
return stats;
|
|
97
|
+
}
|
|
98
|
+
exports.clearTableMetaCacheWithBroadcast = clearTableMetaCacheWithBroadcast;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery } from '../../libs/crud-pro/interfaces';
|
|
1
|
+
import { ColumnRelation, IRequestCfgModel, IRequestModel, ISqlCfgModel, ITableListResult, ITableNamesOptions, ITableNamesQuery, ExecuteSQLResult } from '../../libs/crud-pro/interfaces';
|
|
2
2
|
import { IRequestCfgModel2 } from '../../models/bizmodels';
|
|
3
|
-
import { SqlDbType } from '../../libs/crud-pro/models/keys';
|
|
4
3
|
import { ExecuteContext } from '../../libs/crud-pro/models/ExecuteContext';
|
|
4
|
+
import { ShardingBase } from "../../libs/crud-sharding";
|
|
5
|
+
import { IGetQuickCrudParam, IGetShardingCrudParam } from './CurdProService';
|
|
5
6
|
export interface ILinkColumnRelationParam {
|
|
6
7
|
columnsRelations: ColumnRelation[];
|
|
7
8
|
}
|
|
@@ -14,8 +15,9 @@ export declare class CurdMixService {
|
|
|
14
15
|
private curdMixByLinkToCustomService;
|
|
15
16
|
private prepare;
|
|
16
17
|
executeCrudByCfg(reqJson: IRequestModel, cfgModel: IRequestCfgModel2): Promise<ExecuteContext>;
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
getQuickCrud(param: IGetQuickCrudParam): import("../..").CrudProQuick;
|
|
19
|
+
getShardingCrud(param: IGetShardingCrudParam): ShardingBase;
|
|
20
|
+
executeSQL(sqlCfgModel: ISqlCfgModel): Promise<ExecuteSQLResult>;
|
|
19
21
|
executeCrud(reqJson: IRequestModel): Promise<ExecuteContext>;
|
|
20
22
|
getCachedCfgByMethod(method: string): Promise<IRequestCfgModel>;
|
|
21
23
|
/**
|
|
@@ -30,9 +30,23 @@ let CurdMixService = class CurdMixService {
|
|
|
30
30
|
this.prepare();
|
|
31
31
|
return this.curdProService.executeCrudByCfg(reqJson, cfgModel);
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
// /**
|
|
34
|
+
// * @deprecated 请使用 getQuickCrud 替代
|
|
35
|
+
// * @param sqlDatabase
|
|
36
|
+
// * @param sqlDbType
|
|
37
|
+
// * @param sqlTable
|
|
38
|
+
// */
|
|
39
|
+
// getBbUtil(sqlDatabase: string, sqlDbType: SqlDbType, sqlTable?: string) {
|
|
40
|
+
// this.prepare();
|
|
41
|
+
// return this.curdProService.getQuickCrud({ sqlDatabase, sqlDbType, sqlTable });
|
|
42
|
+
// }
|
|
43
|
+
getQuickCrud(param) {
|
|
34
44
|
this.prepare();
|
|
35
|
-
return this.curdProService.getQuickCrud(
|
|
45
|
+
return this.curdProService.getQuickCrud(param);
|
|
46
|
+
}
|
|
47
|
+
getShardingCrud(param) {
|
|
48
|
+
this.prepare();
|
|
49
|
+
return this.curdProService.getShardingCrud(param);
|
|
36
50
|
}
|
|
37
51
|
async executeSQL(sqlCfgModel) {
|
|
38
52
|
this.prepare();
|