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
@@ -1,96 +0,0 @@
1
- import { Column, Entity, OneToMany, OneToOne } from "typeorm";
2
- import { BaseEntity } from "@src/entity/base.entity";
3
- import { ShopAndUserEntity } from "@src/entity/shopUser.entity";
4
- import { YtGoodsUnlockerEntity } from "@src/entity/goodsUnlocker.entity";
5
-
6
-
7
- export enum YtUserStatusEnum {
8
- NORMAL = "normal",
9
- FORBIDDEN = "forbidden"
10
- }
11
-
12
- export enum YtUserTypeEnum {
13
- CUSTOMER = "CUSTOMER", // 消费者
14
- SHOP = "SHOP" // 商家
15
- }
16
-
17
-
18
- @Entity({
19
- name: "yt_user"
20
- })
21
- export class YtUserEntity extends BaseEntity {
22
-
23
-
24
-
25
- @Column({
26
- default: ""
27
- })
28
- nickName: string
29
-
30
- @Column({
31
- default: ""
32
- })
33
- telnumber: string
34
-
35
- @Column({
36
- default: ""
37
- })
38
- email: string
39
-
40
- @Column({
41
- default: ""
42
- })
43
- password: string
44
-
45
- @Column({
46
- type: "varchar",
47
- length: 50,
48
- default: YtUserTypeEnum.CUSTOMER
49
- })
50
- userType: YtUserTypeEnum
51
-
52
- @Column({
53
- default: 0,
54
- })
55
- gender: number
56
-
57
-
58
- @Column({
59
- default: 0,
60
- })
61
- age: number
62
-
63
-
64
- // 星座
65
- @Column({
66
- default: ""
67
- })
68
- constellation: string
69
-
70
-
71
- @Column({
72
- default: ""
73
- })
74
- avatar: string;
75
-
76
- @Column({
77
- default: YtUserStatusEnum.NORMAL,
78
- type: "varchar",
79
- length: 50
80
- })
81
- status: YtUserStatusEnum;
82
-
83
- // 关系定义
84
- /**
85
- * 用户与店铺的关系(一个用户只能拥有一个店铺)
86
- */
87
- @OneToOne(() => ShopAndUserEntity, shopUser => shopUser.user)
88
- shopRelation: ShopAndUserEntity;
89
-
90
- /**
91
- * 用户解锁的商品记录
92
- */
93
- @OneToMany(() => YtGoodsUnlockerEntity, unlocker => unlocker.user)
94
- unlockedGoods: YtGoodsUnlockerEntity[];
95
-
96
- }
@@ -1,169 +0,0 @@
1
- /**
2
- * Swagger处理器使用示例
3
- * 展示如何使用SwaggerProcessor来处理Swagger注解
4
- */
5
-
6
- import { swaggerProcessor } from '@src/annotations/processors/SwaggerProcessor';
7
- import { SwaggerExampleController } from '@src/controllers/example/SwaggerExampleController';
8
- import { logger } from '@src/framework/utils/logger';
9
-
10
- /**
11
- * Swagger处理器使用示例
12
- */
13
- export class SwaggerProcessorExample {
14
-
15
- /**
16
- * 示例1:处理单个控制器的Swagger注解
17
- */
18
- static async processSingleController() {
19
- try {
20
- logger.info('=== Swagger处理器示例:处理单个控制器 ===');
21
-
22
- // 处理SwaggerExampleController
23
- const controllerMetadata = swaggerProcessor.processController(SwaggerExampleController);
24
-
25
- logger.info('控制器标签:', controllerMetadata.tags);
26
- logger.info('方法数量:', controllerMetadata.methods.size);
27
-
28
- // 遍历所有方法
29
- controllerMetadata.methods.forEach((methodMetadata, methodName) => {
30
- logger.info(`方法 ${methodName}:`);
31
- logger.info(` - 操作ID: ${methodMetadata.operationId}`);
32
- logger.info(` - 摘要: ${methodMetadata.summary}`);
33
- logger.info(` - 描述: ${methodMetadata.description}`);
34
- logger.info(` - 标签: ${methodMetadata.tags.join(', ')}`);
35
- logger.info(` - 参数数量: ${methodMetadata.parameters.length}`);
36
- logger.info(` - 响应数量: ${methodMetadata.responses.length}`);
37
-
38
- if (methodMetadata.requestBody) {
39
- logger.info(` - 请求体: ${methodMetadata.requestBody.description}`);
40
- }
41
- });
42
-
43
- } catch (error) {
44
- logger.error('处理单个控制器失败:', error as Error);
45
- }
46
- }
47
-
48
- /**
49
- * 示例2:验证Swagger注解的完整性
50
- */
51
- static async validateSwaggerAnnotations() {
52
- try {
53
- logger.info('=== Swagger处理器示例:验证注解完整性 ===');
54
-
55
- const validationResult = swaggerProcessor.validateSwaggerAnnotations(SwaggerExampleController);
56
-
57
- logger.info('验证结果:', {
58
- isValid: validationResult.isValid,
59
- errors: validationResult.errors,
60
- warnings: validationResult.warnings
61
- });
62
-
63
- if (validationResult.errors.length > 0) {
64
- logger.error('验证错误:', new Error(validationResult.errors.join(', ')));
65
- }
66
-
67
- if (validationResult.warnings.length > 0) {
68
- logger.warn('验证警告:', validationResult.warnings.join(', '));
69
- }
70
-
71
- } catch (error) {
72
- logger.error('验证Swagger注解失败:', error as Error);
73
- }
74
- }
75
-
76
- /**
77
- * 示例3:生成OpenAPI规范
78
- */
79
- static async generateOpenAPISpec() {
80
- try {
81
- logger.info('=== Swagger处理器示例:生成OpenAPI规范 ===');
82
-
83
- const controllers = [SwaggerExampleController];
84
- const openAPISpec = swaggerProcessor.generateOpenAPISpec(controllers);
85
-
86
- logger.info('OpenAPI规范生成成功:');
87
- logger.info(` - OpenAPI版本: ${openAPISpec.openapi}`);
88
- logger.info(` - API标题: ${openAPISpec.info.title}`);
89
- logger.info(` - API版本: ${openAPISpec.info.version}`);
90
- logger.info(` - 服务器数量: ${openAPISpec.servers.length}`);
91
- logger.info(` - 路径数量: ${Object.keys(openAPISpec.paths).length}`);
92
-
93
- // 输出路径信息
94
- Object.keys(openAPISpec.paths).forEach(path => {
95
- const pathInfo = openAPISpec.paths[path];
96
- const methods = Object.keys(pathInfo);
97
- logger.info(` - 路径 ${path}: ${methods.join(', ')}`);
98
- });
99
-
100
- return openAPISpec;
101
-
102
- } catch (error) {
103
- logger.error('生成OpenAPI规范失败:', error as Error);
104
- throw error;
105
- }
106
- }
107
-
108
- /**
109
- * 示例4:处理方法级别的Swagger注解
110
- */
111
- static async processMethodAnnotations() {
112
- try {
113
- logger.info('=== Swagger处理器示例:处理方法级别注解 ===');
114
-
115
- const methodName = 'updateUser';
116
- const methodMetadata = swaggerProcessor.processMethod(SwaggerExampleController, methodName);
117
-
118
- logger.info(`方法 ${methodName} 的Swagger元数据:`);
119
- logger.info(` - 操作ID: ${methodMetadata.operationId}`);
120
- logger.info(` - 摘要: ${methodMetadata.summary}`);
121
- logger.info(` - 描述: ${methodMetadata.description}`);
122
- logger.info(` - 标签: ${methodMetadata.tags.join(', ')}`);
123
-
124
- // 输出参数信息
125
- if (methodMetadata.parameters.length > 0) {
126
- logger.info(' - 参数:');
127
- methodMetadata.parameters.forEach(param => {
128
- logger.info(` * ${param.name} (${param.in}): ${param.description || '无描述'}`);
129
- });
130
- }
131
-
132
- // 输出请求体信息
133
- if (methodMetadata.requestBody) {
134
- logger.info(` - 请求体: ${methodMetadata.requestBody.description || '无描述'}`);
135
- logger.info(` * 必需: ${methodMetadata.requestBody.required}`);
136
- }
137
-
138
- // 输出响应信息
139
- if (methodMetadata.responses.length > 0) {
140
- logger.info(' - 响应:');
141
- methodMetadata.responses.forEach(response => {
142
- logger.info(` * ${response.status}: ${response.description}`);
143
- });
144
- }
145
-
146
- } catch (error) {
147
- logger.error('处理方法级别注解失败:', error as Error);
148
- }
149
- }
150
-
151
- /**
152
- * 运行所有示例
153
- */
154
- static async runAllExamples() {
155
- try {
156
- logger.info('开始运行Swagger处理器示例...');
157
-
158
- await this.processSingleController();
159
- await this.validateSwaggerAnnotations();
160
- await this.processMethodAnnotations();
161
- await this.generateOpenAPISpec();
162
-
163
- logger.info('所有Swagger处理器示例运行完成!');
164
-
165
- } catch (error) {
166
- logger.error('运行Swagger处理器示例失败:', error as Error);
167
- }
168
- }
169
- }
@@ -1,377 +0,0 @@
1
- /**
2
- * TransactionManager 使用示例
3
- * 演示如何使用事务管理器处理各种数据库操作场景
4
- */
5
-
6
- import { transactionManager } from '@src/framework/utils/TransactionManager';
7
- import { logger } from '@src/framework/utils/logger';
8
- import { YtUserEntity } from '@src/entity/ytUser.entity';
9
- import { getDataSource } from '@src/framework/utils/db';
10
- import * as bcrypt from 'bcryptjs';
11
-
12
- /**
13
- * 示例 1: 基本事务使用
14
- * 创建用户并确保所有操作要么全部成功,要么全部失败
15
- */
16
- export async function example1_basicTransaction() {
17
- try {
18
- const result = await transactionManager.executeInTransaction(async (manager) => {
19
- // 在这个事务中,所有操作都会在同一个事务上下文中执行
20
-
21
- // 操作 1: 创建用户
22
- const user = new YtUserEntity();
23
- user.email = 'demo@example.com';
24
- user.telnumber = '13800138000';
25
- user.password = await bcrypt.hash('password123', 10);
26
-
27
- const savedUser = await manager.save(user);
28
-
29
- // 操作 2: 更新用户信息
30
- savedUser.email = 'updated@example.com';
31
- const updatedUser = await manager.save(savedUser);
32
-
33
- return updatedUser;
34
- });
35
-
36
- logger.info('事务执行成功:', result);
37
- return result;
38
-
39
- } catch (error) {
40
- logger.error('事务执行失败:', error as Error);
41
- throw error;
42
- }
43
- }
44
-
45
- /**
46
- * 示例 2: 使用隔离级别
47
- * 使用 SERIALIZABLE 隔离级别确保最高的数据一致性
48
- */
49
- export async function example2_transactionWithIsolationLevel() {
50
- try {
51
- const result = await transactionManager.executeInTransaction(
52
- async (manager) => {
53
- // 在 SERIALIZABLE 隔离级别下执行操作
54
- // 这会锁定相关数据,防止并发问题
55
-
56
- const users = await manager.find(YtUserEntity, {
57
- where: { email: 'demo@example.com' }
58
- });
59
-
60
- // 执行一些需要高度一致性的操作
61
- for (const user of users) {
62
- user.updateDate = new Date();
63
- await manager.save(user);
64
- }
65
-
66
- return users;
67
- },
68
- 'SERIALIZABLE' // 指定隔离级别
69
- );
70
-
71
- logger.info('隔离事务执行成功:', result);
72
- return result;
73
-
74
- } catch (error) {
75
- logger.error('隔离事务执行失败:', error as Error);
76
- throw error;
77
- }
78
- }
79
-
80
- /**
81
- * 示例 3: 只读事务
82
- * 用于优化只读操作的性能
83
- */
84
- export async function example3_readOnlyTransaction() {
85
- try {
86
- const result = await transactionManager.executeInReadOnlyTransaction(async (manager) => {
87
- // 只读事务,不会对数据产生任何修改
88
- // 适合报表查询、统计分析等操作
89
-
90
- const totalUsers = await manager.count(YtUserEntity);
91
- const activeUsers = await manager.count(YtUserEntity, {
92
- where: { status: 'normal' } as any
93
- });
94
-
95
- return {
96
- total: totalUsers,
97
- active: activeUsers,
98
- inactive: totalUsers - activeUsers
99
- };
100
- });
101
-
102
- logger.info('只读事务执行成功:', result);
103
- return result;
104
-
105
- } catch (error) {
106
- logger.error('只读事务执行失败:', error as Error);
107
- throw error;
108
- }
109
- }
110
-
111
- /**
112
- * 示例 4: 批量操作事务
113
- * 一次性处理多个操作,确保原子性
114
- */
115
- export async function example4_batchTransaction() {
116
- try {
117
- const operations = [
118
- // 操作 1: 创建用户 1
119
- async (manager: any) => {
120
- const user1 = new YtUserEntity();
121
- user1.email = 'user1@example.com';
122
- user1.telnumber = '13800138001';
123
- user1.password = await bcrypt.hash('pass123', 10);
124
- return await manager.save(user1);
125
- },
126
-
127
- // 操作 2: 创建用户 2
128
- async (manager: any) => {
129
- const user2 = new YtUserEntity();
130
- user2.email = 'user2@example.com';
131
- user2.telnumber = '13800138002';
132
- user2.password = await bcrypt.hash('pass123', 10);
133
- return await manager.save(user2);
134
- },
135
-
136
- // 操作 3: 更新用户 1
137
- async (manager: any) => {
138
- const user = await manager.findOne(YtUserEntity, {
139
- where: { email: 'user1@example.com' }
140
- });
141
- if (user) {
142
- user.updateDate = new Date();
143
- return await manager.save(user);
144
- }
145
- return null;
146
- }
147
- ];
148
-
149
- const results = await transactionManager.executeBatchTransaction(operations);
150
-
151
- logger.info('批量事务执行成功,创建了', results.length, '个操作');
152
- return results;
153
-
154
- } catch (error) {
155
- logger.error('批量事务执行失败:', error as Error);
156
- throw error;
157
- }
158
- }
159
-
160
- /**
161
- * 示例 5: 嵌套事务
162
- * 当需要在已经存在的事务中执行额外操作时使用
163
- */
164
- export async function example5_nestedTransaction() {
165
- try {
166
- // 外层事务
167
- const result = await transactionManager.executeInTransaction(async (manager) => {
168
- // 创建主用户
169
- const mainUser = new YtUserEntity();
170
- mainUser.email = 'main@example.com';
171
- mainUser.telnumber = '13800138000';
172
- mainUser.password = await bcrypt.hash('pass123', 10);
173
- const savedMainUser = await manager.save(mainUser);
174
-
175
- // 使用嵌套事务创建相关数据
176
- await transactionManager.executeNestedTransaction(async (nestedManager) => {
177
- // 这些操作会使用现有的事务(如果有)
178
- const relatedUser = new YtUserEntity();
179
- relatedUser.email = 'related@example.com';
180
- relatedUser.telnumber = '13800138001';
181
- relatedUser.password = await bcrypt.hash('pass123', 10);
182
- await nestedManager.save(relatedUser);
183
- });
184
-
185
- return savedMainUser;
186
- });
187
-
188
- logger.info('嵌套事务执行成功:', result);
189
- return result;
190
-
191
- } catch (error) {
192
- logger.error('嵌套事务执行失败:', error as Error);
193
- throw error;
194
- }
195
- }
196
-
197
- /**
198
- * 示例 6: 错误处理和回滚
199
- * 演示当事务出错时如何自动回滚
200
- */
201
- export async function example6_errorHandlingAndRollback() {
202
- try {
203
- await transactionManager.executeInTransaction(async (manager) => {
204
- // 操作 1: 创建用户
205
- const user = new YtUserEntity();
206
- user.email = 'test@example.com';
207
- user.telnumber = '13800138000';
208
- user.password = await bcrypt.hash('pass123', 10);
209
- await manager.save(user);
210
-
211
- // 操作 2: 故意引发错误(模拟业务逻辑错误)
212
- if (user.email === 'test@example.com') {
213
- throw new Error('模拟业务错误:测试用户不允许');
214
- }
215
-
216
- // 这段代码不会被执行,因为上面抛出了错误
217
- user.email = 'updated@example.com';
218
- await manager.save(user);
219
- });
220
-
221
- } catch (error) {
222
- // 所有操作都会被回滚
223
- logger.error('事务已回滚,所有更改已撤销');
224
-
225
- // 验证:检查用户是否真的被回滚了
226
- const dataSource = getDataSource();
227
- if (dataSource) {
228
- const user = await dataSource.manager.findOne(YtUserEntity, {
229
- where: { email: 'test@example.com' }
230
- });
231
-
232
- if (!user) {
233
- logger.info('✅ 回滚验证通过:用户未被创建');
234
- } else {
235
- logger.warn('❌ 回滚验证失败:用户仍然存在');
236
- }
237
- }
238
-
239
- throw error;
240
- }
241
- }
242
-
243
- /**
244
- * 示例 7: 复杂业务场景
245
- * 用户注册时需要同时创建多个相关记录
246
- */
247
- export async function example7_complexBusinessScenario(
248
- userData: any,
249
- profileData: any,
250
- preferences: any
251
- ) {
252
- try {
253
- const result = await transactionManager.executeInTransaction(async (manager) => {
254
- // 步骤 1: 创建用户
255
- const user = new YtUserEntity();
256
- user.email = userData.email;
257
- user.telnumber = userData.telnumber;
258
- user.password = userData.password;
259
- const savedUser = await manager.save(user);
260
-
261
- // 步骤 2: 创建用户配置(假设有配置表)
262
- // const profile = await manager.save(ProfileEntity, profileData);
263
-
264
- // 步骤 3: 创建用户偏好(假设有偏好表)
265
- // const preferences = await manager.save(PreferencesEntity, preferencesData);
266
-
267
- // 步骤 4: 发送欢迎通知(假设有通知表)
268
- // const notification = await manager.save(NotificationEntity, {
269
- // userId: savedUser.id,
270
- // message: '欢迎注册!'
271
- // });
272
-
273
- return {
274
- user: savedUser,
275
- // profile,
276
- // preferences
277
- };
278
- });
279
-
280
- logger.info('复杂业务场景执行成功');
281
- return result;
282
-
283
- } catch (error) {
284
- logger.error('复杂业务场景执行失败,所有更改已回滚');
285
- throw error;
286
- }
287
- }
288
-
289
- /**
290
- * 示例 8: 条件事务
291
- * 根据条件决定是否提交事务
292
- */
293
- export async function example8_conditionalTransaction(userData: any, shouldCommit: boolean) {
294
- try {
295
- const result = await transactionManager.executeInTransaction(async (manager) => {
296
- const user = new YtUserEntity();
297
- user.email = userData.email;
298
- user.telnumber = userData.telnumber;
299
- user.password = userData.password;
300
- const savedUser = await manager.save(user);
301
-
302
- // 模拟一些业务逻辑
303
- if (!shouldCommit) {
304
- // 即使在 try-catch 中不抛出错误,也可以通过返回值控制
305
- logger.warn('业务逻辑决定不提交事务');
306
- // 如果抛出自定义错误,事务会回滚
307
- throw new Error('Business logic error: 不符合提交条件');
308
- }
309
-
310
- return savedUser;
311
- });
312
-
313
- logger.info('条件事务执行成功');
314
- return result;
315
-
316
- } catch (error) {
317
- logger.error('条件事务被回滚');
318
- throw error;
319
- }
320
- }
321
-
322
- // 使用示例函数
323
- export async function runAllExamples() {
324
- console.log('=== TransactionManager 使用示例 ===\n');
325
-
326
- try {
327
- // 示例 1: 基本事务
328
- console.log('\n1. 基本事务示例');
329
- // await example1_basicTransaction();
330
-
331
- // 示例 2: 隔离级别
332
- console.log('\n2. 带隔离级别的事务示例');
333
- // await example2_transactionWithIsolationLevel();
334
-
335
- // 示例 3: 只读事务
336
- console.log('\n3. 只读事务示例');
337
- // await example3_readOnlyTransaction();
338
-
339
- // 示例 4: 批量操作
340
- console.log('\n4. 批量操作事务示例');
341
- // await example4_batchTransaction();
342
-
343
- // 示例 5: 嵌套事务
344
- console.log('\n5. 嵌套事务示例');
345
- // await example5_nestedTransaction();
346
-
347
- // 示例 6: 错误处理
348
- console.log('\n6. 错误处理和回滚示例');
349
- // await example6_errorHandlingAndRollback();
350
-
351
- // 示例 7: 复杂业务场景
352
- console.log('\n7. 复杂业务场景示例');
353
- // await example7_complexBusinessScenario({}, {}, {});
354
-
355
- // 示例 8: 条件事务
356
- console.log('\n8. 条件事务示例');
357
- // await example8_conditionalTransaction({}, true);
358
-
359
- console.log('\n=== 所有示例运行完成 ===');
360
-
361
- } catch (error) {
362
- logger.error('运行示例时发生错误:', error as Error);
363
- }
364
- }
365
-
366
- // 导出所有示例
367
- export const transactionManagerExamples = {
368
- basic: example1_basicTransaction,
369
- withIsolation: example2_transactionWithIsolationLevel,
370
- readOnly: example3_readOnlyTransaction,
371
- batch: example4_batchTransaction,
372
- nested: example5_nestedTransaction,
373
- errorHandling: example6_errorHandlingAndRollback,
374
- complex: example7_complexBusinessScenario,
375
- conditional: example8_conditionalTransaction,
376
- runAll: runAllExamples
377
- };