midway-fatcms 0.0.1-beta.75 → 0.0.1-beta.76
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/.eslintrc.json +14 -14
- package/.prettierrc.js +4 -4
- package/README.md +8 -8
- package/dist/config/config.default.d.ts +3 -3
- package/dist/config/config.default.js +177 -177
- package/dist/config/utils.d.ts +1 -1
- package/dist/config/utils.js +23 -23
- package/dist/configuration.d.ts +7 -7
- package/dist/configuration.js +113 -113
- package/dist/controller/base/BaseApiController.d.ts +48 -48
- package/dist/controller/base/BaseApiController.js +197 -193
- package/dist/controller/gateway/AnyApiGatewayController.d.ts +13 -13
- package/dist/controller/gateway/AnyApiGatewayController.js +55 -55
- package/dist/controller/gateway/AsyncTaskController.d.ts +20 -20
- package/dist/controller/gateway/AsyncTaskController.js +181 -181
- package/dist/controller/gateway/CrudMtdGatewayController.d.ts +21 -21
- package/dist/controller/gateway/CrudMtdGatewayController.js +122 -122
- package/dist/controller/gateway/CrudStdGatewayController.d.ts +39 -39
- package/dist/controller/gateway/CrudStdGatewayController.js +149 -149
- package/dist/controller/gateway/DocGatewayController.d.ts +27 -27
- package/dist/controller/gateway/DocGatewayController.js +179 -179
- package/dist/controller/gateway/FileController.d.ts +32 -32
- package/dist/controller/gateway/FileController.js +160 -160
- package/dist/controller/gateway/ProxyApiGatewayController.d.ts +18 -18
- package/dist/controller/gateway/ProxyApiGatewayController.js +78 -78
- package/dist/controller/gateway/PublicApiController.d.ts +33 -33
- package/dist/controller/gateway/PublicApiController.js +201 -201
- package/dist/controller/gateway/StaticController.d.ts +23 -23
- package/dist/controller/gateway/StaticController.js +286 -286
- package/dist/controller/helpers.controller.d.ts +39 -39
- package/dist/controller/helpers.controller.js +188 -188
- package/dist/controller/home.controller.d.ts +9 -9
- package/dist/controller/home.controller.js +72 -72
- package/dist/controller/manage/AnyApiMangeApi.d.ts +10 -10
- package/dist/controller/manage/AnyApiMangeApi.js +98 -98
- package/dist/controller/manage/AppLogMangeApi.d.ts +10 -10
- package/dist/controller/manage/AppLogMangeApi.js +88 -88
- package/dist/controller/manage/AppMangeApi.d.ts +12 -12
- package/dist/controller/manage/AppMangeApi.js +101 -101
- package/dist/controller/manage/AppPageMangeApi.d.ts +10 -10
- package/dist/controller/manage/AppPageMangeApi.js +87 -87
- package/dist/controller/manage/AppSchemaHistoryApi.d.ts +10 -10
- package/dist/controller/manage/AppSchemaHistoryApi.js +83 -83
- package/dist/controller/manage/CrudMethodsMangeApi.d.ts +10 -10
- package/dist/controller/manage/CrudMethodsMangeApi.js +84 -84
- package/dist/controller/manage/CrudStandardDesignApi.d.ts +46 -46
- package/dist/controller/manage/CrudStandardDesignApi.js +367 -367
- package/dist/controller/manage/DataDictManageApi.d.ts +17 -17
- package/dist/controller/manage/DataDictManageApi.js +165 -165
- package/dist/controller/manage/DeployManageApi.d.ts +19 -19
- package/dist/controller/manage/DeployManageApi.js +180 -180
- package/dist/controller/manage/DocLibManageApi.d.ts +10 -10
- package/dist/controller/manage/DocLibManageApi.js +104 -104
- package/dist/controller/manage/DocManageApi.d.ts +11 -11
- package/dist/controller/manage/DocManageApi.js +130 -130
- package/dist/controller/manage/FileManageApi.d.ts +13 -13
- package/dist/controller/manage/FileManageApi.js +77 -77
- package/dist/controller/manage/LowCodeTplManageApi.d.ts +13 -13
- package/dist/controller/manage/LowCodeTplManageApi.js +86 -86
- package/dist/controller/manage/MenuManageApi.d.ts +10 -10
- package/dist/controller/manage/MenuManageApi.js +93 -93
- package/dist/controller/manage/ProxyApiMangeApi.d.ts +10 -10
- package/dist/controller/manage/ProxyApiMangeApi.js +87 -87
- package/dist/controller/manage/SuperAdminManageApi.d.ts +24 -24
- package/dist/controller/manage/SuperAdminManageApi.js +153 -153
- package/dist/controller/manage/SysConfigMangeApi.d.ts +12 -12
- package/dist/controller/manage/SysConfigMangeApi.js +133 -133
- package/dist/controller/manage/SystemInfoManageApi.d.ts +12 -12
- package/dist/controller/manage/SystemInfoManageApi.js +74 -72
- package/dist/controller/manage/UserAccountManageApi.d.ts +16 -16
- package/dist/controller/manage/UserAccountManageApi.js +153 -153
- package/dist/controller/manage/WorkbenchMangeApi.d.ts +11 -11
- package/dist/controller/manage/WorkbenchMangeApi.js +103 -103
- package/dist/controller/myinfo/AuthController.d.ts +37 -37
- package/dist/controller/myinfo/AuthController.js +157 -157
- package/dist/controller/myinfo/MyInfoController.d.ts +13 -13
- package/dist/controller/myinfo/MyInfoController.js +51 -51
- package/dist/controller/render/AppRenderController.d.ts +12 -12
- package/dist/controller/render/AppRenderController.js +87 -87
- package/dist/controller/test.controller.d.ts +8 -8
- package/dist/controller/test.controller.js +51 -51
- package/dist/filter/default.filter.d.ts +7 -7
- package/dist/filter/default.filter.js +23 -23
- package/dist/filter/notfound.filter.d.ts +5 -5
- package/dist/filter/notfound.filter.js +20 -20
- package/dist/index.d.ts +106 -106
- package/dist/index.js +124 -124
- package/dist/interface.d.ts +29 -29
- package/dist/interface.js +3 -3
- package/dist/libs/crud-pro/CrudPro.d.ts +37 -37
- package/dist/libs/crud-pro/CrudPro.js +136 -136
- package/dist/libs/crud-pro/defaultConfigs.d.ts +4 -4
- package/dist/libs/crud-pro/defaultConfigs.js +15 -15
- package/dist/libs/crud-pro/exceptions.d.ts +106 -106
- package/dist/libs/crud-pro/exceptions.js +119 -119
- package/dist/libs/crud-pro/interfaces.d.ts +166 -166
- package/dist/libs/crud-pro/interfaces.js +12 -12
- package/dist/libs/crud-pro/models/ExecuteContext.d.ts +50 -50
- package/dist/libs/crud-pro/models/ExecuteContext.js +87 -87
- package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +38 -38
- package/dist/libs/crud-pro/models/ExecuteContextFunc.js +72 -72
- package/dist/libs/crud-pro/models/FuncContext.d.ts +18 -18
- package/dist/libs/crud-pro/models/FuncContext.js +6 -6
- package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +65 -65
- package/dist/libs/crud-pro/models/RequestCfgModel.js +81 -81
- package/dist/libs/crud-pro/models/RequestModel.d.ts +25 -25
- package/dist/libs/crud-pro/models/RequestModel.js +113 -113
- package/dist/libs/crud-pro/models/ResModel.d.ts +20 -20
- package/dist/libs/crud-pro/models/ResModel.js +2 -2
- package/dist/libs/crud-pro/models/ServiceHub.d.ts +20 -20
- package/dist/libs/crud-pro/models/ServiceHub.js +2 -2
- package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +23 -23
- package/dist/libs/crud-pro/models/SqlCfgModel.js +40 -40
- package/dist/libs/crud-pro/models/SqlSegArg.d.ts +6 -6
- package/dist/libs/crud-pro/models/SqlSegArg.js +12 -12
- package/dist/libs/crud-pro/models/Transaction.d.ts +30 -30
- package/dist/libs/crud-pro/models/Transaction.js +74 -74
- package/dist/libs/crud-pro/models/TransactionMySQL.d.ts +29 -28
- package/dist/libs/crud-pro/models/TransactionMySQL.js +83 -76
- package/dist/libs/crud-pro/models/TransactionPostgres.d.ts +29 -28
- package/dist/libs/crud-pro/models/TransactionPostgres.js +91 -85
- package/dist/libs/crud-pro/models/TransactionSqlServer.d.ts +35 -34
- package/dist/libs/crud-pro/models/TransactionSqlServer.js +100 -92
- package/dist/libs/crud-pro/models/keys.d.ts +110 -110
- package/dist/libs/crud-pro/models/keys.js +154 -154
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +11 -11
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +73 -73
- package/dist/libs/crud-pro/services/CrudProExecuteFuncService.d.ts +9 -9
- package/dist/libs/crud-pro/services/CrudProExecuteFuncService.js +125 -125
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.d.ts +17 -17
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +225 -225
- package/dist/libs/crud-pro/services/CrudProFieldUpdateService.d.ts +9 -9
- package/dist/libs/crud-pro/services/CrudProFieldUpdateService.js +51 -51
- package/dist/libs/crud-pro/services/CrudProFieldValidateService.d.ts +13 -13
- package/dist/libs/crud-pro/services/CrudProFieldValidateService.js +148 -148
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +24 -24
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +355 -355
- package/dist/libs/crud-pro/services/CrudProGenSqlService.d.ts +25 -25
- package/dist/libs/crud-pro/services/CrudProGenSqlService.js +165 -165
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.d.ts +32 -32
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +339 -339
- package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +24 -24
- package/dist/libs/crud-pro/services/CrudProServiceBase.js +88 -88
- package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +9 -9
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +72 -72
- package/dist/libs/crud-pro/services/CurdProServiceHub.d.ts +32 -32
- package/dist/libs/crud-pro/services/CurdProServiceHub.js +64 -64
- package/dist/libs/crud-pro/utils/CompareUtils.d.ts +9 -9
- package/dist/libs/crud-pro/utils/CompareUtils.js +25 -25
- package/dist/libs/crud-pro/utils/CrudMonitor.d.ts +9 -0
- package/dist/libs/crud-pro/utils/CrudMonitor.js +12 -0
- package/dist/libs/crud-pro/utils/DatabaseName.d.ts +9 -9
- package/dist/libs/crud-pro/utils/DatabaseName.js +50 -50
- package/dist/libs/crud-pro/utils/DateTimeUtils.d.ts +7 -7
- package/dist/libs/crud-pro/utils/DateTimeUtils.js +21 -21
- package/dist/libs/crud-pro/utils/MemoryRefreshCache.d.ts +19 -19
- package/dist/libs/crud-pro/utils/MemoryRefreshCache.js +47 -47
- package/dist/libs/crud-pro/utils/MessageParseUtils.d.ts +5 -5
- package/dist/libs/crud-pro/utils/MessageParseUtils.js +33 -33
- package/dist/libs/crud-pro/utils/MixinUtils.d.ts +39 -39
- package/dist/libs/crud-pro/utils/MixinUtils.js +255 -255
- package/dist/libs/crud-pro/utils/ModelUtils.d.ts +11 -11
- package/dist/libs/crud-pro/utils/ModelUtils.js +54 -54
- package/dist/libs/crud-pro/utils/MultiKeyMap.d.ts +11 -11
- package/dist/libs/crud-pro/utils/MultiKeyMap.js +63 -63
- package/dist/libs/crud-pro/utils/SqlFuncUtils.d.ts +5 -5
- package/dist/libs/crud-pro/utils/SqlFuncUtils.js +29 -29
- package/dist/libs/crud-pro/utils/TypeUtils.d.ts +40 -40
- package/dist/libs/crud-pro/utils/TypeUtils.js +166 -166
- package/dist/libs/crud-pro/utils/ValidateUtils.d.ts +3 -3
- package/dist/libs/crud-pro/utils/ValidateUtils.js +165 -165
- package/dist/libs/crud-pro/utils/pool/MySQLUtils.d.ts +3 -3
- package/dist/libs/crud-pro/utils/pool/MySQLUtils.js +19 -19
- package/dist/libs/crud-pro/utils/pool/PostgresUtils.d.ts +3 -3
- package/dist/libs/crud-pro/utils/pool/PostgresUtils.js +20 -20
- package/dist/libs/crud-pro/utils/pool/SqlServerUtils.d.ts +3 -3
- package/dist/libs/crud-pro/utils/pool/SqlServerUtils.js +20 -20
- package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.d.ts +4 -4
- package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +35 -35
- package/dist/libs/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -3
- package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -22
- package/dist/libs/crud-pro/utils/sqlConvert/convertMsSql.d.ts +2 -2
- package/dist/libs/crud-pro/utils/sqlConvert/convertMsSql.js +14 -14
- package/dist/libs/crud-pro/utils/sqlConvert/convertPgSql.d.ts +2 -2
- package/dist/libs/crud-pro/utils/sqlConvert/convertPgSql.js +14 -14
- package/dist/libs/crud-pro/utils/sqlConvert/convertPgType.d.ts +2 -2
- package/dist/libs/crud-pro/utils/sqlConvert/convertPgType.js +128 -128
- package/dist/libs/global-config/global-config.d.ts +69 -69
- package/dist/libs/global-config/global-config.js +36 -36
- package/dist/libs/utils/AsymmetricCrypto.d.ts +76 -76
- package/dist/libs/utils/AsymmetricCrypto.js +261 -261
- package/dist/libs/utils/base64.d.ts +9 -9
- package/dist/libs/utils/base64.js +42 -42
- package/dist/libs/utils/common-dto.d.ts +18 -18
- package/dist/libs/utils/common-dto.js +40 -40
- package/dist/libs/utils/crypto-utils.d.ts +3 -3
- package/dist/libs/utils/crypto-utils.js +46 -46
- package/dist/libs/utils/errorToString.d.ts +2 -2
- package/dist/libs/utils/errorToString.js +57 -57
- package/dist/libs/utils/fatcms-request.d.ts +30 -30
- package/dist/libs/utils/fatcms-request.js +104 -104
- package/dist/libs/utils/format-url.d.ts +2 -2
- package/dist/libs/utils/format-url.js +13 -13
- package/dist/libs/utils/functions.d.ts +5 -5
- package/dist/libs/utils/functions.js +76 -76
- package/dist/libs/utils/ordernum-utils.d.ts +2 -2
- package/dist/libs/utils/ordernum-utils.js +13 -13
- package/dist/libs/utils/parseConfig.d.ts +8 -8
- package/dist/libs/utils/parseConfig.js +47 -47
- package/dist/libs/utils/parseCreateSql.d.ts +10 -10
- package/dist/libs/utils/parseCreateSql.js +87 -87
- package/dist/libs/utils/render-utils.d.ts +37 -37
- package/dist/libs/utils/render-utils.js +154 -154
- package/dist/middleware/forbidden.middleware.d.ts +10 -10
- package/dist/middleware/forbidden.middleware.js +54 -54
- package/dist/middleware/global.middleware.d.ts +10 -10
- package/dist/middleware/global.middleware.js +273 -273
- package/dist/middleware/permission.middleware.d.ts +18 -18
- package/dist/middleware/permission.middleware.js +74 -74
- package/dist/middleware/rediscache.middleware.d.ts +3 -3
- package/dist/middleware/rediscache.middleware.js +77 -77
- package/dist/middleware/redislock.middleware.d.ts +7 -7
- package/dist/middleware/redislock.middleware.js +72 -72
- package/dist/middleware/tx.middleware.d.ts +9 -9
- package/dist/middleware/tx.middleware.js +40 -40
- package/dist/models/AsyncTaskModel.d.ts +74 -74
- package/dist/models/AsyncTaskModel.js +31 -31
- package/dist/models/RedisKeys.d.ts +15 -15
- package/dist/models/RedisKeys.js +18 -18
- package/dist/models/SystemEntities.d.ts +117 -117
- package/dist/models/SystemEntities.js +17 -17
- package/dist/models/SystemPerm.d.ts +95 -95
- package/dist/models/SystemPerm.js +100 -100
- package/dist/models/SystemTables.d.ts +25 -25
- package/dist/models/SystemTables.js +28 -28
- package/dist/models/WorkbenchInfoTools.d.ts +7 -7
- package/dist/models/WorkbenchInfoTools.js +20 -20
- package/dist/models/bizmodels.d.ts +138 -138
- package/dist/models/bizmodels.js +61 -61
- package/dist/models/contextLogger.d.ts +27 -27
- package/dist/models/contextLogger.js +119 -119
- package/dist/models/devops.d.ts +12 -12
- package/dist/models/devops.js +19 -19
- package/dist/models/userSession.d.ts +65 -65
- package/dist/models/userSession.js +168 -168
- package/dist/schedule/anonymousContext.d.ts +15 -15
- package/dist/schedule/anonymousContext.js +73 -73
- package/dist/schedule/index.d.ts +4 -4
- package/dist/schedule/index.js +10 -10
- package/dist/schedule/runSchedule.d.ts +12 -12
- package/dist/schedule/runSchedule.js +68 -68
- package/dist/schedule/scheduleNames.d.ts +15 -15
- package/dist/schedule/scheduleNames.js +19 -19
- package/dist/service/AuthService.d.ts +57 -57
- package/dist/service/AuthService.js +265 -265
- package/dist/service/EnumInfoService.d.ts +30 -30
- package/dist/service/EnumInfoService.js +97 -97
- package/dist/service/FileCenterService.d.ts +64 -64
- package/dist/service/FileCenterService.js +422 -422
- package/dist/service/SysAppService.d.ts +14 -14
- package/dist/service/SysAppService.js +96 -96
- package/dist/service/SysConfigService.d.ts +10 -10
- package/dist/service/SysConfigService.js +64 -64
- package/dist/service/SysDictDataService.d.ts +9 -9
- package/dist/service/SysDictDataService.js +72 -72
- package/dist/service/UserAccountService.d.ts +23 -23
- package/dist/service/UserAccountService.js +107 -107
- package/dist/service/UserSessionService.d.ts +43 -43
- package/dist/service/UserSessionService.js +163 -163
- package/dist/service/VisitStatService.d.ts +14 -14
- package/dist/service/VisitStatService.js +158 -158
- package/dist/service/WorkbenchService.d.ts +59 -59
- package/dist/service/WorkbenchService.js +249 -249
- package/dist/service/anyapi/AnyApiSandboxService.d.ts +15 -15
- package/dist/service/anyapi/AnyApiSandboxService.js +110 -110
- package/dist/service/anyapi/AnyApiService.d.ts +27 -27
- package/dist/service/anyapi/AnyApiService.js +181 -181
- package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +50 -50
- package/dist/service/asyncTask/AsyncTaskRunnerService.js +287 -287
- package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -7
- package/dist/service/asyncTask/AsyncTaskService.js +34 -34
- package/dist/service/asyncTask/handler/ExcelInfoModel.d.ts +10 -10
- package/dist/service/asyncTask/handler/ExcelInfoModel.js +2 -2
- package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.d.ts +7 -7
- package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.js +216 -216
- package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.d.ts +36 -36
- package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.js +141 -141
- package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.d.ts +46 -46
- package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.js +135 -135
- package/dist/service/base/ApiBaseService.d.ts +15 -15
- package/dist/service/base/ApiBaseService.js +50 -50
- package/dist/service/base/ApiRateLimiter.d.ts +10 -10
- package/dist/service/base/ApiRateLimiter.js +51 -51
- package/dist/service/base/BaseService.d.ts +41 -41
- package/dist/service/base/BaseService.js +101 -101
- package/dist/service/base/cache/CacheServiceFactory.d.ts +26 -26
- package/dist/service/base/cache/CacheServiceFactory.js +122 -122
- package/dist/service/base/cache/CtxCache.d.ts +18 -18
- package/dist/service/base/cache/CtxCache.js +37 -37
- package/dist/service/base/cache/DiskCache.d.ts +19 -19
- package/dist/service/base/cache/DiskCache.js +74 -74
- package/dist/service/base/cache/MemoryCache.d.ts +12 -12
- package/dist/service/base/cache/MemoryCache.js +58 -58
- package/dist/service/base/cache/NoneCache.d.ts +10 -10
- package/dist/service/base/cache/NoneCache.js +19 -19
- package/dist/service/base/cache/RedisCache.d.ts +14 -14
- package/dist/service/base/cache/RedisCache.js +31 -31
- package/dist/service/crudstd/CrudStdActionService.d.ts +17 -17
- package/dist/service/crudstd/CrudStdActionService.js +32 -32
- package/dist/service/crudstd/CrudStdConstant.d.ts +58 -58
- package/dist/service/crudstd/CrudStdConstant.js +64 -64
- package/dist/service/crudstd/CrudStdRelationService.d.ts +10 -10
- package/dist/service/crudstd/CrudStdRelationService.js +121 -121
- package/dist/service/crudstd/CrudStdService.d.ts +60 -60
- package/dist/service/crudstd/CrudStdService.js +376 -376
- package/dist/service/curd/CrudProQuick.d.ts +50 -50
- package/dist/service/curd/CrudProQuick.js +163 -163
- package/dist/service/curd/CurdMixByAccountService.d.ts +13 -13
- package/dist/service/curd/CurdMixByAccountService.js +151 -151
- package/dist/service/curd/CurdMixByDictService.d.ts +12 -12
- package/dist/service/curd/CurdMixByDictService.js +114 -114
- package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +30 -30
- package/dist/service/curd/CurdMixByLinkToCustomService.js +209 -209
- package/dist/service/curd/CurdMixBySysConfigService.d.ts +13 -13
- package/dist/service/curd/CurdMixBySysConfigService.js +116 -116
- package/dist/service/curd/CurdMixByWorkbenchService.d.ts +11 -11
- package/dist/service/curd/CurdMixByWorkbenchService.js +80 -80
- package/dist/service/curd/CurdMixService.d.ts +28 -28
- package/dist/service/curd/CurdMixService.js +100 -100
- package/dist/service/curd/CurdMixUtils.d.ts +57 -57
- package/dist/service/curd/CurdMixUtils.js +331 -331
- package/dist/service/curd/CurdProService.d.ts +32 -32
- package/dist/service/curd/CurdProService.js +212 -212
- package/dist/service/curd/fixCfgModel.d.ts +3 -3
- package/dist/service/curd/fixCfgModel.js +104 -104
- package/dist/service/proxyapi/ProxyApiLoadService.d.ts +21 -21
- package/dist/service/proxyapi/ProxyApiLoadService.js +167 -167
- package/dist/service/proxyapi/ProxyApiService.d.ts +61 -61
- package/dist/service/proxyapi/ProxyApiService.js +294 -294
- package/dist/service/proxyapi/ProxyApiUtils.d.ts +15 -15
- package/dist/service/proxyapi/ProxyApiUtils.js +34 -34
- package/dist/service/proxyapi/RouteHandler.d.ts +5 -5
- package/dist/service/proxyapi/RouteHandler.js +9 -9
- package/dist/service/proxyapi/RouteTrie.d.ts +12 -12
- package/dist/service/proxyapi/RouteTrie.js +63 -63
- package/dist/service/proxyapi/WeightedRandom.d.ts +9 -9
- package/dist/service/proxyapi/WeightedRandom.js +31 -31
- package/dist/service/proxyapi/WeightedRoundRobin.d.ts +8 -8
- package/dist/service/proxyapi/WeightedRoundRobin.js +32 -32
- package/index.d.ts +10 -10
- package/package.json +87 -87
- package/src/controller/base/BaseApiController.ts +7 -2
- package/src/controller/manage/SuperAdminManageApi.ts +6 -6
- package/src/controller/manage/SystemInfoManageApi.ts +2 -0
- package/src/libs/crud-pro/models/TransactionMySQL.ts +13 -3
- package/src/libs/crud-pro/models/TransactionPostgres.ts +9 -3
- package/src/libs/crud-pro/models/TransactionSqlServer.ts +19 -8
- package/src/libs/crud-pro/utils/CrudMonitor.ts +13 -0
- package/src/libs/utils/AsymmetricCrypto.ts +307 -307
- package/src/libs/utils/format-url.ts +15 -15
- package/src/libs/utils/render-utils.ts +216 -216
- package/src/models/WorkbenchInfoTools.ts +19 -19
- package/src/service/SysAppService.ts +88 -88
- package/src/service/SysDictDataService.ts +63 -63
- package/src/service/WorkbenchService.ts +277 -277
- package/src/service/base/cache/CacheServiceFactory.ts +135 -135
- package/src/service/base/cache/CtxCache.ts +45 -45
- package/src/service/base/cache/DiskCache.ts +82 -82
- package/src/service/base/cache/MemoryCache.ts +68 -68
- package/src/service/base/cache/NoneCache.ts +24 -24
- package/src/service/base/cache/RedisCache.ts +41 -41
- package/tsconfig.json +32 -32
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkRole = exports.checkLogin = exports.checkPermission = void 0;
|
|
4
|
-
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
5
|
-
function checkPermission(codeList) {
|
|
6
|
-
return async (ctx, next) => {
|
|
7
|
-
const userSession = ctx.userSession;
|
|
8
|
-
// 只有登录用户才会有功能点权限,所以必须登录
|
|
9
|
-
if (!userSession.isLogin()) {
|
|
10
|
-
return {
|
|
11
|
-
success: false,
|
|
12
|
-
message: '用户未登录, 请先登录',
|
|
13
|
-
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
// 查询当前用户是否用此功能点的权限
|
|
17
|
-
const hasPermission = userSession.hasAnyPermission(codeList);
|
|
18
|
-
if (!hasPermission) {
|
|
19
|
-
let message;
|
|
20
|
-
const loginName = userSession.getSessionInfo().loginName;
|
|
21
|
-
if (loginName === 'devopsviewer') {
|
|
22
|
-
message = '开放体验账号不支持这些操作:新增、修改、删除、上传';
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
message = '缺少权限: ' + JSON.stringify(codeList);
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
success: false,
|
|
29
|
-
message: message,
|
|
30
|
-
code: exceptions_1.Exceptions.NO_AUTH,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
await next();
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
exports.checkPermission = checkPermission;
|
|
37
|
-
function checkRole(codeList) {
|
|
38
|
-
return async (ctx, next) => {
|
|
39
|
-
const userSession = ctx.userSession;
|
|
40
|
-
// 只有登录用户才会有功能点权限,所以必须登录
|
|
41
|
-
if (!userSession.isLogin()) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: '用户未登录, 请先登录',
|
|
45
|
-
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
// 查询当前用户是否用此功能点的权限
|
|
49
|
-
const hasRole = userSession.hasAnyRole(codeList);
|
|
50
|
-
if (!hasRole) {
|
|
51
|
-
return {
|
|
52
|
-
success: false,
|
|
53
|
-
message: '缺少角色权限: ' + JSON.stringify(codeList),
|
|
54
|
-
code: exceptions_1.Exceptions.NO_AUTH,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
await next();
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
exports.checkRole = checkRole;
|
|
61
|
-
function checkLogin() {
|
|
62
|
-
return async (ctx, next) => {
|
|
63
|
-
const userSession = ctx.userSession;
|
|
64
|
-
if (!userSession.isLogin()) {
|
|
65
|
-
return {
|
|
66
|
-
success: false,
|
|
67
|
-
message: '用户未登录, 请先登录',
|
|
68
|
-
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
await next();
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
exports.checkLogin = checkLogin;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkRole = exports.checkLogin = exports.checkPermission = void 0;
|
|
4
|
+
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
5
|
+
function checkPermission(codeList) {
|
|
6
|
+
return async (ctx, next) => {
|
|
7
|
+
const userSession = ctx.userSession;
|
|
8
|
+
// 只有登录用户才会有功能点权限,所以必须登录
|
|
9
|
+
if (!userSession.isLogin()) {
|
|
10
|
+
return {
|
|
11
|
+
success: false,
|
|
12
|
+
message: '用户未登录, 请先登录',
|
|
13
|
+
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// 查询当前用户是否用此功能点的权限
|
|
17
|
+
const hasPermission = userSession.hasAnyPermission(codeList);
|
|
18
|
+
if (!hasPermission) {
|
|
19
|
+
let message;
|
|
20
|
+
const loginName = userSession.getSessionInfo().loginName;
|
|
21
|
+
if (loginName === 'devopsviewer') {
|
|
22
|
+
message = '开放体验账号不支持这些操作:新增、修改、删除、上传';
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
message = '缺少权限: ' + JSON.stringify(codeList);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
message: message,
|
|
30
|
+
code: exceptions_1.Exceptions.NO_AUTH,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
await next();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.checkPermission = checkPermission;
|
|
37
|
+
function checkRole(codeList) {
|
|
38
|
+
return async (ctx, next) => {
|
|
39
|
+
const userSession = ctx.userSession;
|
|
40
|
+
// 只有登录用户才会有功能点权限,所以必须登录
|
|
41
|
+
if (!userSession.isLogin()) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
message: '用户未登录, 请先登录',
|
|
45
|
+
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// 查询当前用户是否用此功能点的权限
|
|
49
|
+
const hasRole = userSession.hasAnyRole(codeList);
|
|
50
|
+
if (!hasRole) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
message: '缺少角色权限: ' + JSON.stringify(codeList),
|
|
54
|
+
code: exceptions_1.Exceptions.NO_AUTH,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
await next();
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
exports.checkRole = checkRole;
|
|
61
|
+
function checkLogin() {
|
|
62
|
+
return async (ctx, next) => {
|
|
63
|
+
const userSession = ctx.userSession;
|
|
64
|
+
if (!userSession.isLogin()) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
message: '用户未登录, 请先登录',
|
|
68
|
+
code: exceptions_1.Exceptions.NOT_LOGIN,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
await next();
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
exports.checkLogin = checkLogin;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { NextFunction, Context } from '@midwayjs/koa';
|
|
2
|
-
declare function redisCache(cacheKeyConfigList: string[], cacheTimeSecond: number): (ctx: Context, next: NextFunction) => Promise<any>;
|
|
3
|
-
export { redisCache };
|
|
1
|
+
import { NextFunction, Context } from '@midwayjs/koa';
|
|
2
|
+
declare function redisCache(cacheKeyConfigList: string[], cacheTimeSecond: number): (ctx: Context, next: NextFunction) => Promise<any>;
|
|
3
|
+
export { redisCache };
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.redisCache = void 0;
|
|
4
|
-
const redis_1 = require("@midwayjs/redis");
|
|
5
|
-
const _ = require("lodash");
|
|
6
|
-
const md5 = require("md5");
|
|
7
|
-
const RedisKeys_1 = require("../models/RedisKeys");
|
|
8
|
-
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
9
|
-
const getRedisService = async (ctx) => {
|
|
10
|
-
const service = await ctx.requestContext.getAsync(redis_1.RedisService);
|
|
11
|
-
if (!service) {
|
|
12
|
-
return await ctx.requestContext.getAsync('redisService');
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
const createError = () => {
|
|
16
|
-
return new exceptions_1.CommonException('redis_cache_middleware_error_config', 'redisCache中间件的第一个参数必须是一个字符串数组, 并且以“query.”或“body.”开头');
|
|
17
|
-
};
|
|
18
|
-
const checkCacheKeyConfigList = (cacheKeyConfigList) => {
|
|
19
|
-
if (!Array.isArray(cacheKeyConfigList)) {
|
|
20
|
-
throw createError();
|
|
21
|
-
}
|
|
22
|
-
for (let i = 0; i < cacheKeyConfigList.length; i++) {
|
|
23
|
-
const cacheKeyConfig = cacheKeyConfigList[i];
|
|
24
|
-
if (typeof cacheKeyConfig !== 'string') {
|
|
25
|
-
throw createError();
|
|
26
|
-
}
|
|
27
|
-
if (!cacheKeyConfig.startsWith('query.') && !cacheKeyConfig.startsWith('body.')) {
|
|
28
|
-
throw createError();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
// {middleware:[redisCache(['query.id', 'body.id'])]}
|
|
33
|
-
const toCacheKey = (ctx, cacheKeyConfigList) => {
|
|
34
|
-
checkCacheKeyConfigList(cacheKeyConfigList);
|
|
35
|
-
const path = ctx.path;
|
|
36
|
-
const query = ctx.query || {};
|
|
37
|
-
const body = ctx.request.body || {};
|
|
38
|
-
const newCtx = { path, query, body };
|
|
39
|
-
// 至少要根据path缓存
|
|
40
|
-
const cacheKeyConfigList2 = ['path', ...cacheKeyConfigList];
|
|
41
|
-
const strArray = cacheKeyConfigList2.map((key) => {
|
|
42
|
-
const value = _.get(newCtx, key);
|
|
43
|
-
return { key, value };
|
|
44
|
-
});
|
|
45
|
-
const strArrayStr = JSON.stringify(strArray);
|
|
46
|
-
const strMd5 = md5(strArrayStr);
|
|
47
|
-
return RedisKeys_1.RedisKeys.REDIS_LOCK_MIDDILEWARE + strMd5;
|
|
48
|
-
};
|
|
49
|
-
function toCacheDataString(resData) {
|
|
50
|
-
throw new Error('Function not implemented.');
|
|
51
|
-
}
|
|
52
|
-
function parseCacheData(cacheData) {
|
|
53
|
-
throw new Error('Function not implemented.');
|
|
54
|
-
}
|
|
55
|
-
function redisCache(cacheKeyConfigList, cacheTimeSecond) {
|
|
56
|
-
return async (ctx, next) => {
|
|
57
|
-
const redisService = await getRedisService(ctx);
|
|
58
|
-
const cacheKey = toCacheKey(ctx, cacheKeyConfigList);
|
|
59
|
-
let cacheTime = typeof cacheTimeSecond === 'number' ? cacheTimeSecond : 60; // 默认缓存1分钟
|
|
60
|
-
cacheTime = Math.max(cacheTimeSecond, 1); // 至少缓存1秒。
|
|
61
|
-
cacheTime = Math.min(cacheTimeSecond, 60 * 60); // 最长缓存1小时
|
|
62
|
-
const cacheData = await redisService.get(cacheKey);
|
|
63
|
-
if (cacheData) {
|
|
64
|
-
return parseCacheData(cacheData);
|
|
65
|
-
}
|
|
66
|
-
try {
|
|
67
|
-
const resData = await next();
|
|
68
|
-
const resDataStr = toCacheDataString(resData);
|
|
69
|
-
await redisService.set(cacheKey, resDataStr, 'EX', cacheTime);
|
|
70
|
-
return resData;
|
|
71
|
-
}
|
|
72
|
-
catch (e) {
|
|
73
|
-
console.error('redisCache', e);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
exports.redisCache = redisCache;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redisCache = void 0;
|
|
4
|
+
const redis_1 = require("@midwayjs/redis");
|
|
5
|
+
const _ = require("lodash");
|
|
6
|
+
const md5 = require("md5");
|
|
7
|
+
const RedisKeys_1 = require("../models/RedisKeys");
|
|
8
|
+
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
9
|
+
const getRedisService = async (ctx) => {
|
|
10
|
+
const service = await ctx.requestContext.getAsync(redis_1.RedisService);
|
|
11
|
+
if (!service) {
|
|
12
|
+
return await ctx.requestContext.getAsync('redisService');
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const createError = () => {
|
|
16
|
+
return new exceptions_1.CommonException('redis_cache_middleware_error_config', 'redisCache中间件的第一个参数必须是一个字符串数组, 并且以“query.”或“body.”开头');
|
|
17
|
+
};
|
|
18
|
+
const checkCacheKeyConfigList = (cacheKeyConfigList) => {
|
|
19
|
+
if (!Array.isArray(cacheKeyConfigList)) {
|
|
20
|
+
throw createError();
|
|
21
|
+
}
|
|
22
|
+
for (let i = 0; i < cacheKeyConfigList.length; i++) {
|
|
23
|
+
const cacheKeyConfig = cacheKeyConfigList[i];
|
|
24
|
+
if (typeof cacheKeyConfig !== 'string') {
|
|
25
|
+
throw createError();
|
|
26
|
+
}
|
|
27
|
+
if (!cacheKeyConfig.startsWith('query.') && !cacheKeyConfig.startsWith('body.')) {
|
|
28
|
+
throw createError();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
// {middleware:[redisCache(['query.id', 'body.id'])]}
|
|
33
|
+
const toCacheKey = (ctx, cacheKeyConfigList) => {
|
|
34
|
+
checkCacheKeyConfigList(cacheKeyConfigList);
|
|
35
|
+
const path = ctx.path;
|
|
36
|
+
const query = ctx.query || {};
|
|
37
|
+
const body = ctx.request.body || {};
|
|
38
|
+
const newCtx = { path, query, body };
|
|
39
|
+
// 至少要根据path缓存
|
|
40
|
+
const cacheKeyConfigList2 = ['path', ...cacheKeyConfigList];
|
|
41
|
+
const strArray = cacheKeyConfigList2.map((key) => {
|
|
42
|
+
const value = _.get(newCtx, key);
|
|
43
|
+
return { key, value };
|
|
44
|
+
});
|
|
45
|
+
const strArrayStr = JSON.stringify(strArray);
|
|
46
|
+
const strMd5 = md5(strArrayStr);
|
|
47
|
+
return RedisKeys_1.RedisKeys.REDIS_LOCK_MIDDILEWARE + strMd5;
|
|
48
|
+
};
|
|
49
|
+
function toCacheDataString(resData) {
|
|
50
|
+
throw new Error('Function not implemented.');
|
|
51
|
+
}
|
|
52
|
+
function parseCacheData(cacheData) {
|
|
53
|
+
throw new Error('Function not implemented.');
|
|
54
|
+
}
|
|
55
|
+
function redisCache(cacheKeyConfigList, cacheTimeSecond) {
|
|
56
|
+
return async (ctx, next) => {
|
|
57
|
+
const redisService = await getRedisService(ctx);
|
|
58
|
+
const cacheKey = toCacheKey(ctx, cacheKeyConfigList);
|
|
59
|
+
let cacheTime = typeof cacheTimeSecond === 'number' ? cacheTimeSecond : 60; // 默认缓存1分钟
|
|
60
|
+
cacheTime = Math.max(cacheTimeSecond, 1); // 至少缓存1秒。
|
|
61
|
+
cacheTime = Math.min(cacheTimeSecond, 60 * 60); // 最长缓存1小时
|
|
62
|
+
const cacheData = await redisService.get(cacheKey);
|
|
63
|
+
if (cacheData) {
|
|
64
|
+
return parseCacheData(cacheData);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const resData = await next();
|
|
68
|
+
const resDataStr = toCacheDataString(resData);
|
|
69
|
+
await redisService.set(cacheKey, resDataStr, 'EX', cacheTime);
|
|
70
|
+
return resData;
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
console.error('redisCache', e);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
exports.redisCache = redisCache;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { NextFunction, Context } from '@midwayjs/koa';
|
|
2
|
-
declare function redisLock(lockKeyConfigList: string[], lockTimeSecond: number): (ctx: Context, next: NextFunction) => Promise<{
|
|
3
|
-
success: boolean;
|
|
4
|
-
message: string;
|
|
5
|
-
code: string;
|
|
6
|
-
}>;
|
|
7
|
-
export { redisLock };
|
|
1
|
+
import { NextFunction, Context } from '@midwayjs/koa';
|
|
2
|
+
declare function redisLock(lockKeyConfigList: string[], lockTimeSecond: number): (ctx: Context, next: NextFunction) => Promise<{
|
|
3
|
+
success: boolean;
|
|
4
|
+
message: string;
|
|
5
|
+
code: string;
|
|
6
|
+
}>;
|
|
7
|
+
export { redisLock };
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.redisLock = void 0;
|
|
4
|
-
const redis_1 = require("@midwayjs/redis");
|
|
5
|
-
const _ = require("lodash");
|
|
6
|
-
const md5 = require("md5");
|
|
7
|
-
const RedisKeys_1 = require("../models/RedisKeys");
|
|
8
|
-
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
9
|
-
const getRedisService = async (ctx) => {
|
|
10
|
-
const service = await ctx.requestContext.getAsync(redis_1.RedisService);
|
|
11
|
-
if (!service) {
|
|
12
|
-
return await ctx.requestContext.getAsync('redisService');
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
const createError = () => {
|
|
16
|
-
return new exceptions_1.CommonException('redis_lock_middleware_error_config', 'redisLock中间件的第一个参数必须是一个字符串数组, 并且以“query.”或“body.”开头');
|
|
17
|
-
};
|
|
18
|
-
const checkLockKeyConfigList = (lockKeyConfigList) => {
|
|
19
|
-
if (!Array.isArray(lockKeyConfigList)) {
|
|
20
|
-
throw createError();
|
|
21
|
-
}
|
|
22
|
-
for (let i = 0; i < lockKeyConfigList.length; i++) {
|
|
23
|
-
const lockKeyConfig = lockKeyConfigList[i];
|
|
24
|
-
if (typeof lockKeyConfig !== 'string') {
|
|
25
|
-
throw createError();
|
|
26
|
-
}
|
|
27
|
-
if (!lockKeyConfig.startsWith('query.') && !lockKeyConfig.startsWith('body.')) {
|
|
28
|
-
throw createError();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
// {middleware:[redisLock(['query.id', 'body.id'])]}
|
|
33
|
-
const toLockKey = (ctx, lockKeyConfigList) => {
|
|
34
|
-
checkLockKeyConfigList(lockKeyConfigList);
|
|
35
|
-
const path = ctx.path;
|
|
36
|
-
const query = ctx.query || {};
|
|
37
|
-
const body = ctx.request.body || {};
|
|
38
|
-
const newCtx = { path, query, body };
|
|
39
|
-
// 至少要根据path锁
|
|
40
|
-
const lockKeyConfigList2 = ['path', ...lockKeyConfigList];
|
|
41
|
-
const strArray = lockKeyConfigList2.map((key) => {
|
|
42
|
-
const value = _.get(newCtx, key);
|
|
43
|
-
return { key, value };
|
|
44
|
-
});
|
|
45
|
-
const strArrayStr = JSON.stringify(strArray);
|
|
46
|
-
const strMd5 = md5(strArrayStr);
|
|
47
|
-
return RedisKeys_1.RedisKeys.REDIS_LOCK_MIDDILEWARE + strMd5;
|
|
48
|
-
};
|
|
49
|
-
function redisLock(lockKeyConfigList, lockTimeSecond) {
|
|
50
|
-
return async (ctx, next) => {
|
|
51
|
-
const redisService = await getRedisService(ctx);
|
|
52
|
-
const lockKey = toLockKey(ctx, lockKeyConfigList);
|
|
53
|
-
let lockTime = typeof lockTimeSecond === 'number' ? lockTimeSecond : 60; // 默认锁住1分钟(失败的情况)
|
|
54
|
-
lockTime = Math.max(lockTimeSecond, 1); // 至少锁一秒 (失败的情况)
|
|
55
|
-
lockTime = Math.min(lockTimeSecond, 5 * 60); // 最长锁 5分钟(失败的情况)
|
|
56
|
-
const lock = await redisService.set(lockKey, 1, 'EX', lockTime, 'NX');
|
|
57
|
-
if (lock !== 'OK') {
|
|
58
|
-
return {
|
|
59
|
-
success: false,
|
|
60
|
-
message: '您请求的接口当前正在处理中,请稍后再试',
|
|
61
|
-
code: 'redis_lock_middleware_error_locked',
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
try {
|
|
65
|
-
await next();
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
await redisService.del(lockKey); // 正常运行完成,立即释放锁。
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
exports.redisLock = redisLock;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redisLock = void 0;
|
|
4
|
+
const redis_1 = require("@midwayjs/redis");
|
|
5
|
+
const _ = require("lodash");
|
|
6
|
+
const md5 = require("md5");
|
|
7
|
+
const RedisKeys_1 = require("../models/RedisKeys");
|
|
8
|
+
const exceptions_1 = require("../libs/crud-pro/exceptions");
|
|
9
|
+
const getRedisService = async (ctx) => {
|
|
10
|
+
const service = await ctx.requestContext.getAsync(redis_1.RedisService);
|
|
11
|
+
if (!service) {
|
|
12
|
+
return await ctx.requestContext.getAsync('redisService');
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const createError = () => {
|
|
16
|
+
return new exceptions_1.CommonException('redis_lock_middleware_error_config', 'redisLock中间件的第一个参数必须是一个字符串数组, 并且以“query.”或“body.”开头');
|
|
17
|
+
};
|
|
18
|
+
const checkLockKeyConfigList = (lockKeyConfigList) => {
|
|
19
|
+
if (!Array.isArray(lockKeyConfigList)) {
|
|
20
|
+
throw createError();
|
|
21
|
+
}
|
|
22
|
+
for (let i = 0; i < lockKeyConfigList.length; i++) {
|
|
23
|
+
const lockKeyConfig = lockKeyConfigList[i];
|
|
24
|
+
if (typeof lockKeyConfig !== 'string') {
|
|
25
|
+
throw createError();
|
|
26
|
+
}
|
|
27
|
+
if (!lockKeyConfig.startsWith('query.') && !lockKeyConfig.startsWith('body.')) {
|
|
28
|
+
throw createError();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
// {middleware:[redisLock(['query.id', 'body.id'])]}
|
|
33
|
+
const toLockKey = (ctx, lockKeyConfigList) => {
|
|
34
|
+
checkLockKeyConfigList(lockKeyConfigList);
|
|
35
|
+
const path = ctx.path;
|
|
36
|
+
const query = ctx.query || {};
|
|
37
|
+
const body = ctx.request.body || {};
|
|
38
|
+
const newCtx = { path, query, body };
|
|
39
|
+
// 至少要根据path锁
|
|
40
|
+
const lockKeyConfigList2 = ['path', ...lockKeyConfigList];
|
|
41
|
+
const strArray = lockKeyConfigList2.map((key) => {
|
|
42
|
+
const value = _.get(newCtx, key);
|
|
43
|
+
return { key, value };
|
|
44
|
+
});
|
|
45
|
+
const strArrayStr = JSON.stringify(strArray);
|
|
46
|
+
const strMd5 = md5(strArrayStr);
|
|
47
|
+
return RedisKeys_1.RedisKeys.REDIS_LOCK_MIDDILEWARE + strMd5;
|
|
48
|
+
};
|
|
49
|
+
function redisLock(lockKeyConfigList, lockTimeSecond) {
|
|
50
|
+
return async (ctx, next) => {
|
|
51
|
+
const redisService = await getRedisService(ctx);
|
|
52
|
+
const lockKey = toLockKey(ctx, lockKeyConfigList);
|
|
53
|
+
let lockTime = typeof lockTimeSecond === 'number' ? lockTimeSecond : 60; // 默认锁住1分钟(失败的情况)
|
|
54
|
+
lockTime = Math.max(lockTimeSecond, 1); // 至少锁一秒 (失败的情况)
|
|
55
|
+
lockTime = Math.min(lockTimeSecond, 5 * 60); // 最长锁 5分钟(失败的情况)
|
|
56
|
+
const lock = await redisService.set(lockKey, 1, 'EX', lockTime, 'NX');
|
|
57
|
+
if (lock !== 'OK') {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
message: '您请求的接口当前正在处理中,请稍后再试',
|
|
61
|
+
code: 'redis_lock_middleware_error_locked',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await next();
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await redisService.del(lockKey); // 正常运行完成,立即释放锁。
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.redisLock = redisLock;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { IMiddleware } from '@midwayjs/core';
|
|
2
|
-
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
|
-
/**
|
|
4
|
-
* 事务中间件
|
|
5
|
-
*/
|
|
6
|
-
export declare class TxMiddleware implements IMiddleware<Context, NextFunction> {
|
|
7
|
-
resolve(): (ctx: Context, next: NextFunction) => Promise<any>;
|
|
8
|
-
static getName(): string;
|
|
9
|
-
}
|
|
1
|
+
import { IMiddleware } from '@midwayjs/core';
|
|
2
|
+
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
|
+
/**
|
|
4
|
+
* 事务中间件
|
|
5
|
+
*/
|
|
6
|
+
export declare class TxMiddleware implements IMiddleware<Context, NextFunction> {
|
|
7
|
+
resolve(): (ctx: Context, next: NextFunction) => Promise<any>;
|
|
8
|
+
static getName(): string;
|
|
9
|
+
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.TxMiddleware = void 0;
|
|
10
|
-
const core_1 = require("@midwayjs/core");
|
|
11
|
-
/**
|
|
12
|
-
* 事务中间件
|
|
13
|
-
*/
|
|
14
|
-
let TxMiddleware = class TxMiddleware {
|
|
15
|
-
resolve() {
|
|
16
|
-
return async (ctx, next) => {
|
|
17
|
-
const transaction = ctx.transaction;
|
|
18
|
-
try {
|
|
19
|
-
await transaction.beginTx();
|
|
20
|
-
const res = await next();
|
|
21
|
-
await transaction.commitTx();
|
|
22
|
-
return res;
|
|
23
|
-
}
|
|
24
|
-
catch (e) {
|
|
25
|
-
ctx.contextLogger.error('ReportMiddleware', e);
|
|
26
|
-
await transaction.rollbackTx();
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
await transaction.releaseTx();
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
static getName() {
|
|
34
|
-
return 'TxMiddleware';
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
TxMiddleware = __decorate([
|
|
38
|
-
(0, core_1.Middleware)()
|
|
39
|
-
], TxMiddleware);
|
|
40
|
-
exports.TxMiddleware = TxMiddleware;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TxMiddleware = void 0;
|
|
10
|
+
const core_1 = require("@midwayjs/core");
|
|
11
|
+
/**
|
|
12
|
+
* 事务中间件
|
|
13
|
+
*/
|
|
14
|
+
let TxMiddleware = class TxMiddleware {
|
|
15
|
+
resolve() {
|
|
16
|
+
return async (ctx, next) => {
|
|
17
|
+
const transaction = ctx.transaction;
|
|
18
|
+
try {
|
|
19
|
+
await transaction.beginTx();
|
|
20
|
+
const res = await next();
|
|
21
|
+
await transaction.commitTx();
|
|
22
|
+
return res;
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
ctx.contextLogger.error('ReportMiddleware', e);
|
|
26
|
+
await transaction.rollbackTx();
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await transaction.releaseTx();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static getName() {
|
|
34
|
+
return 'TxMiddleware';
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
TxMiddleware = __decorate([
|
|
38
|
+
(0, core_1.Middleware)()
|
|
39
|
+
], TxMiddleware);
|
|
40
|
+
exports.TxMiddleware = TxMiddleware;
|