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.
- package/package.json +1 -1
- package/template/.cursor/commands/cheatsheet-backend-controller.md +2 -2
- package/template/.cursor/commands/implement-backend-api-controller.md +6 -4
- package/template/.cursor/rules/11-backend-controller-recipes.skill.md +89 -10
- package/template/.trae/skills/11-backend-controller-recipes.skill.md +91 -10
- package/template/src/controllers/example/ExampleController.ts +14 -0
- package/template/src/entity/index.ts +1 -15
- package/template/src/framework/decorator/processor/AnnotationProcessor.ts +5 -1
- package/template/src/routers/index.ts +0 -35
- package/template/src/utils/testDataInitializer.ts +2 -269
- package/template/test/controllers/example/ExampleController.test.ts +29 -31
- package/template/test/framework/annotation/AnnotationDecorators.test.ts +15 -15
- package/template/test/framework/annotation/AnnotationExecutor.test.ts +27 -32
- package/template/test/framework/annotation/AnnotationProcessor.test.ts +25 -24
- package/template/test/framework/annotation/CustomProcessors.test.ts +15 -25
- package/template/test/framework/annotation/NewRouter.test.ts +9 -7
- package/template/test/framework/annotation/ProcessorManager.test.ts +14 -27
- package/template/test/framework/databaseConfig.test.ts +2 -2
- package/template/test/integration/integration.test.ts +15 -72
- package/template/src/controllers/cacheManagement.controller.ts +0 -131
- package/template/src/controllers/captcha.controller.ts +0 -57
- package/template/src/controllers/example/NewAnnotationExampleController.ts +0 -159
- package/template/src/controllers/example/SwaggerExampleController.ts +0 -205
- package/template/src/controllers/example/TransactionExample.controller.ts +0 -336
- package/template/src/controllers/health.controller.ts +0 -235
- package/template/src/controllers/home/register.controller.ts +0 -58
- package/template/src/controllers/home/ytGoods.controller.ts +0 -92
- package/template/src/controllers/home/ytShop.controller.ts +0 -135
- package/template/src/controllers/home/ytUser.controller.ts +0 -89
- package/template/src/controllers/logManagement.controller.ts +0 -396
- package/template/src/controllers/public/emailSend.controller.ts +0 -65
- package/template/src/controllers/public/ytUserAuth.controller.ts +0 -174
- package/template/src/controllers/testData.controller.ts +0 -253
- package/template/src/dto/controller/example/NewAnnotationExampleController.dto.ts +0 -73
- package/template/src/dto/controller/home/emailSend.controller.dto.ts +0 -40
- package/template/src/dto/controller/home/register.controller.dto.ts +0 -45
- package/template/src/dto/controller/home/ytGoods.controller.dto.ts +0 -55
- package/template/src/dto/controller/home/ytShop.controller.dto.ts +0 -69
- package/template/src/dto/controller/home/ytUser.controller.dto.ts +0 -44
- package/template/src/dto/controller/public/ytUserAuth.controller.dto.ts +0 -63
- package/template/src/dto/goods.dto.ts +0 -212
- package/template/src/dto/service/ytService.dto.ts +0 -13
- package/template/src/dto/user.dto.ts +0 -177
- package/template/src/entity/columnTypes.ts +0 -13
- package/template/src/entity/goodsImagesUnlockKey.entity.ts +0 -33
- package/template/src/entity/goodsUnlocker.entity.ts +0 -34
- package/template/src/entity/shop.entity.ts +0 -52
- package/template/src/entity/shopUser.entity.ts +0 -41
- package/template/src/entity/ytGoods.entity.ts +0 -94
- package/template/src/entity/ytUser.entity.ts +0 -96
- package/template/src/examples/SwaggerProcessorExample.ts +0 -169
- package/template/src/examples/TransactionManagerDemo.ts +0 -377
- package/template/src/framework/utils/dynamicSwagger.ts +0 -410
- package/template/src/repository/UserRepository.ts +0 -122
- package/template/src/service/paramValidateTest.service.ts +0 -139
- package/template/src/service/ytGoods.service.ts +0 -42
- package/template/src/service/ytShop.service.ts +0 -90
- package/template/src/service/ytUser.service.ts +0 -451
- package/template/src/test/swaggerParameterTest.ts +0 -90
- package/template/test/controllers/controllers.test.ts +0 -173
- package/template/test/controllers/example/NewAnnotationExampleController.test.ts +0 -200
- package/template/test/framework/TransactionManagerDemo.test.ts +0 -363
- package/template/test/service/business.test.ts +0 -87
- package/template/test/service/paramValidateTest.service.test.ts +0 -184
- package/template/test/service/ytUser.service.test.ts +0 -566
package/package.json
CHANGED
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
- 入参 DTO 应放在哪个目录、命名建议
|
|
39
39
|
- Service 方法签名建议(含返回类型)
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
-
|
|
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
|
-
- `
|
|
55
|
-
-
|
|
56
|
-
- `
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
159
|
+
- 读取整个 `ctx.state`(样例:见 **1.1.2**)
|
|
80
160
|
- 推荐写法:`@State() state: { user: { userId: number; type?: number } }`
|
|
81
161
|
- **`@State('user')`**:
|
|
82
|
-
- 读取 `ctx.state.user
|
|
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
|
|
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:
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
159
|
+
- 读取整个 `ctx.state`(样例:见 **1.1.2**)
|
|
80
160
|
- 推荐写法:`@State() state: { user: { userId: number; type?: number } }`
|
|
81
161
|
- **`@State('user')`**:
|
|
82
|
-
- 读取 `ctx.state.user
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|