create-dp-koa 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/package.json +1 -1
  2. package/template/.cursor/commands/cheatsheet-backend-controller.md +2 -2
  3. package/template/.cursor/commands/implement-backend-api-controller.md +6 -4
  4. package/template/.cursor/rules/11-backend-controller-recipes.skill.md +89 -10
  5. package/template/.trae/skills/11-backend-controller-recipes.skill.md +91 -10
  6. package/template/src/controllers/example/ExampleController.ts +14 -0
  7. package/template/src/entity/index.ts +1 -15
  8. package/template/src/framework/decorator/processor/AnnotationProcessor.ts +5 -1
  9. package/template/src/routers/index.ts +0 -35
  10. package/template/src/utils/testDataInitializer.ts +2 -269
  11. package/template/test/controllers/example/ExampleController.test.ts +29 -31
  12. package/template/test/framework/annotation/AnnotationDecorators.test.ts +15 -15
  13. package/template/test/framework/annotation/AnnotationExecutor.test.ts +27 -32
  14. package/template/test/framework/annotation/AnnotationProcessor.test.ts +25 -24
  15. package/template/test/framework/annotation/CustomProcessors.test.ts +15 -25
  16. package/template/test/framework/annotation/NewRouter.test.ts +9 -7
  17. package/template/test/framework/annotation/ProcessorManager.test.ts +14 -27
  18. package/template/test/framework/databaseConfig.test.ts +2 -2
  19. package/template/test/integration/integration.test.ts +15 -72
  20. package/template/src/controllers/cacheManagement.controller.ts +0 -131
  21. package/template/src/controllers/captcha.controller.ts +0 -57
  22. package/template/src/controllers/example/NewAnnotationExampleController.ts +0 -159
  23. package/template/src/controllers/example/SwaggerExampleController.ts +0 -205
  24. package/template/src/controllers/example/TransactionExample.controller.ts +0 -336
  25. package/template/src/controllers/health.controller.ts +0 -235
  26. package/template/src/controllers/home/register.controller.ts +0 -58
  27. package/template/src/controllers/home/ytGoods.controller.ts +0 -92
  28. package/template/src/controllers/home/ytShop.controller.ts +0 -135
  29. package/template/src/controllers/home/ytUser.controller.ts +0 -89
  30. package/template/src/controllers/logManagement.controller.ts +0 -396
  31. package/template/src/controllers/public/emailSend.controller.ts +0 -65
  32. package/template/src/controllers/public/ytUserAuth.controller.ts +0 -174
  33. package/template/src/controllers/testData.controller.ts +0 -253
  34. package/template/src/dto/controller/example/NewAnnotationExampleController.dto.ts +0 -73
  35. package/template/src/dto/controller/home/emailSend.controller.dto.ts +0 -40
  36. package/template/src/dto/controller/home/register.controller.dto.ts +0 -45
  37. package/template/src/dto/controller/home/ytGoods.controller.dto.ts +0 -55
  38. package/template/src/dto/controller/home/ytShop.controller.dto.ts +0 -69
  39. package/template/src/dto/controller/home/ytUser.controller.dto.ts +0 -44
  40. package/template/src/dto/controller/public/ytUserAuth.controller.dto.ts +0 -63
  41. package/template/src/dto/goods.dto.ts +0 -212
  42. package/template/src/dto/service/ytService.dto.ts +0 -13
  43. package/template/src/dto/user.dto.ts +0 -177
  44. package/template/src/entity/columnTypes.ts +0 -13
  45. package/template/src/entity/goodsImagesUnlockKey.entity.ts +0 -33
  46. package/template/src/entity/goodsUnlocker.entity.ts +0 -34
  47. package/template/src/entity/shop.entity.ts +0 -52
  48. package/template/src/entity/shopUser.entity.ts +0 -41
  49. package/template/src/entity/ytGoods.entity.ts +0 -94
  50. package/template/src/entity/ytUser.entity.ts +0 -96
  51. package/template/src/examples/SwaggerProcessorExample.ts +0 -169
  52. package/template/src/examples/TransactionManagerDemo.ts +0 -377
  53. package/template/src/framework/utils/dynamicSwagger.ts +0 -410
  54. package/template/src/repository/UserRepository.ts +0 -122
  55. package/template/src/service/paramValidateTest.service.ts +0 -139
  56. package/template/src/service/ytGoods.service.ts +0 -42
  57. package/template/src/service/ytShop.service.ts +0 -90
  58. package/template/src/service/ytUser.service.ts +0 -451
  59. package/template/src/test/swaggerParameterTest.ts +0 -90
  60. package/template/test/controllers/controllers.test.ts +0 -173
  61. package/template/test/controllers/example/NewAnnotationExampleController.test.ts +0 -200
  62. package/template/test/framework/TransactionManagerDemo.test.ts +0 -363
  63. package/template/test/service/business.test.ts +0 -87
  64. package/template/test/service/paramValidateTest.service.test.ts +0 -184
  65. package/template/test/service/ytUser.service.test.ts +0 -566
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-dp-koa",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Scaffold a DP-Koa framework project from the official template",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,8 +38,8 @@
38
38
  - 入参 DTO 应放在哪个目录、命名建议
39
39
  - Service 方法签名建议(含返回类型)
40
40
 
41
- 【对齐的项目样例(必须列出)】
42
- - 列出你参考的文件路径(至少 2 个)
41
+ 【对齐的参考来源(必须列出)】
42
+ - 至少列出 **`11-backend-controller-recipes.skill.md` 内嵌示例**中的 2 个小节编号(例如 1.1.2、1.1.4);若同时参考了仓库内 `src/controllers/base.controller.ts` 或 `src/controllers/example/*`,可一并写出路径
43
43
  ```
44
44
 
45
45
 
@@ -50,9 +50,11 @@
50
50
  ---
51
51
 
52
52
  ## 写代码前的对齐动作(必须)
53
- - 在生成/修改 Controller 代码前,先对齐本项目示例写法:
54
- - `src/controllers/example/NewAnnotationExampleController.ts`
55
- - `src/controllers/home/ytUser.controller.ts`
56
- - `src/controllers/base.controller.ts`
53
+ - 在生成/修改 Controller 代码前,先对齐 **`11-backend-controller-recipes.skill.md` 内嵌示例**(章节 **1.1**),重点核对:
54
+ - **1.1.1** `BaseController` / `ControllerResponse` 与 `success` / `fail` 用法
55
+ - **1.1.2** `@State()` 读取整段 `ctx.state`
56
+ - **1.1.3** `@State('user')` 只读 `ctx.state.user`
57
+ - **1.1.4** `@ResponseValidateIf` 条件响应校验
58
+ - 若仓库中仍存在 `src/controllers/base.controller.ts` 或 `src/controllers/example/*`,可作为**补充**对照(以实现代码为准)。
57
59
 
58
60
 
@@ -12,11 +12,91 @@ alwaysApply: false
12
12
 
13
13
  ## 一、写 Controller 的推荐范式(必须对齐)
14
14
 
15
- ### 1.1 参考样例(写代码前先对齐)
16
- - 推荐在实现前先对齐以下文件的写法(不要臆造新风格):
17
- - `src/controllers/example/NewAnnotationExampleController.ts`
18
- - `src/controllers/home/ytUser.controller.ts`
19
- - `src/controllers/base.controller.ts`
15
+ ### 1.1 内嵌参考样例(本 Skill 自包含)
16
+ 以下为从本项目常用写法整理的最小示例;**实现新接口时请先对齐本节的装饰器与类型风格**。若仓库中另有 `src/controllers/example/*` 等运行时代码,可作为补充参考,但**不必依赖**特定业务 Controller 文件是否存在。
17
+
18
+ #### 1.1.1 `BaseController` 与 `ControllerResponse`(统一响应)
19
+
20
+ ```ts
21
+ export class ControllerResponse<T> {
22
+ code = 0;
23
+ data: T | null = null;
24
+ message = '';
25
+
26
+ constructor(code: number, data: T | null, message?: string) {
27
+ this.code = code;
28
+ this.data = data;
29
+ if (message) this.message = message;
30
+ }
31
+ }
32
+
33
+ export class BaseController {
34
+ success<T>(data: T, message?: string) {
35
+ return new ControllerResponse<T>(0, data, message);
36
+ }
37
+ fail<T>(code: number, message?: string) {
38
+ return new ControllerResponse<T>(code, null, message);
39
+ }
40
+ }
41
+ ```
42
+
43
+ #### 1.1.2 `@State()`:读取整段 `ctx.state`
44
+
45
+ ```ts
46
+ import { Get, State } from '@src/framework/decorator/controller';
47
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
48
+
49
+ export class ExampleStateController extends BaseController {
50
+ @Get('/example/state-full')
51
+ async getWithFullState(
52
+ @State() state: { user: { userId: number; type?: number } },
53
+ ): Promise<ControllerResponse<{ userId: number }>> {
54
+ return this.success({ userId: state.user.userId });
55
+ }
56
+ }
57
+ ```
58
+
59
+ #### 1.1.3 `@State('user')`:只读 `ctx.state.user`
60
+
61
+ ```ts
62
+ import { Get, State } from '@src/framework/decorator/controller';
63
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
64
+
65
+ export class ExampleUserSliceController extends BaseController {
66
+ @Get('/example/state-user')
67
+ async getWithUser(
68
+ @State('user') user: { userId: number; type?: number },
69
+ ): Promise<ControllerResponse<{ ok: boolean }>> {
70
+ return this.success({ ok: user.userId > 0 });
71
+ }
72
+ }
73
+ ```
74
+
75
+ #### 1.1.4 `@ResponseValidateIf`:仅在条件成立时校验响应体
76
+
77
+ ```ts
78
+ import { Get, State, ResponseValidateIf } from '@src/framework/decorator/controller';
79
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
80
+
81
+ // 示例 DTO:按实际接口替换
82
+ class UserProfileResponseDto {
83
+ id!: number;
84
+ nickName!: string;
85
+ }
86
+
87
+ export class ExampleResponseValidateController extends BaseController {
88
+ @ResponseValidateIf(UserProfileResponseDto, (data) => Boolean(data && data.data))
89
+ @Get('/example/profile')
90
+ async getProfile(
91
+ @State() state: { user: { userId: number } },
92
+ ): Promise<ControllerResponse<UserProfileResponseDto | null>> {
93
+ return this.success({
94
+ id: state.user.userId,
95
+ nickName: 'demo',
96
+ });
97
+ }
98
+ }
99
+ ```
20
100
 
21
101
  ### 1.2 Controller 标准骨架(复制这个结构)
22
102
  目标:DTO 入参 → 调用 Service → 统一响应(`success/fail`)→ try/catch + logger
@@ -76,10 +156,10 @@ export class SomeController extends BaseController {
76
156
  - 读取 body 参数
77
157
  - 推荐写法:`@Body(SomeBodyDto) body: XxxBodyDto`
78
158
  - **`@State()`**:
79
- - 读取整个 `ctx.state`(样例:`ytUser.controller.ts`)
159
+ - 读取整个 `ctx.state`(样例:见 **1.1.2**)
80
160
  - 推荐写法:`@State() state: { user: { userId: number; type?: number } }`
81
161
  - **`@State('user')`**:
82
- - 读取 `ctx.state.user`(样例:`NewAnnotationExampleController.ts`)
162
+ - 读取 `ctx.state.user`(样例:见 **1.1.3**)
83
163
  - 推荐写法:`@State('user') user: { userId: number; type?: number }`
84
164
 
85
165
  禁止:
@@ -91,7 +171,7 @@ export class SomeController extends BaseController {
91
171
 
92
172
  ### 2.4 响应校验注解(进阶,按需)
93
173
  - **`@ResponseValidator(DtoClass, objectKey?)`**:对响应数据做校验
94
- - **`@ResponseValidateIf(DtoClass, fn)`**:仅当 fn 返回真时才校验(样例:`ytUser.controller.ts`)
174
+ - **`@ResponseValidateIf(DtoClass, fn)`**:仅当 fn 返回真时才校验(样例:见 **1.1.4**)
95
175
 
96
176
  ---
97
177
 
@@ -101,9 +181,8 @@ export class SomeController extends BaseController {
101
181
  - `@Get('/xxx') + @State('user')`(或 `@State()` 取整段 state)
102
182
 
103
183
  ### 3.2 带 body 的 POST 接口
104
- - `@Post('/xxx') + @Body(SomeBodyDto) body: DtSomeBodyDtoo + @ResponseCode(201)`
184
+ - `@Post('/xxx') + @Body(SomeBodyDto) body: SomeBodyDto + @ResponseCode(201)`
105
185
 
106
186
  ### 3.3 需要自定义 header
107
187
  - `@ResponseHeader('X-XXX', 'value')`
108
188
 
109
-
@@ -12,11 +12,91 @@ alwaysApply: false
12
12
 
13
13
  ## 一、写 Controller 的推荐范式(必须对齐)
14
14
 
15
- ### 1.1 参考样例(写代码前先对齐)
16
- - 推荐在实现前先对齐以下文件的写法(不要臆造新风格):
17
- - `src/controllers/example/NewAnnotationExampleController.ts`
18
- - `src/controllers/home/ytUser.controller.ts`
19
- - `src/controllers/base.controller.ts`
15
+ ### 1.1 内嵌参考样例(本 Skill 自包含)
16
+ 以下为从本项目常用写法整理的最小示例;**实现新接口时请先对齐本节的装饰器与类型风格**。若仓库中另有 `src/controllers/example/*` 等运行时代码,可作为补充参考,但**不必依赖**特定业务 Controller 文件是否存在。
17
+
18
+ #### 1.1.1 `BaseController` 与 `ControllerResponse`(统一响应)
19
+
20
+ ```ts
21
+ export class ControllerResponse<T> {
22
+ code = 0;
23
+ data: T | null = null;
24
+ message = '';
25
+
26
+ constructor(code: number, data: T | null, message?: string) {
27
+ this.code = code;
28
+ this.data = data;
29
+ if (message) this.message = message;
30
+ }
31
+ }
32
+
33
+ export class BaseController {
34
+ success<T>(data: T, message?: string) {
35
+ return new ControllerResponse<T>(0, data, message);
36
+ }
37
+ fail<T>(code: number, message?: string) {
38
+ return new ControllerResponse<T>(code, null, message);
39
+ }
40
+ }
41
+ ```
42
+
43
+ #### 1.1.2 `@State()`:读取整段 `ctx.state`
44
+
45
+ ```ts
46
+ import { Get, State } from '@src/framework/decorator/controller';
47
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
48
+
49
+ export class ExampleStateController extends BaseController {
50
+ @Get('/example/state-full')
51
+ async getWithFullState(
52
+ @State() state: { user: { userId: number; type?: number } },
53
+ ): Promise<ControllerResponse<{ userId: number }>> {
54
+ return this.success({ userId: state.user.userId });
55
+ }
56
+ }
57
+ ```
58
+
59
+ #### 1.1.3 `@State('user')`:只读 `ctx.state.user`
60
+
61
+ ```ts
62
+ import { Get, State } from '@src/framework/decorator/controller';
63
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
64
+
65
+ export class ExampleUserSliceController extends BaseController {
66
+ @Get('/example/state-user')
67
+ async getWithUser(
68
+ @State('user') user: { userId: number; type?: number },
69
+ ): Promise<ControllerResponse<{ ok: boolean }>> {
70
+ return this.success({ ok: user.userId > 0 });
71
+ }
72
+ }
73
+ ```
74
+
75
+ #### 1.1.4 `@ResponseValidateIf`:仅在条件成立时校验响应体
76
+
77
+ ```ts
78
+ import { Get, State, ResponseValidateIf } from '@src/framework/decorator/controller';
79
+ import { BaseController, ControllerResponse } from '@src/controllers/base.controller';
80
+
81
+ // 示例 DTO:按实际接口替换
82
+ class UserProfileResponseDto {
83
+ id!: number;
84
+ nickName!: string;
85
+ }
86
+
87
+ export class ExampleResponseValidateController extends BaseController {
88
+ @ResponseValidateIf(UserProfileResponseDto, (data) => Boolean(data && data.data))
89
+ @Get('/example/profile')
90
+ async getProfile(
91
+ @State() state: { user: { userId: number } },
92
+ ): Promise<ControllerResponse<UserProfileResponseDto | null>> {
93
+ return this.success({
94
+ id: state.user.userId,
95
+ nickName: 'demo',
96
+ });
97
+ }
98
+ }
99
+ ```
20
100
 
21
101
  ### 1.2 Controller 标准骨架(复制这个结构)
22
102
  目标:DTO 入参 → 调用 Service → 统一响应(`success/fail`)→ try/catch + logger
@@ -76,10 +156,10 @@ export class SomeController extends BaseController {
76
156
  - 读取 body 参数
77
157
  - 推荐写法:`@Body(SomeBodyDto) body: XxxBodyDto`
78
158
  - **`@State()`**:
79
- - 读取整个 `ctx.state`(样例:`ytUser.controller.ts`)
159
+ - 读取整个 `ctx.state`(样例:见 **1.1.2**)
80
160
  - 推荐写法:`@State() state: { user: { userId: number; type?: number } }`
81
161
  - **`@State('user')`**:
82
- - 读取 `ctx.state.user`(样例:`NewAnnotationExampleController.ts`)
162
+ - 读取 `ctx.state.user`(样例:见 **1.1.3**)
83
163
  - 推荐写法:`@State('user') user: { userId: number; type?: number }`
84
164
 
85
165
  禁止:
@@ -91,7 +171,7 @@ export class SomeController extends BaseController {
91
171
 
92
172
  ### 2.4 响应校验注解(进阶,按需)
93
173
  - **`@ResponseValidator(DtoClass, objectKey?)`**:对响应数据做校验
94
- - **`@ResponseValidateIf(DtoClass, fn)`**:仅当 fn 返回真时才校验(样例:`ytUser.controller.ts`)
174
+ - **`@ResponseValidateIf(DtoClass, fn)`**:仅当 fn 返回真时才校验(样例:见 **1.1.4**)
95
175
 
96
176
  ---
97
177
 
@@ -101,7 +181,8 @@ export class SomeController extends BaseController {
101
181
  - `@Get('/xxx') + @State('user')`(或 `@State()` 取整段 state)
102
182
 
103
183
  ### 3.2 带 body 的 POST 接口
104
- - `@Post('/xxx') + @Body(SomeBodyDto) body: DtSomeBodyDtoo + @ResponseCode(201)`
184
+ - `@Post('/xxx') + @Body(SomeBodyDto) body: SomeBodyDto + @ResponseCode(201)`
105
185
 
106
186
  ### 3.3 需要自定义 header
107
- - `@ResponseHeader('X-XXX', 'value')`
187
+ - `@ResponseHeader('X-XXX', 'value')`
188
+
@@ -3,6 +3,20 @@ import { Logging, Permission, RateLimit } from '@src/framework/decorator/process
3
3
  import { PerformanceMonitor } from '@src/annotations/decorators/PerformanceMonitor';
4
4
  import { BaseController } from '@src/controllers/base.controller';
5
5
  import { Api, ApiTags, ApiResponse, ApiOperation } from '@src/framework/decorator/swagger';
6
+ import { ProcessorManager } from '@src/framework/decorator/processor/ProcessorManager';
7
+ import { LoggingProcessor, PermissionProcessor, RateLimitProcessor } from '@src/framework/decorator/processor/processors/CustomProcessors';
8
+ import { logger } from '@src/framework/utils/logger';
9
+
10
+ /**
11
+ * 测试/示例用:注册自定义注解处理器。
12
+ * 注意:此函数不会影响框架的默认初始化流程;只用于按需注册。
13
+ */
14
+ export function initializeCustomProcessors(): void {
15
+ ProcessorManager.registerProcessor(new LoggingProcessor());
16
+ ProcessorManager.registerProcessor(new PermissionProcessor());
17
+ ProcessorManager.registerProcessor(new RateLimitProcessor());
18
+ logger.info('自定义注解处理器已注册');
19
+ }
6
20
 
7
21
  /**
8
22
  * 示例控制器 - 展示新的注解系统用法
@@ -1,15 +1 @@
1
- import { GoodsImagesUnlockKeyEntity } from "@src/entity/goodsImagesUnlockKey.entity";
2
- import { YtGoodsUnlockerEntity } from "@src/entity/goodsUnlocker.entity";
3
- import { ShopEntity } from "@src/entity/shop.entity";
4
- import { ShopAndUserEntity } from "@src/entity/shopUser.entity";
5
- import { YtGoodsEntity } from "@src/entity/ytGoods.entity";
6
- import { YtUserEntity } from "@src/entity/ytUser.entity";
7
-
8
- export default [
9
- YtUserEntity,
10
- YtGoodsEntity,
11
- YtGoodsUnlockerEntity,
12
- GoodsImagesUnlockKeyEntity,
13
- ShopEntity,
14
- ShopAndUserEntity,
15
- ]
1
+ export default []
@@ -1,5 +1,6 @@
1
1
  import { Context } from 'koa';
2
2
  import { annotationRegistry } from '@src/framework/decorator/processor/AnnotationRegistry';
3
+ import { logger } from '@src/framework/utils/logger';
3
4
 
4
5
  /**
5
6
  * 注解处理器接口
@@ -111,7 +112,10 @@ export class AnnotationExecutor {
111
112
  return false;
112
113
  }
113
114
  } catch (error) {
114
- console.error(`注解处理器 ${processor.name} 执行失败:`, error);
115
+ // 处理器异常不应中断后续处理器;测试用例里该异常属于“预期流程”时不打印堆栈噪音
116
+ if (process.env.NODE_ENV !== 'test') {
117
+ logger.error(`注解处理器 ${processor.name} 执行失败`, error as Error);
118
+ }
115
119
  // 可以选择是否继续执行其他处理器
116
120
  // 这里选择继续执行
117
121
  }
@@ -1,49 +1,14 @@
1
- // import { UserController } from "../controllers/user.controller";
2
1
  import { logger } from "@src/framework/utils/logger";
3
2
  import { bindRouter } from "@src/framework/utils/router";
4
- import tokenMiddleware from "@src/middlewares/token.middleware";
5
- import { EmailSendController } from "@src/controllers/public/emailSend.controller";
6
- import { YtUserRegisterController } from "@src/controllers/home/register.controller";
7
- import { YtUserAuthController } from "@src/controllers/public/ytUserAuth.controller";
8
- import { YtUserController } from "@src/controllers/home/ytUser.controller";
9
- import { YtShopController } from "@src/controllers/home/ytShop.controller";
10
- import { YtGoodsController } from "@src/controllers/home/ytGoods.controller";
11
- import { HealthController } from "@src/controllers/health.controller";
12
- import { CacheManagementController } from "@src/controllers/cacheManagement.controller";
13
- import { TestDataController } from "@src/controllers/testData.controller";
14
3
  import { ExampleController } from "@src/controllers/example/ExampleController";
15
4
  import { AnnotationDemoController } from "@src/controllers/demo/AnnotationDemoController";
16
5
  import { EnterpriseExampleController } from "@src/controllers/example/EnterpriseExampleController";
17
- import { LogManagementController } from "@src/controllers/logManagement.controller";
18
6
 
19
7
 
20
8
  export default () => {
21
- // bindRouter("/a", tokenMiddleware(), aMiddleware(), UserController);
22
- bindRouter("/home/user/yt_user", tokenMiddleware(), YtUserController);
23
- bindRouter("/home/shop/common", YtShopController);
24
- bindRouter("/home/goods/common", tokenMiddleware(), YtGoodsController);
25
- bindRouter("/home/register/yt_user", YtUserRegisterController);
26
- bindRouter("/home/register/yt_user", YtUserRegisterController);
27
- bindRouter("/public/auth/yt_user", YtUserAuthController);
28
- bindRouter("/public/email", EmailSendController);
29
-
30
- // 健康检查端点
31
- bindRouter("/health", HealthController);
32
-
33
- // 缓存管理端点
34
- bindRouter("/admin/cache", CacheManagementController);
35
-
36
- // 测试数据管理端点(仅在内存数据库模式下有效)
37
- bindRouter("/test", TestDataController);
38
-
39
-
40
9
  bindRouter("/example/", ExampleController);
41
10
  bindRouter("/demo/", AnnotationDemoController);
42
11
  bindRouter("/enterprise/", EnterpriseExampleController);
43
-
44
- // 日志管理端点
45
- bindRouter("/admin/logs", tokenMiddleware(), LogManagementController);
46
12
 
47
-
48
13
  logger.info("路由绑定完成");
49
14
  }