koa-boot-runtime 1.0.0
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/dist/aiToolRegistry.d.ts +32 -0
- package/dist/aiToolRegistry.d.ts.map +1 -0
- package/dist/aiToolRegistry.js +41 -0
- package/dist/aiToolRegistry.js.map +1 -0
- package/dist/build/routes.d.ts +3 -0
- package/dist/build/routes.d.ts.map +1 -0
- package/dist/build/routes.js +4055 -0
- package/dist/build/routes.js.map +1 -0
- package/dist/build/swagger.json +6752 -0
- package/dist/common/decorators/index.d.ts +2 -0
- package/dist/common/decorators/index.d.ts.map +1 -0
- package/dist/common/decorators/index.js +18 -0
- package/dist/common/decorators/index.js.map +1 -0
- package/dist/common/decorators/validation.d.ts +33 -0
- package/dist/common/decorators/validation.d.ts.map +1 -0
- package/dist/common/decorators/validation.js +215 -0
- package/dist/common/decorators/validation.js.map +1 -0
- package/dist/common/dto.d.ts +17 -0
- package/dist/common/dto.d.ts.map +1 -0
- package/dist/common/dto.js +28 -0
- package/dist/common/dto.js.map +1 -0
- package/dist/common/enums/base.d.ts +14 -0
- package/dist/common/enums/base.d.ts.map +1 -0
- package/dist/common/enums/base.js +14 -0
- package/dist/common/enums/base.js.map +1 -0
- package/dist/common/enums/index.d.ts +8 -0
- package/dist/common/enums/index.d.ts.map +1 -0
- package/dist/common/enums/index.js +24 -0
- package/dist/common/enums/index.js.map +1 -0
- package/dist/common/enums/system.d.ts +14 -0
- package/dist/common/enums/system.d.ts.map +1 -0
- package/dist/common/enums/system.js +14 -0
- package/dist/common/enums/system.js.map +1 -0
- package/dist/common/index.d.ts +6 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/paginate.d.ts +49 -0
- package/dist/common/paginate.d.ts.map +1 -0
- package/dist/common/paginate.js +47 -0
- package/dist/common/paginate.js.map +1 -0
- package/dist/common/types/index.d.ts +8 -0
- package/dist/common/types/index.d.ts.map +1 -0
- package/dist/common/types/index.js +18 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/pagination.d.ts +76 -0
- package/dist/common/types/pagination.d.ts.map +1 -0
- package/dist/common/types/pagination.js +29 -0
- package/dist/common/types/pagination.js.map +1 -0
- package/dist/common/types/request.d.ts +66 -0
- package/dist/common/types/request.d.ts.map +1 -0
- package/dist/common/types/request.js +4 -0
- package/dist/common/types/request.js.map +1 -0
- package/dist/common/types/response.d.ts +109 -0
- package/dist/common/types/response.d.ts.map +1 -0
- package/dist/common/types/response.js +50 -0
- package/dist/common/types/response.js.map +1 -0
- package/dist/common/types/sort.d.ts +71 -0
- package/dist/common/types/sort.d.ts.map +1 -0
- package/dist/common/types/sort.js +46 -0
- package/dist/common/types/sort.js.map +1 -0
- package/dist/config/database.d.ts +12 -0
- package/dist/config/database.d.ts.map +1 -0
- package/dist/config/database.js +24 -0
- package/dist/config/database.js.map +1 -0
- package/dist/config/index.d.ts +144 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +180 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/ioc.d.ts +6 -0
- package/dist/config/ioc.d.ts.map +1 -0
- package/dist/config/ioc.js +29 -0
- package/dist/config/ioc.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +3 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +52 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +3 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +40 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/logger.d.ts +3 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +13 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/operationLogger.d.ts +11 -0
- package/dist/middleware/operationLogger.d.ts.map +1 -0
- package/dist/middleware/operationLogger.js +155 -0
- package/dist/middleware/operationLogger.js.map +1 -0
- package/dist/middleware/permission.d.ts +23 -0
- package/dist/middleware/permission.d.ts.map +1 -0
- package/dist/middleware/permission.js +153 -0
- package/dist/middleware/permission.js.map +1 -0
- package/dist/middleware/validate.d.ts +7 -0
- package/dist/middleware/validate.d.ts.map +1 -0
- package/dist/middleware/validate.js +53 -0
- package/dist/middleware/validate.js.map +1 -0
- package/dist/middlewares.d.ts +15 -0
- package/dist/middlewares.d.ts.map +1 -0
- package/dist/middlewares.js +24 -0
- package/dist/middlewares.js.map +1 -0
- package/dist/registerRoutes.d.ts +15 -0
- package/dist/registerRoutes.d.ts.map +1 -0
- package/dist/registerRoutes.js +83 -0
- package/dist/registerRoutes.js.map +1 -0
- package/dist/system/department/department.controller.d.ts +46 -0
- package/dist/system/department/department.controller.d.ts.map +1 -0
- package/dist/system/department/department.controller.js +203 -0
- package/dist/system/department/department.controller.js.map +1 -0
- package/dist/system/department/department.model.d.ts +33 -0
- package/dist/system/department/department.model.d.ts.map +1 -0
- package/dist/system/department/department.model.js +171 -0
- package/dist/system/department/department.model.js.map +1 -0
- package/dist/system/department/department.service.d.ts +40 -0
- package/dist/system/department/department.service.d.ts.map +1 -0
- package/dist/system/department/department.service.js +99 -0
- package/dist/system/department/department.service.js.map +1 -0
- package/dist/system/dictItem/dictItem.controller.d.ts +42 -0
- package/dist/system/dictItem/dictItem.controller.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.controller.js +167 -0
- package/dist/system/dictItem/dictItem.controller.js.map +1 -0
- package/dist/system/dictItem/dictItem.model.d.ts +38 -0
- package/dist/system/dictItem/dictItem.model.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.model.js +180 -0
- package/dist/system/dictItem/dictItem.model.js.map +1 -0
- package/dist/system/dictItem/dictItem.service.d.ts +33 -0
- package/dist/system/dictItem/dictItem.service.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.service.js +97 -0
- package/dist/system/dictItem/dictItem.service.js.map +1 -0
- package/dist/system/dictType/dictType.controller.d.ts +47 -0
- package/dist/system/dictType/dictType.controller.d.ts.map +1 -0
- package/dist/system/dictType/dictType.controller.js +174 -0
- package/dist/system/dictType/dictType.controller.js.map +1 -0
- package/dist/system/dictType/dictType.model.d.ts +31 -0
- package/dist/system/dictType/dictType.model.d.ts.map +1 -0
- package/dist/system/dictType/dictType.model.js +127 -0
- package/dist/system/dictType/dictType.model.js.map +1 -0
- package/dist/system/dictType/dictType.service.d.ts +27 -0
- package/dist/system/dictType/dictType.service.d.ts.map +1 -0
- package/dist/system/dictType/dictType.service.js +74 -0
- package/dist/system/dictType/dictType.service.js.map +1 -0
- package/dist/system/employee/employee.controller.d.ts +16 -0
- package/dist/system/employee/employee.controller.d.ts.map +1 -0
- package/dist/system/employee/employee.controller.js +111 -0
- package/dist/system/employee/employee.controller.js.map +1 -0
- package/dist/system/employee/employee.model.d.ts +34 -0
- package/dist/system/employee/employee.model.d.ts.map +1 -0
- package/dist/system/employee/employee.model.js +186 -0
- package/dist/system/employee/employee.model.js.map +1 -0
- package/dist/system/employee/employee.service.d.ts +16 -0
- package/dist/system/employee/employee.service.d.ts.map +1 -0
- package/dist/system/employee/employee.service.js +49 -0
- package/dist/system/employee/employee.service.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.controller.d.ts +35 -0
- package/dist/system/fileUpload/fileUpload.controller.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.controller.js +228 -0
- package/dist/system/fileUpload/fileUpload.controller.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.model.d.ts +13 -0
- package/dist/system/fileUpload/fileUpload.model.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.model.js +71 -0
- package/dist/system/fileUpload/fileUpload.model.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.service.d.ts +29 -0
- package/dist/system/fileUpload/fileUpload.service.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.service.js +61 -0
- package/dist/system/fileUpload/fileUpload.service.js.map +1 -0
- package/dist/system/loginLog/loginLog.controller.d.ts +21 -0
- package/dist/system/loginLog/loginLog.controller.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.controller.js +149 -0
- package/dist/system/loginLog/loginLog.controller.js.map +1 -0
- package/dist/system/loginLog/loginLog.model.d.ts +26 -0
- package/dist/system/loginLog/loginLog.model.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.model.js +150 -0
- package/dist/system/loginLog/loginLog.model.js.map +1 -0
- package/dist/system/loginLog/loginLog.service.d.ts +24 -0
- package/dist/system/loginLog/loginLog.service.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.service.js +87 -0
- package/dist/system/loginLog/loginLog.service.js.map +1 -0
- package/dist/system/menu/menu.controller.d.ts +46 -0
- package/dist/system/menu/menu.controller.d.ts.map +1 -0
- package/dist/system/menu/menu.controller.js +203 -0
- package/dist/system/menu/menu.controller.js.map +1 -0
- package/dist/system/menu/menu.model.d.ts +45 -0
- package/dist/system/menu/menu.model.d.ts.map +1 -0
- package/dist/system/menu/menu.model.js +254 -0
- package/dist/system/menu/menu.model.js.map +1 -0
- package/dist/system/menu/menu.service.d.ts +40 -0
- package/dist/system/menu/menu.service.d.ts.map +1 -0
- package/dist/system/menu/menu.service.js +101 -0
- package/dist/system/menu/menu.service.js.map +1 -0
- package/dist/system/operationLog/operationLog.controller.d.ts +34 -0
- package/dist/system/operationLog/operationLog.controller.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.controller.js +126 -0
- package/dist/system/operationLog/operationLog.controller.js.map +1 -0
- package/dist/system/operationLog/operationLog.model.d.ts +38 -0
- package/dist/system/operationLog/operationLog.model.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.model.js +224 -0
- package/dist/system/operationLog/operationLog.model.js.map +1 -0
- package/dist/system/operationLog/operationLog.service.d.ts +46 -0
- package/dist/system/operationLog/operationLog.service.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.service.js +109 -0
- package/dist/system/operationLog/operationLog.service.js.map +1 -0
- package/dist/system/permission/permission.controller.d.ts +18 -0
- package/dist/system/permission/permission.controller.d.ts.map +1 -0
- package/dist/system/permission/permission.controller.js +160 -0
- package/dist/system/permission/permission.controller.js.map +1 -0
- package/dist/system/permission/permission.model.d.ts +39 -0
- package/dist/system/permission/permission.model.d.ts.map +1 -0
- package/dist/system/permission/permission.model.js +220 -0
- package/dist/system/permission/permission.model.js.map +1 -0
- package/dist/system/permission/permission.service.d.ts +40 -0
- package/dist/system/permission/permission.service.d.ts.map +1 -0
- package/dist/system/permission/permission.service.js +105 -0
- package/dist/system/permission/permission.service.js.map +1 -0
- package/dist/system/role/role.controller.d.ts +16 -0
- package/dist/system/role/role.controller.d.ts.map +1 -0
- package/dist/system/role/role.controller.js +123 -0
- package/dist/system/role/role.controller.js.map +1 -0
- package/dist/system/role/role.model.d.ts +25 -0
- package/dist/system/role/role.model.d.ts.map +1 -0
- package/dist/system/role/role.model.js +133 -0
- package/dist/system/role/role.model.js.map +1 -0
- package/dist/system/role/role.service.d.ts +17 -0
- package/dist/system/role/role.service.d.ts.map +1 -0
- package/dist/system/role/role.service.js +50 -0
- package/dist/system/role/role.service.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.controller.d.ts +26 -0
- package/dist/system/roleMenu/roleMenu.controller.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.controller.js +83 -0
- package/dist/system/roleMenu/roleMenu.controller.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.model.d.ts +35 -0
- package/dist/system/roleMenu/roleMenu.model.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.model.js +56 -0
- package/dist/system/roleMenu/roleMenu.model.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.service.d.ts +35 -0
- package/dist/system/roleMenu/roleMenu.service.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.service.js +77 -0
- package/dist/system/roleMenu/roleMenu.service.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.controller.d.ts +36 -0
- package/dist/system/rolePermission/rolePermission.controller.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.controller.js +115 -0
- package/dist/system/rolePermission/rolePermission.controller.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.model.d.ts +45 -0
- package/dist/system/rolePermission/rolePermission.model.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.model.js +87 -0
- package/dist/system/rolePermission/rolePermission.model.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.service.d.ts +50 -0
- package/dist/system/rolePermission/rolePermission.service.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.service.js +110 -0
- package/dist/system/rolePermission/rolePermission.service.js.map +1 -0
- package/dist/system/user/user.controller.d.ts +66 -0
- package/dist/system/user/user.controller.d.ts.map +1 -0
- package/dist/system/user/user.controller.js +322 -0
- package/dist/system/user/user.controller.js.map +1 -0
- package/dist/system/user/user.model.d.ts +58 -0
- package/dist/system/user/user.model.d.ts.map +1 -0
- package/dist/system/user/user.model.js +225 -0
- package/dist/system/user/user.model.js.map +1 -0
- package/dist/system/user/user.service.d.ts +73 -0
- package/dist/system/user/user.service.d.ts.map +1 -0
- package/dist/system/user/user.service.js +388 -0
- package/dist/system/user/user.service.js.map +1 -0
- package/dist/system/userRole/userRole.controller.d.ts +33 -0
- package/dist/system/userRole/userRole.controller.d.ts.map +1 -0
- package/dist/system/userRole/userRole.controller.js +231 -0
- package/dist/system/userRole/userRole.controller.js.map +1 -0
- package/dist/system/userRole/userRole.model.d.ts +14 -0
- package/dist/system/userRole/userRole.model.d.ts.map +1 -0
- package/dist/system/userRole/userRole.model.js +58 -0
- package/dist/system/userRole/userRole.model.js.map +1 -0
- package/dist/system/userRole/userRole.service.d.ts +29 -0
- package/dist/system/userRole/userRole.service.d.ts.map +1 -0
- package/dist/system/userRole/userRole.service.js +135 -0
- package/dist/system/userRole/userRole.service.js.map +1 -0
- package/dist/systemServices.d.ts +23 -0
- package/dist/systemServices.d.ts.map +1 -0
- package/dist/systemServices.js +40 -0
- package/dist/systemServices.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +70 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/aiClient.d.ts +55 -0
- package/dist/utils/aiClient.d.ts.map +1 -0
- package/dist/utils/aiClient.js +59 -0
- package/dist/utils/aiClient.js.map +1 -0
- package/dist/utils/banner.d.ts +10 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +40 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/crypto.d.ts +49 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +113 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/dataScope.d.ts +41 -0
- package/dist/utils/dataScope.d.ts.map +1 -0
- package/dist/utils/dataScope.js +130 -0
- package/dist/utils/dataScope.js.map +1 -0
- package/dist/utils/date.d.ts +48 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +145 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/emailClient.d.ts +15 -0
- package/dist/utils/emailClient.d.ts.map +1 -0
- package/dist/utils/emailClient.js +71 -0
- package/dist/utils/emailClient.js.map +1 -0
- package/dist/utils/jwt.d.ts +10 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +31 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +108 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/ossClient.d.ts +38 -0
- package/dist/utils/ossClient.d.ts.map +1 -0
- package/dist/utils/ossClient.js +92 -0
- package/dist/utils/ossClient.js.map +1 -0
- package/dist/utils/permissionSync.d.ts +10 -0
- package/dist/utils/permissionSync.d.ts.map +1 -0
- package/dist/utils/permissionSync.js +11 -0
- package/dist/utils/permissionSync.js.map +1 -0
- package/dist/utils/redisClient.d.ts +91 -0
- package/dist/utils/redisClient.d.ts.map +1 -0
- package/dist/utils/redisClient.js +246 -0
- package/dist/utils/redisClient.js.map +1 -0
- package/dist/utils/sequence.d.ts +53 -0
- package/dist/utils/sequence.d.ts.map +1 -0
- package/dist/utils/sequence.js +109 -0
- package/dist/utils/sequence.js.map +1 -0
- package/dist/utils/smsClient.d.ts +15 -0
- package/dist/utils/smsClient.d.ts.map +1 -0
- package/dist/utils/smsClient.js +115 -0
- package/dist/utils/smsClient.js.map +1 -0
- package/dist/utils/supabaseClient.d.ts +5 -0
- package/dist/utils/supabaseClient.d.ts.map +1 -0
- package/dist/utils/supabaseClient.js +17 -0
- package/dist/utils/supabaseClient.js.map +1 -0
- package/dist/utils/unipushClient.d.ts +12 -0
- package/dist/utils/unipushClient.d.ts.map +1 -0
- package/dist/utils/unipushClient.js +109 -0
- package/dist/utils/unipushClient.js.map +1 -0
- package/dist/utils/validator.d.ts +74 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +173 -0
- package/dist/utils/validator.js.map +1 -0
- package/dist/utils/wecom.d.ts +20 -0
- package/dist/utils/wecom.d.ts.map +1 -0
- package/dist/utils/wecom.js +126 -0
- package/dist/utils/wecom.js.map +1 -0
- package/package.json +84 -0
- package/templates/schema.system.prisma +283 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getWecomAccessToken = getWecomAccessToken;
|
|
7
|
+
exports.sendWecomTextCard = sendWecomTextCard;
|
|
8
|
+
exports.getWecomUseridByPhone = getWecomUseridByPhone;
|
|
9
|
+
// 企业微信应用消息客户端(V6.0):自建应用推送通知
|
|
10
|
+
// 官方文档: https://developer.work.weixin.qq.com/document/path/90236
|
|
11
|
+
// 说明: 应用消息 API 为服务端到服务端调用,仅校验 corpId/agentId/secret 与可见范围,
|
|
12
|
+
// 不校验域名——textcard 的 url 仅是用户点击跳转地址,本地开发无需配置可信域名
|
|
13
|
+
// (可信域名仅用于 JS-SDK / 网页授权 OAuth / 回调 URL 场景)
|
|
14
|
+
const config_1 = __importDefault(require("../config"));
|
|
15
|
+
const redisClient_1 = require("./redisClient");
|
|
16
|
+
const logger_1 = require("./logger");
|
|
17
|
+
const WECOM_API_BASE = 'https://qyapi.weixin.qq.com/cgi-bin';
|
|
18
|
+
/** 企微应用 access_token 缓存键(有效期 2h,缓存 7000s 留缓冲提前刷新) */
|
|
19
|
+
const TOKEN_CACHE_KEY = 'wecom:access_token';
|
|
20
|
+
/** 手机号 → userid 解析缓存(24h) */
|
|
21
|
+
const USERID_CACHE_PREFIX = 'wecom:userid:';
|
|
22
|
+
/** 请求企微 API 并统一校验 errcode */
|
|
23
|
+
async function request(path, options = {}) {
|
|
24
|
+
const { method = 'GET', query, body } = options;
|
|
25
|
+
const url = new URL(`${WECOM_API_BASE}${path}`);
|
|
26
|
+
if (query) {
|
|
27
|
+
Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v));
|
|
28
|
+
}
|
|
29
|
+
const res = await fetch(url.toString(), {
|
|
30
|
+
method,
|
|
31
|
+
headers: body ? { 'Content-Type': 'application/json' } : undefined,
|
|
32
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
33
|
+
});
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
throw new Error(`[wecom] HTTP ${res.status} ${res.statusText} (${path})`);
|
|
36
|
+
}
|
|
37
|
+
return (await res.json());
|
|
38
|
+
}
|
|
39
|
+
/** 获取应用 access_token(Redis 缓存 7000s,企微有效期为 7200s) */
|
|
40
|
+
async function getWecomAccessToken() {
|
|
41
|
+
const { corpId, secret } = config_1.default.wecom;
|
|
42
|
+
if (!corpId || !secret) {
|
|
43
|
+
throw new Error('[wecom] 未配置 WECOM_CORP_ID / WECOM_SECRET,无法获取 access_token');
|
|
44
|
+
}
|
|
45
|
+
const fetcher = async () => {
|
|
46
|
+
const res = await request('/gettoken', { query: { corpid: corpId, corpsecret: secret } });
|
|
47
|
+
if (res.errcode !== 0 || !res.access_token) {
|
|
48
|
+
throw new Error(`[wecom] 获取 access_token 失败: ${res.errcode} ${res.errmsg}`);
|
|
49
|
+
}
|
|
50
|
+
return res.access_token;
|
|
51
|
+
};
|
|
52
|
+
try {
|
|
53
|
+
return await redisClient_1.redis.getOrSet(TOKEN_CACHE_KEY, fetcher, 7000);
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
// Redis 不可用时降级:跳过缓存直接请求企微(token 有效期 2h,本进程内多次调用仍可复用变量级缓存兜底)
|
|
57
|
+
logger_1.logger.warn(`[wecom] Redis 不可用,跳过 access_token 缓存:${e.message}`);
|
|
58
|
+
return fetcher();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 发送文本卡片应用消息(touser 为企微 userid,去重后以 | 分隔,最多 1000 人)
|
|
63
|
+
* @param userIds 企微 userid 数组
|
|
64
|
+
* @param card 文本卡片内容(title ≤128 字,description ≤512 字)
|
|
65
|
+
*/
|
|
66
|
+
async function sendWecomTextCard(userIds, card) {
|
|
67
|
+
if (userIds.length === 0)
|
|
68
|
+
return;
|
|
69
|
+
const { agentId } = config_1.default.wecom;
|
|
70
|
+
if (!agentId) {
|
|
71
|
+
throw new Error('[wecom] 未配置 WECOM_AGENT_ID');
|
|
72
|
+
}
|
|
73
|
+
const token = await getWecomAccessToken();
|
|
74
|
+
const res = await request('/message/send', {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
query: { access_token: token },
|
|
77
|
+
body: {
|
|
78
|
+
touser: [...new Set(userIds)].join('|'),
|
|
79
|
+
msgtype: 'textcard',
|
|
80
|
+
agentid: Number(agentId),
|
|
81
|
+
textcard: {
|
|
82
|
+
title: card.title.slice(0, 128),
|
|
83
|
+
description: card.description.slice(0, 512),
|
|
84
|
+
url: card.url,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
if (res.errcode !== 0) {
|
|
89
|
+
throw new Error(`[wecom] 消息发送失败: ${res.errcode} ${res.errmsg}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 按手机号解析企微 userid(自动绑定)。
|
|
94
|
+
* 结果 24h 缓存;仅 WECOM_AUTO_BIND=true 时启用,未命中返回 null(由调用方记录为未绑定)
|
|
95
|
+
*/
|
|
96
|
+
async function getWecomUseridByPhone(phone) {
|
|
97
|
+
const { corpId, secret, autoBind } = config_1.default.wecom;
|
|
98
|
+
if (!autoBind || !phone)
|
|
99
|
+
return null;
|
|
100
|
+
if (!corpId || !secret)
|
|
101
|
+
return null;
|
|
102
|
+
const cacheKey = `${USERID_CACHE_PREFIX}${phone}`;
|
|
103
|
+
const cached = await redisClient_1.redis.get(cacheKey);
|
|
104
|
+
if (cached !== null)
|
|
105
|
+
return cached === '__none__' ? null : cached;
|
|
106
|
+
try {
|
|
107
|
+
const token = await getWecomAccessToken();
|
|
108
|
+
const res = await request('/user/getuserid', {
|
|
109
|
+
method: 'POST',
|
|
110
|
+
query: { access_token: token },
|
|
111
|
+
body: { mobile: phone },
|
|
112
|
+
});
|
|
113
|
+
if (res.errcode === 0 && res.userid) {
|
|
114
|
+
await redisClient_1.redis.set(cacheKey, res.userid, 24 * 3600);
|
|
115
|
+
return res.userid;
|
|
116
|
+
}
|
|
117
|
+
// 60111 = 用户不存在;60011 = 无通讯录查看权限——均按未绑定处理并短暂缓存防抖
|
|
118
|
+
await redisClient_1.redis.set(cacheKey, '__none__', 3600);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
console.error(`[wecom] 手机号解析 userid 失败: ${phone}`, e.message);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=wecom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wecom.js","sourceRoot":"","sources":["../../src/utils/wecom.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "koa-boot-runtime",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Koa-Boot framework runtime: pre-generated system routes, Prisma client factory, core auth middleware, AI tool registry",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"require": "./dist/index.js",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./common": {
|
|
14
|
+
"types": "./dist/common/index.d.ts",
|
|
15
|
+
"require": "./dist/common/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./common/*": {
|
|
18
|
+
"types": "./dist/common/*/index.d.ts",
|
|
19
|
+
"require": "./dist/common/*/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./common/paginate": {
|
|
22
|
+
"types": "./dist/common/paginate.d.ts",
|
|
23
|
+
"require": "./dist/common/paginate.js"
|
|
24
|
+
},
|
|
25
|
+
"./common/dto": {
|
|
26
|
+
"types": "./dist/common/dto.d.ts",
|
|
27
|
+
"require": "./dist/common/dto.js"
|
|
28
|
+
},
|
|
29
|
+
"./utils/*": {
|
|
30
|
+
"types": "./dist/utils/*.d.ts",
|
|
31
|
+
"require": "./dist/utils/*.js"
|
|
32
|
+
},
|
|
33
|
+
"./config/*": {
|
|
34
|
+
"types": "./dist/config/*.d.ts",
|
|
35
|
+
"require": "./dist/config/*.js"
|
|
36
|
+
},
|
|
37
|
+
"./templates/*": "./templates/*"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"templates"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"gen:types": "prisma generate --schema templates/schema.system.prisma",
|
|
45
|
+
"doc": "tsoa spec-and-routes -c tsoa.json",
|
|
46
|
+
"fix:routes": "node scripts/fix-routes-imports.js",
|
|
47
|
+
"build": "pnpm clean && pnpm gen:types && pnpm doc && pnpm fix:routes && tsc -p tsconfig.build.json && node scripts/copy-assets.js",
|
|
48
|
+
"type-check": "tsc -p tsconfig.json --noEmit",
|
|
49
|
+
"clean": "rimraf dist src/build"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.19.0"
|
|
53
|
+
},
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@alicloud/dysmsapi20170525": "^4.6.0",
|
|
57
|
+
"@alicloud/openapi-client": "^0.4.15",
|
|
58
|
+
"@koa/router": "^15.3.0",
|
|
59
|
+
"@prisma/client": "^5.19.1",
|
|
60
|
+
"@supabase/supabase-js": "^2.91.1",
|
|
61
|
+
"@tsoa/runtime": "6.6.0",
|
|
62
|
+
"ali-oss": "^6.23.0",
|
|
63
|
+
"class-transformer": "^0.5.1",
|
|
64
|
+
"class-validator": "^0.15.1",
|
|
65
|
+
"dotenv": "^17.2.3",
|
|
66
|
+
"jsonwebtoken": "^9.0.3",
|
|
67
|
+
"koa": "^3.1.1",
|
|
68
|
+
"nodemailer": "^9.0.5",
|
|
69
|
+
"redis": "^5.12.1",
|
|
70
|
+
"reflect-metadata": "^0.2.2",
|
|
71
|
+
"tsoa": "6.6.0",
|
|
72
|
+
"typedi": "^0.10.0"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@types/koa": "^2.15.0",
|
|
76
|
+
"@types/koa__router": "^12.0.5",
|
|
77
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
78
|
+
"@types/node": "^25.0.10",
|
|
79
|
+
"@types/nodemailer": "^8.0.1",
|
|
80
|
+
"prisma": "^5.19.1",
|
|
81
|
+
"rimraf": "^6.0.1",
|
|
82
|
+
"typescript": "^5.9.3"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Koa-Boot Runtime 系统表 Schema 片段
|
|
3
|
+
// 用途:
|
|
4
|
+
// 1. runtime 自身类型生成:pnpm gen:types(prisma generate --schema 本文件)
|
|
5
|
+
// 2. CLI 生成用户项目时,本片段合并进用户项目的 schema.prisma
|
|
6
|
+
// 用户业务表定义在用户项目侧(src/business/**),与系统表共存。
|
|
7
|
+
// ============================================================
|
|
8
|
+
|
|
9
|
+
generator client {
|
|
10
|
+
provider = "prisma-client-js"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
datasource db {
|
|
14
|
+
provider = "mysql"
|
|
15
|
+
url = env("DATABASE_URL")
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
model User {
|
|
19
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
20
|
+
username String @unique(map: "username") @db.VarChar(50)
|
|
21
|
+
password String @db.VarChar(255)
|
|
22
|
+
name String @db.VarChar(100)
|
|
23
|
+
phone String @unique(map: "phone") @db.VarChar(20)
|
|
24
|
+
email String? @unique(map: "email") @db.VarChar(100)
|
|
25
|
+
avatar String? @db.VarChar(255)
|
|
26
|
+
departmentId String? @map("department_id") @db.Char(36)
|
|
27
|
+
status String? @default("active") @db.VarChar(20)
|
|
28
|
+
wechatUserid String? @map("wechat_userid") @db.VarChar(50)
|
|
29
|
+
pushCid String? @map("push_cid") @db.VarChar(100)
|
|
30
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
31
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
32
|
+
department Department? @relation(fields: [departmentId], references: [id])
|
|
33
|
+
userRoles UserRole[] @relation("UserRoleUser")
|
|
34
|
+
|
|
35
|
+
@@index([departmentId], map: "idx_sys_users_department")
|
|
36
|
+
@@map("sys_users")
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
model Employee {
|
|
40
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
41
|
+
name String @db.VarChar(100)
|
|
42
|
+
phone String @unique(map: "phone") @db.VarChar(20)
|
|
43
|
+
email String? @unique(map: "email") @db.VarChar(100)
|
|
44
|
+
position String? @db.VarChar(50)
|
|
45
|
+
salary Decimal? @db.Decimal(10, 2)
|
|
46
|
+
hireDate DateTime @map("hire_date") @db.DateTime(0)
|
|
47
|
+
departmentId String? @map("department_id") @db.Char(36)
|
|
48
|
+
status String? @default("active") @db.VarChar(20)
|
|
49
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
50
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
51
|
+
department Department? @relation(fields: [departmentId], references: [id])
|
|
52
|
+
|
|
53
|
+
@@index([departmentId], map: "idx_employees_department")
|
|
54
|
+
@@map("employees")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
model Role {
|
|
58
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
59
|
+
code String @unique(map: "code") @db.VarChar(50)
|
|
60
|
+
name String @db.VarChar(100)
|
|
61
|
+
description String? @db.VarChar(255)
|
|
62
|
+
sort Int @default(0)
|
|
63
|
+
status String? @default("active") @db.VarChar(20)
|
|
64
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
65
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
66
|
+
userRoles UserRole[] @relation("UserRoleRole")
|
|
67
|
+
rolePermissions RolePermission[] @relation("RolePermissionRole")
|
|
68
|
+
roleMenus RoleMenu[] @relation("RoleMenuRole")
|
|
69
|
+
|
|
70
|
+
@@map("sys_roles")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
model Permission {
|
|
74
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
75
|
+
code String @unique(map: "code") @db.VarChar(100)
|
|
76
|
+
name String @db.VarChar(100)
|
|
77
|
+
type String @db.VarChar(20)
|
|
78
|
+
description String? @db.VarChar(255)
|
|
79
|
+
parentId String? @map("parent_id") @db.Char(36)
|
|
80
|
+
path String? @db.VarChar(255)
|
|
81
|
+
method String? @db.VarChar(10)
|
|
82
|
+
sort Int @default(0)
|
|
83
|
+
status String? @default("active") @db.VarChar(20)
|
|
84
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
85
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
86
|
+
parent Permission? @relation("PermissionTree", fields: [parentId], references: [id])
|
|
87
|
+
children Permission[] @relation("PermissionTree")
|
|
88
|
+
rolePermissions RolePermission[] @relation("RolePermissionPermission")
|
|
89
|
+
|
|
90
|
+
@@index([type], map: "idx_sys_permissions_type")
|
|
91
|
+
@@index([parentId], map: "idx_sys_permissions_parent")
|
|
92
|
+
@@map("sys_permissions")
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
model Menu {
|
|
96
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
97
|
+
name String @db.VarChar(100)
|
|
98
|
+
code String @unique(map: "code") @db.VarChar(100)
|
|
99
|
+
parentId String? @map("parent_id") @db.Char(36)
|
|
100
|
+
type String @default("menu") @db.VarChar(20)
|
|
101
|
+
path String? @db.VarChar(255)
|
|
102
|
+
component String? @db.VarChar(255)
|
|
103
|
+
icon String? @db.VarChar(100)
|
|
104
|
+
permissionId String? @map("permission_id") @db.Char(36)
|
|
105
|
+
sort Int @default(0)
|
|
106
|
+
visible Boolean @default(true)
|
|
107
|
+
status String? @default("active") @db.VarChar(20)
|
|
108
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
109
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
110
|
+
parent Menu? @relation("MenuTree", fields: [parentId], references: [id])
|
|
111
|
+
children Menu[] @relation("MenuTree")
|
|
112
|
+
roleMenus RoleMenu[] @relation("RoleMenuMenu")
|
|
113
|
+
|
|
114
|
+
@@index([parentId], map: "idx_sys_menus_parent")
|
|
115
|
+
@@index([parentId, sort], map: "idx_sys_menus_sort")
|
|
116
|
+
@@map("sys_menus")
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
model Department {
|
|
120
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
121
|
+
name String @db.VarChar(100)
|
|
122
|
+
code String @unique(map: "code") @db.VarChar(50)
|
|
123
|
+
parentId String? @map("parent_id") @db.Char(36)
|
|
124
|
+
leaderId String? @map("leader_id") @db.Char(36)
|
|
125
|
+
phone String? @db.VarChar(20)
|
|
126
|
+
sort Int @default(0)
|
|
127
|
+
status String? @default("active") @db.VarChar(20)
|
|
128
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
129
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
130
|
+
parent Department? @relation("DepartmentTree", fields: [parentId], references: [id])
|
|
131
|
+
children Department[] @relation("DepartmentTree")
|
|
132
|
+
users User[] @relation
|
|
133
|
+
employees Employee[] @relation
|
|
134
|
+
|
|
135
|
+
@@index([parentId], map: "idx_sys_departments_parent")
|
|
136
|
+
@@index([leaderId], map: "idx_sys_departments_leader")
|
|
137
|
+
@@map("sys_departments")
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
model DictType {
|
|
141
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
142
|
+
code String @unique(map: "code") @db.VarChar(100)
|
|
143
|
+
name String @db.VarChar(100)
|
|
144
|
+
description String? @db.VarChar(255)
|
|
145
|
+
status String? @default("active") @db.VarChar(20)
|
|
146
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
147
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
148
|
+
items DictItem[]
|
|
149
|
+
|
|
150
|
+
@@map("sys_dict_types")
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
model DictItem {
|
|
154
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
155
|
+
typeId String @map("type_id") @db.Char(36)
|
|
156
|
+
label String @db.VarChar(100)
|
|
157
|
+
value String @db.VarChar(100)
|
|
158
|
+
cssClass String? @map("css_class") @db.VarChar(50)
|
|
159
|
+
sort Int @default(0)
|
|
160
|
+
status String? @default("active") @db.VarChar(20)
|
|
161
|
+
description String? @db.VarChar(255)
|
|
162
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
163
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
164
|
+
dictType DictType @relation(fields: [typeId], references: [id])
|
|
165
|
+
|
|
166
|
+
@@unique([typeId, value], map: "idx_sys_dict_items_type_value")
|
|
167
|
+
@@index([typeId], map: "idx_sys_dict_items_type")
|
|
168
|
+
@@map("sys_dict_items")
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
model OperationLog {
|
|
172
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
173
|
+
userId String? @map("user_id") @db.Char(36)
|
|
174
|
+
username String @db.VarChar(50)
|
|
175
|
+
module String @db.VarChar(50)
|
|
176
|
+
action String @db.VarChar(50)
|
|
177
|
+
targetType String? @map("target_type") @db.VarChar(50)
|
|
178
|
+
targetId String? @map("target_id") @db.Char(36)
|
|
179
|
+
description String? @db.VarChar(500)
|
|
180
|
+
requestMethod String? @map("request_method") @db.VarChar(10)
|
|
181
|
+
requestUrl String? @map("request_url") @db.VarChar(255)
|
|
182
|
+
requestIp String? @map("request_ip") @db.VarChar(50)
|
|
183
|
+
requestBody String? @map("request_body") @db.Text
|
|
184
|
+
responseCode Int? @map("response_code")
|
|
185
|
+
duration Int?
|
|
186
|
+
status String? @default("success") @db.VarChar(20)
|
|
187
|
+
errorMsg String? @map("error_msg") @db.Text
|
|
188
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
189
|
+
|
|
190
|
+
@@index([userId], map: "idx_sys_op_logs_user")
|
|
191
|
+
@@index([module], map: "idx_sys_op_logs_module")
|
|
192
|
+
@@index([action], map: "idx_sys_op_logs_action")
|
|
193
|
+
@@index([createdAt], map: "idx_sys_op_logs_created")
|
|
194
|
+
@@map("sys_operation_logs")
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
model LoginLog {
|
|
198
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
199
|
+
userId String? @map("user_id") @db.Char(36)
|
|
200
|
+
username String @db.VarChar(50)
|
|
201
|
+
action String @db.VarChar(20)
|
|
202
|
+
ip String? @db.VarChar(50)
|
|
203
|
+
userAgent String? @map("user_agent") @db.VarChar(500)
|
|
204
|
+
os String? @db.VarChar(100)
|
|
205
|
+
browser String? @db.VarChar(100)
|
|
206
|
+
status String? @default("success") @db.VarChar(20)
|
|
207
|
+
message String? @db.VarChar(255)
|
|
208
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
209
|
+
|
|
210
|
+
@@index([userId], map: "idx_sys_login_logs_user")
|
|
211
|
+
@@index([username], map: "idx_sys_login_logs_username")
|
|
212
|
+
@@index([createdAt], map: "idx_sys_login_logs_created")
|
|
213
|
+
@@map("sys_login_logs")
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
model FileUpload {
|
|
217
|
+
id String @id @default(uuid()) @db.Char(36)
|
|
218
|
+
fileNo String @unique(map: "fileNo") @map("file_no") @db.VarChar(100)
|
|
219
|
+
name String @db.VarChar(255)
|
|
220
|
+
size Int @default(0)
|
|
221
|
+
type String @db.VarChar(50)
|
|
222
|
+
url String @db.VarChar(500)
|
|
223
|
+
description String? @db.VarChar(255)
|
|
224
|
+
status String? @default("active") @db.VarChar(20)
|
|
225
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
226
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
227
|
+
|
|
228
|
+
@@index([fileNo], map: "idx_sys_file_uploads_fileno")
|
|
229
|
+
@@index([type], map: "idx_sys_file_uploads_type")
|
|
230
|
+
@@index([createdAt], map: "idx_sys_file_uploads_created")
|
|
231
|
+
@@map("sys_file_uploads")
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
model UserRole {
|
|
235
|
+
userId String @map("user_id") @db.Char(36)
|
|
236
|
+
roleId String @map("role_id") @db.Char(36)
|
|
237
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
238
|
+
|
|
239
|
+
user User @relation("UserRoleUser", fields: [userId], references: [id], onDelete: Cascade)
|
|
240
|
+
role Role @relation("UserRoleRole", fields: [roleId], references: [id], onDelete: Cascade)
|
|
241
|
+
|
|
242
|
+
@@id([userId, roleId])
|
|
243
|
+
@@unique([userId, roleId], map: "uk_sys_user_roles")
|
|
244
|
+
@@index([userId], map: "idx_sys_user_roles_user")
|
|
245
|
+
@@index([roleId], map: "idx_sys_user_roles_role")
|
|
246
|
+
@@map("sys_user_roles")
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
model RolePermission {
|
|
250
|
+
roleId String @map("role_id") @db.Char(36)
|
|
251
|
+
permissionId String @map("permission_id") @db.Char(36)
|
|
252
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
253
|
+
|
|
254
|
+
role Role @relation("RolePermissionRole", fields: [roleId], references: [id], onDelete: Cascade)
|
|
255
|
+
permission Permission @relation("RolePermissionPermission", fields: [permissionId], references: [id], onDelete: Cascade)
|
|
256
|
+
|
|
257
|
+
@@id([roleId, permissionId])
|
|
258
|
+
@@index([roleId], map: "idx_sys_role_permissions_role")
|
|
259
|
+
@@index([permissionId], map: "idx_sys_role_permissions_perm")
|
|
260
|
+
@@map("sys_role_permissions")
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
model RoleMenu {
|
|
264
|
+
roleId String @map("role_id") @db.Char(36)
|
|
265
|
+
menuId String @map("menu_id") @db.Char(36)
|
|
266
|
+
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(0)
|
|
267
|
+
|
|
268
|
+
role Role @relation("RoleMenuRole", fields: [roleId], references: [id], onDelete: Cascade)
|
|
269
|
+
menu Menu @relation("RoleMenuMenu", fields: [menuId], references: [id], onDelete: Cascade)
|
|
270
|
+
|
|
271
|
+
@@id([roleId, menuId])
|
|
272
|
+
@@index([roleId], map: "idx_sys_role_menus_role")
|
|
273
|
+
@@index([menuId], map: "idx_sys_role_menus_menu")
|
|
274
|
+
@@map("sys_role_menus")
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
model SysSequence {
|
|
278
|
+
seqKey String @id @map("seq_key") @db.VarChar(50)
|
|
279
|
+
currentValue Int @default(0) @map("current_value")
|
|
280
|
+
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(0)
|
|
281
|
+
|
|
282
|
+
@@map("sys_sequences")
|
|
283
|
+
}
|