@nest-omni/core 4.1.3-1 → 4.1.3-11

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 (249) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +39 -1
  3. package/audit/controllers/audit.controller.d.ts +24 -0
  4. package/audit/controllers/audit.controller.js +24 -0
  5. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  6. package/audit/decorators/audit-controller.decorator.js +11 -2
  7. package/audit/decorators/audit-operation.decorator.d.ts +45 -0
  8. package/audit/decorators/audit-operation.decorator.js +49 -0
  9. package/audit/decorators/entity-audit.decorator.d.ts +76 -1
  10. package/audit/decorators/entity-audit.decorator.js +135 -3
  11. package/audit/decorators/index.d.ts +1 -0
  12. package/audit/decorators/index.js +1 -0
  13. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  14. package/audit/dto/audit-log-query.dto.js +3 -0
  15. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  16. package/audit/dto/begin-transaction.dto.js +3 -0
  17. package/audit/dto/compare-entities.dto.d.ts +3 -0
  18. package/audit/dto/compare-entities.dto.js +3 -0
  19. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  20. package/audit/dto/pre-check-restore.dto.js +3 -0
  21. package/audit/dto/restore-entity.dto.d.ts +3 -0
  22. package/audit/dto/restore-entity.dto.js +3 -0
  23. package/audit/entities/entity-audit-log.entity.d.ts +8 -0
  24. package/audit/entities/entity-audit-log.entity.js +33 -1
  25. package/audit/entities/entity-transaction.entity.d.ts +10 -0
  26. package/audit/entities/entity-transaction.entity.js +33 -1
  27. package/audit/entities/index.d.ts +2 -0
  28. package/audit/entities/index.js +2 -0
  29. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  30. package/audit/entities/manual-operation-log.entity.js +4 -0
  31. package/audit/entities/operation-template.entity.d.ts +4 -0
  32. package/audit/entities/operation-template.entity.js +4 -0
  33. package/audit/enums/audit.enums.d.ts +45 -5
  34. package/audit/enums/audit.enums.js +47 -4
  35. package/audit/index.d.ts +3 -1
  36. package/audit/index.js +30 -1
  37. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  38. package/audit/interceptors/audit.interceptor.js +23 -1
  39. package/audit/interfaces/audit.interfaces.d.ts +182 -2
  40. package/audit/services/audit-context.service.d.ts +15 -0
  41. package/audit/services/audit-context.service.js +15 -0
  42. package/audit/services/audit-strategy.service.d.ts +6 -0
  43. package/audit/services/audit-strategy.service.js +13 -0
  44. package/audit/services/entity-audit.service.d.ts +129 -3
  45. package/audit/services/entity-audit.service.js +301 -6
  46. package/audit/services/index.d.ts +2 -0
  47. package/audit/services/index.js +2 -0
  48. package/audit/services/manual-audit-log.service.d.ts +124 -0
  49. package/audit/services/manual-audit-log.service.js +138 -0
  50. package/audit/services/multi-database.service.d.ts +12 -0
  51. package/audit/services/multi-database.service.js +12 -0
  52. package/audit/services/operation-description.service.d.ts +59 -0
  53. package/audit/services/operation-description.service.js +76 -2
  54. package/audit/services/transaction-audit.service.d.ts +30 -0
  55. package/audit/services/transaction-audit.service.js +47 -0
  56. package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
  57. package/audit/subscribers/entity-audit.subscriber.js +29 -1
  58. package/cache/cache-metrics.service.d.ts +67 -0
  59. package/cache/cache-metrics.service.js +68 -4
  60. package/cache/cache-serialization.service.d.ts +31 -0
  61. package/cache/cache-serialization.service.js +25 -0
  62. package/cache/cache.constants.d.ts +9 -0
  63. package/cache/cache.constants.js +9 -0
  64. package/cache/cache.health.d.ts +26 -0
  65. package/cache/cache.health.js +30 -0
  66. package/cache/cache.module.d.ts +86 -0
  67. package/cache/cache.module.js +71 -0
  68. package/cache/cache.service.d.ts +140 -0
  69. package/cache/cache.service.js +157 -0
  70. package/cache/cache.warmup.service.d.ts +39 -0
  71. package/cache/cache.warmup.service.js +32 -0
  72. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  73. package/cache/decorators/cache-evict.decorator.js +56 -0
  74. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  75. package/cache/decorators/cache-put.decorator.js +39 -0
  76. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  77. package/cache/decorators/cacheable.decorator.js +55 -0
  78. package/cache/dependencies/callback.dependency.d.ts +33 -0
  79. package/cache/dependencies/callback.dependency.js +39 -1
  80. package/cache/dependencies/chain.dependency.d.ts +28 -0
  81. package/cache/dependencies/chain.dependency.js +34 -0
  82. package/cache/dependencies/db.dependency.d.ts +45 -0
  83. package/cache/dependencies/db.dependency.js +48 -1
  84. package/cache/dependencies/file.dependency.d.ts +32 -0
  85. package/cache/dependencies/file.dependency.js +34 -0
  86. package/cache/dependencies/tag.dependency.d.ts +36 -0
  87. package/cache/dependencies/tag.dependency.js +36 -0
  88. package/cache/dependencies/time.dependency.d.ts +43 -0
  89. package/cache/dependencies/time.dependency.js +43 -0
  90. package/cache/examples/basic-usage.d.ts +15 -0
  91. package/cache/examples/basic-usage.js +62 -8
  92. package/cache/index.js +9 -0
  93. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  94. package/cache/interfaces/cache-options.interface.d.ts +81 -0
  95. package/cache/interfaces/cache-options.interface.js +6 -0
  96. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  97. package/cache/providers/base-cache.provider.d.ts +14 -0
  98. package/cache/providers/base-cache.provider.js +16 -0
  99. package/cache/providers/cls-cache.provider.d.ts +20 -0
  100. package/cache/providers/cls-cache.provider.js +28 -0
  101. package/cache/providers/memory-cache.provider.d.ts +23 -0
  102. package/cache/providers/memory-cache.provider.js +26 -0
  103. package/cache/providers/redis-cache.provider.d.ts +26 -0
  104. package/cache/providers/redis-cache.provider.js +29 -0
  105. package/cache/utils/dependency-manager.util.d.ts +52 -0
  106. package/cache/utils/dependency-manager.util.js +59 -0
  107. package/cache/utils/key-generator.util.d.ts +42 -0
  108. package/cache/utils/key-generator.util.js +53 -1
  109. package/common/abstract.entity.d.ts +14 -0
  110. package/common/abstract.entity.js +14 -0
  111. package/common/boilerplate.polyfill.d.ts +142 -4
  112. package/common/boilerplate.polyfill.js +24 -100
  113. package/common/dto/dto-container.d.ts +16 -0
  114. package/common/dto/dto-container.js +20 -0
  115. package/common/dto/dto-decorators.d.ts +18 -0
  116. package/common/dto/dto-decorators.js +14 -0
  117. package/common/dto/dto-extensions.d.ts +11 -0
  118. package/common/dto/dto-extensions.js +9 -0
  119. package/common/dto/dto-service-accessor.d.ts +17 -0
  120. package/common/dto/dto-service-accessor.js +18 -0
  121. package/common/dto/dto-transformer.d.ts +12 -0
  122. package/common/dto/dto-transformer.js +9 -0
  123. package/common/dto/index.js +2 -0
  124. package/common/examples/paginate-and-map.example.d.ts +6 -0
  125. package/common/examples/paginate-and-map.example.js +26 -0
  126. package/common/utils.d.ts +15 -0
  127. package/common/utils.js +15 -0
  128. package/constants/language-code.js +1 -0
  129. package/decorators/field.decorators.js +8 -1
  130. package/decorators/property.decorators.js +1 -0
  131. package/decorators/public-route.decorator.js +1 -0
  132. package/decorators/transform.decorators.d.ts +27 -0
  133. package/decorators/transform.decorators.js +29 -0
  134. package/decorators/translate.decorator.js +1 -0
  135. package/decorators/user.decorator.js +1 -0
  136. package/decorators/validator.decorators.d.ts +8 -18
  137. package/decorators/validator.decorators.js +22 -190
  138. package/filters/constraint-errors.js +1 -0
  139. package/helpers/common.helper.d.ts +13 -0
  140. package/helpers/common.helper.js +13 -0
  141. package/http-client/config/http-client.config.d.ts +15 -0
  142. package/http-client/config/http-client.config.js +25 -9
  143. package/http-client/decorators/http-client.decorators.d.ts +63 -0
  144. package/http-client/decorators/http-client.decorators.js +71 -3
  145. package/http-client/entities/http-log.entity.d.ts +229 -0
  146. package/http-client/entities/http-log.entity.js +6 -1
  147. package/http-client/errors/http-client.errors.d.ts +57 -0
  148. package/http-client/errors/http-client.errors.js +58 -0
  149. package/http-client/examples/advanced-usage.example.d.ts +41 -0
  150. package/http-client/examples/advanced-usage.example.js +68 -24
  151. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  152. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  153. package/http-client/examples/basic-usage.example.d.ts +60 -0
  154. package/http-client/examples/basic-usage.example.js +60 -0
  155. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  156. package/http-client/examples/multi-api-configuration.example.js +76 -5
  157. package/http-client/http-client.module.d.ts +13 -0
  158. package/http-client/http-client.module.js +20 -5
  159. package/http-client/index.js +8 -0
  160. package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
  161. package/http-client/interfaces/api-client-config.interface.js +3 -0
  162. package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
  163. package/http-client/services/api-client-registry.service.d.ts +57 -0
  164. package/http-client/services/api-client-registry.service.js +84 -1
  165. package/http-client/services/cache.service.d.ts +52 -0
  166. package/http-client/services/cache.service.js +72 -3
  167. package/http-client/services/circuit-breaker.service.d.ts +46 -0
  168. package/http-client/services/circuit-breaker.service.js +52 -0
  169. package/http-client/services/http-client.service.d.ts +67 -0
  170. package/http-client/services/http-client.service.js +105 -4
  171. package/http-client/services/http-log-query.service.d.ts +83 -0
  172. package/http-client/services/http-log-query.service.js +122 -1
  173. package/http-client/services/http-replay.service.d.ts +101 -0
  174. package/http-client/services/http-replay.service.js +86 -0
  175. package/http-client/services/log-cleanup.service.d.ts +63 -0
  176. package/http-client/services/log-cleanup.service.js +54 -2
  177. package/http-client/services/logging.service.d.ts +40 -0
  178. package/http-client/services/logging.service.js +53 -0
  179. package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
  180. package/http-client/utils/call-stack-extractor.util.js +48 -0
  181. package/http-client/utils/context-extractor.util.d.ts +49 -0
  182. package/http-client/utils/context-extractor.util.js +52 -0
  183. package/http-client/utils/curl-generator.util.d.ts +21 -0
  184. package/http-client/utils/curl-generator.util.js +44 -3
  185. package/http-client/utils/request-id.util.d.ts +18 -0
  186. package/http-client/utils/request-id.util.js +20 -0
  187. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  188. package/http-client/utils/retry-recorder.util.js +44 -0
  189. package/i18n/en_US/validation.json +2 -1
  190. package/i18n/zh_CN/validation.json +2 -1
  191. package/index.js +8 -0
  192. package/interceptors/translation-interceptor.service.js +5 -0
  193. package/package.json +1 -1
  194. package/providers/context.provider.js +2 -0
  195. package/providers/generator.provider.d.ts +4 -0
  196. package/providers/generator.provider.js +4 -0
  197. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  198. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  199. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  200. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  201. package/redis-lock/index.d.ts +2 -0
  202. package/redis-lock/index.js +8 -1
  203. package/redis-lock/lock-heartbeat.service.d.ts +78 -0
  204. package/redis-lock/lock-heartbeat.service.js +222 -0
  205. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  206. package/redis-lock/redis-lock.decorator.js +120 -0
  207. package/redis-lock/redis-lock.module.d.ts +66 -0
  208. package/redis-lock/redis-lock.module.js +175 -70
  209. package/redis-lock/redis-lock.service.d.ts +278 -0
  210. package/redis-lock/redis-lock.service.js +282 -12
  211. package/setup/bootstrap.setup.js +20 -0
  212. package/setup/mode.setup.d.ts +44 -0
  213. package/setup/mode.setup.js +44 -0
  214. package/setup/schedule.decorator.d.ts +227 -0
  215. package/setup/schedule.decorator.js +235 -12
  216. package/setup/worker.decorator.d.ts +86 -0
  217. package/setup/worker.decorator.js +88 -0
  218. package/shared/serviceRegistryModule.js +27 -14
  219. package/shared/services/api-config.service.d.ts +3 -0
  220. package/shared/services/api-config.service.js +20 -9
  221. package/validator-json/decorators.d.ts +17 -0
  222. package/validator-json/decorators.js +17 -2
  223. package/validator-json/default.d.ts +6 -0
  224. package/validator-json/default.js +30 -2
  225. package/validator-json/defaultConverters.js +1 -0
  226. package/validator-json/options.d.ts +23 -0
  227. package/validators/common-validators.d.ts +143 -0
  228. package/validators/common-validators.js +249 -0
  229. package/validators/custom-validate.examples.d.ts +96 -0
  230. package/validators/custom-validate.examples.js +400 -0
  231. package/validators/custom-validate.validator.d.ts +134 -0
  232. package/validators/custom-validate.validator.js +214 -0
  233. package/validators/index.d.ts +2 -0
  234. package/validators/index.js +2 -0
  235. package/validators/is-exists.validator.d.ts +18 -4
  236. package/validators/is-exists.validator.js +67 -6
  237. package/validators/is-unique.validator.d.ts +32 -5
  238. package/validators/is-unique.validator.js +99 -17
  239. package/validators/skip-empty.validator.d.ts +5 -0
  240. package/validators/skip-empty.validator.js +5 -0
  241. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  242. package/vault/vault-config.loader.d.ts +30 -0
  243. package/vault/vault-config.loader.js +48 -1
  244. package/vault/vault-config.service.d.ts +53 -0
  245. package/vault/vault-config.service.js +57 -0
  246. package/vault/vault.module.d.ts +4 -0
  247. package/vault/vault.module.js +4 -0
  248. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  249. package/decorators/examples/validation-decorators.example.js +0 -331
@@ -1,7 +1,17 @@
1
1
  import { DynamicModule } from '@nestjs/common';
2
2
  import { AuditConfig } from './interfaces';
3
+ /**
4
+ * 审计模块
5
+ */
3
6
  export declare class AuditModule {
7
+ /**
8
+ * 注册审计模块
9
+ * @param config 审计配置
10
+ */
4
11
  static forRoot(config?: AuditConfig): DynamicModule;
12
+ /**
13
+ * 注册审计模块(异步)
14
+ */
5
15
  static forRootAsync(options: {
6
16
  imports?: any[];
7
17
  inject?: any[];
@@ -25,11 +25,19 @@ const services_1 = require("./services");
25
25
  const subscribers_1 = require("./subscribers");
26
26
  const interceptors_1 = require("./interceptors");
27
27
  const controllers_1 = require("./controllers");
28
+ /**
29
+ * 审计模块
30
+ */
28
31
  let AuditModule = AuditModule_1 = class AuditModule {
32
+ /**
33
+ * 注册审计模块
34
+ * @param config 审计配置
35
+ */
29
36
  static forRoot(config) {
30
37
  var _a, _b;
31
38
  const auditConnectionName = ((_a = config === null || config === void 0 ? void 0 : config.connections) === null || _a === void 0 ? void 0 : _a.audit) || 'default';
32
39
  const monitoredConnections = ((_b = config === null || config === void 0 ? void 0 : config.connections) === null || _b === void 0 ? void 0 : _b.monitored) || ['default'];
40
+ // 创建多个订阅者提供者,每个监听的数据库连接一个
33
41
  const subscriberProviders = monitoredConnections.map((connectionName) => ({
34
42
  provide: `AUDIT_SUBSCRIBER_${connectionName}`,
35
43
  useFactory: (auditService, contextService, auditStrategy, dataSource) => {
@@ -43,6 +51,7 @@ let AuditModule = AuditModule_1 = class AuditModule {
43
51
  (0, typeorm_1.getDataSourceToken)(connectionName),
44
52
  ],
45
53
  }));
54
+ // 创建repository别名提供者,使service能够注入正确连接的repository
46
55
  const repositoryProviders = [
47
56
  {
48
57
  provide: (0, typeorm_1.getRepositoryToken)(entities_1.EntityAuditLogEntity),
@@ -58,6 +67,20 @@ let AuditModule = AuditModule_1 = class AuditModule {
58
67
  },
59
68
  inject: [(0, typeorm_1.getDataSourceToken)(auditConnectionName)],
60
69
  },
70
+ {
71
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.OperationTemplateEntity),
72
+ useFactory: (dataSource) => {
73
+ return dataSource.getRepository(entities_1.OperationTemplateEntity);
74
+ },
75
+ inject: [(0, typeorm_1.getDataSourceToken)(auditConnectionName)],
76
+ },
77
+ {
78
+ provide: (0, typeorm_1.getRepositoryToken)(entities_1.ManualOperationLogEntity),
79
+ useFactory: (dataSource) => {
80
+ return dataSource.getRepository(entities_1.ManualOperationLogEntity);
81
+ },
82
+ inject: [(0, typeorm_1.getDataSourceToken)(auditConnectionName)],
83
+ },
61
84
  {
62
85
  provide: 'AUDIT_ENTITY_MANAGER',
63
86
  useFactory: (dataSource) => {
@@ -69,7 +92,13 @@ let AuditModule = AuditModule_1 = class AuditModule {
69
92
  return {
70
93
  module: AuditModule_1,
71
94
  imports: [
72
- typeorm_1.TypeOrmModule.forFeature([entities_1.EntityAuditLogEntity, entities_1.EntityTransactionEntity], auditConnectionName),
95
+ // ��计日志存储到指定的数据库连接
96
+ typeorm_1.TypeOrmModule.forFeature([
97
+ entities_1.EntityAuditLogEntity,
98
+ entities_1.EntityTransactionEntity,
99
+ entities_1.OperationTemplateEntity,
100
+ entities_1.ManualOperationLogEntity,
101
+ ], auditConnectionName),
73
102
  nestjs_cls_1.ClsModule.forRoot({
74
103
  global: true,
75
104
  middleware: { mount: true },
@@ -95,6 +124,7 @@ let AuditModule = AuditModule_1 = class AuditModule {
95
124
  ...repositoryProviders,
96
125
  services_1.EntityAuditService,
97
126
  services_1.TransactionAuditService,
127
+ services_1.OperationDescriptionService,
98
128
  interceptors_1.AuditInterceptor,
99
129
  ...subscriberProviders,
100
130
  ],
@@ -104,11 +134,16 @@ let AuditModule = AuditModule_1 = class AuditModule {
104
134
  services_1.MultiDatabaseService,
105
135
  services_1.EntityAuditService,
106
136
  services_1.TransactionAuditService,
137
+ services_1.OperationDescriptionService,
107
138
  interceptors_1.AuditInterceptor,
108
139
  ],
109
140
  };
110
141
  }
142
+ /**
143
+ * 注册审计模块(异步)
144
+ */
111
145
  static forRootAsync(options) {
146
+ // 创建repository别名提供者,使service能够注入正确连接的repository
112
147
  const repositoryProviders = [
113
148
  {
114
149
  provide: (0, typeorm_1.getRepositoryToken)(entities_1.EntityAuditLogEntity),
@@ -195,6 +230,7 @@ let AuditModule = AuditModule_1 = class AuditModule {
195
230
  const config = yield options.useFactory(...args);
196
231
  const monitoredConnections = ((_a = config === null || config === void 0 ? void 0 : config.connections) === null || _a === void 0 ? void 0 : _a.monitored) || ['default'];
197
232
  const auditConnectionName = ((_b = config === null || config === void 0 ? void 0 : config.connections) === null || _b === void 0 ? void 0 : _b.audit) || 'default';
233
+ // 动态注册 TypeORM 实体
198
234
  const typeOrmModule = typeorm_1.TypeOrmModule.forFeature([entities_1.EntityAuditLogEntity, entities_1.EntityTransactionEntity], auditConnectionName);
199
235
  return monitoredConnections;
200
236
  }),
@@ -211,6 +247,7 @@ let AuditModule = AuditModule_1 = class AuditModule {
211
247
  ...repositoryProviders,
212
248
  services_1.EntityAuditService,
213
249
  services_1.TransactionAuditService,
250
+ services_1.OperationDescriptionService,
214
251
  interceptors_1.AuditInterceptor,
215
252
  ],
216
253
  exports: [
@@ -219,6 +256,7 @@ let AuditModule = AuditModule_1 = class AuditModule {
219
256
  services_1.MultiDatabaseService,
220
257
  services_1.EntityAuditService,
221
258
  services_1.TransactionAuditService,
259
+ services_1.OperationDescriptionService,
222
260
  interceptors_1.AuditInterceptor,
223
261
  ],
224
262
  };
@@ -4,17 +4,41 @@ import { AuditLogQueryDto, CompareEntitiesDto, RestoreEntityDto, PreCheckRestore
4
4
  import { EntityAuditLogEntity } from '../entities';
5
5
  import { EntityDifference, PreCheckResult, RestoreResult } from '../interfaces';
6
6
  import { PageDto } from '../../common/dto';
7
+ /**
8
+ * 审计控制器
9
+ */
7
10
  export declare class AuditController {
8
11
  private readonly entityAuditService;
9
12
  private readonly transactionAuditService;
10
13
  constructor(entityAuditService: EntityAuditService, transactionAuditService: TransactionAuditService);
14
+ /**
15
+ * 查询实体审计日志
16
+ */
11
17
  getAuditLogs(query: AuditLogQueryDto): Promise<PageDto<EntityAuditLogEntity>>;
18
+ /**
19
+ * 比较实体版本
20
+ */
12
21
  compareEntities(query: CompareEntitiesDto): Promise<EntityDifference>;
22
+ /**
23
+ * 预检查恢复操作
24
+ */
13
25
  preCheckRestore(preCheckDto: PreCheckRestoreDto): Promise<PreCheckResult>;
26
+ /**
27
+ * 恢复实体到指定版本
28
+ */
14
29
  restoreEntity(restoreDto: RestoreEntityDto): Promise<RestoreResult>;
30
+ /**
31
+ * 开始审计事务
32
+ */
15
33
  beginTransaction(beginTransactionDto: BeginTransactionDto): Promise<{
16
34
  transactionId: string;
17
35
  }>;
36
+ /**
37
+ * 提交审计事务
38
+ */
18
39
  commitTransaction(transactionId: string): Promise<void>;
40
+ /**
41
+ * 回滚审计事务
42
+ */
19
43
  rollbackTransaction(transactionId: string): Promise<void>;
20
44
  }
@@ -27,43 +27,67 @@ const swagger_1 = require("@nestjs/swagger");
27
27
  const entity_audit_service_1 = require("../services/entity-audit.service");
28
28
  const transaction_audit_service_1 = require("../services/transaction-audit.service");
29
29
  const dto_1 = require("../dto");
30
+ /**
31
+ * 审计控制器
32
+ */
30
33
  let AuditController = class AuditController {
31
34
  constructor(entityAuditService, transactionAuditService) {
32
35
  this.entityAuditService = entityAuditService;
33
36
  this.transactionAuditService = transactionAuditService;
34
37
  }
38
+ /**
39
+ * 查询实体审计日志
40
+ */
35
41
  getAuditLogs(query) {
36
42
  return __awaiter(this, void 0, void 0, function* () {
37
43
  return this.entityAuditService.getAuditLogs(query);
38
44
  });
39
45
  }
46
+ /**
47
+ * 比较实体版本
48
+ */
40
49
  compareEntities(query) {
41
50
  return __awaiter(this, void 0, void 0, function* () {
42
51
  var _a, _b;
43
52
  return this.entityAuditService.compareEntities(query.entityType, query.entityId, (_a = query.fromVersion) === null || _a === void 0 ? void 0 : _a.toString(), (_b = query.toVersion) === null || _b === void 0 ? void 0 : _b.toString());
44
53
  });
45
54
  }
55
+ /**
56
+ * 预检查恢复操作
57
+ */
46
58
  preCheckRestore(preCheckDto) {
47
59
  return __awaiter(this, void 0, void 0, function* () {
48
60
  return this.entityAuditService.preCheckRestore(preCheckDto.entityType, preCheckDto.entityId, preCheckDto.auditLogId);
49
61
  });
50
62
  }
63
+ /**
64
+ * 恢复实体到指定版本
65
+ */
51
66
  restoreEntity(restoreDto) {
52
67
  return __awaiter(this, void 0, void 0, function* () {
53
68
  return this.entityAuditService.restoreEntity(restoreDto.entityType, restoreDto.entityId, restoreDto.auditLogId, restoreDto.options);
54
69
  });
55
70
  }
71
+ /**
72
+ * 开始审计事务
73
+ */
56
74
  beginTransaction(beginTransactionDto) {
57
75
  return __awaiter(this, void 0, void 0, function* () {
58
76
  const transactionId = yield this.transactionAuditService.beginTransaction(beginTransactionDto.description);
59
77
  return { transactionId };
60
78
  });
61
79
  }
80
+ /**
81
+ * 提交审计事务
82
+ */
62
83
  commitTransaction(transactionId) {
63
84
  return __awaiter(this, void 0, void 0, function* () {
64
85
  return this.transactionAuditService.commitTransaction(transactionId);
65
86
  });
66
87
  }
88
+ /**
89
+ * 回滚审计事务
90
+ */
67
91
  rollbackTransaction(transactionId) {
68
92
  return __awaiter(this, void 0, void 0, function* () {
69
93
  return this.transactionAuditService.rollbackTransaction(transactionId);
@@ -1,5 +1,13 @@
1
1
  import { ControllerAuditOptions, MethodAuditOptions } from '../interfaces';
2
2
  export declare const CONTROLLER_AUDIT_OPTIONS: unique symbol;
3
3
  export declare const METHOD_AUDIT_OPTIONS: unique symbol;
4
- export declare function EntityAuditController(options?: ControllerAuditOptions): ClassDecorator;
4
+ /**
5
+ * 控制器审计装饰器
6
+ * @param options 控制器审计选项
7
+ */
8
+ export declare function AuditController(options?: ControllerAuditOptions): ClassDecorator;
9
+ /**
10
+ * 方法审计装饰器
11
+ * @param options 方法审计选项
12
+ */
5
13
  export declare function AuditMethod(options?: MethodAuditOptions): MethodDecorator;
@@ -1,15 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.METHOD_AUDIT_OPTIONS = exports.CONTROLLER_AUDIT_OPTIONS = void 0;
4
- exports.EntityAuditController = EntityAuditController;
4
+ exports.AuditController = AuditController;
5
5
  exports.AuditMethod = AuditMethod;
6
+ // 元数据键
6
7
  exports.CONTROLLER_AUDIT_OPTIONS = Symbol('CONTROLLER_AUDIT_OPTIONS');
7
8
  exports.METHOD_AUDIT_OPTIONS = Symbol('METHOD_AUDIT_OPTIONS');
8
- function EntityAuditController(options) {
9
+ /**
10
+ * 控制器审计装饰器
11
+ * @param options 控制器审计选项
12
+ */
13
+ function AuditController(options) {
9
14
  return (target) => {
10
15
  Reflect.defineMetadata(exports.CONTROLLER_AUDIT_OPTIONS, options || {}, target);
11
16
  };
12
17
  }
18
+ /**
19
+ * 方法审计装饰器
20
+ * @param options 方法审计选项
21
+ */
13
22
  function AuditMethod(options) {
14
23
  return (target, propertyKey, descriptor) => {
15
24
  Reflect.defineMetadata(exports.METHOD_AUDIT_OPTIONS, options || {}, descriptor.value);
@@ -1,5 +1,50 @@
1
1
  import { AuditOperationOptions } from '../interfaces';
2
2
  export declare const AUDIT_OPERATION_OPTIONS: unique symbol;
3
+ /**
4
+ * 方法审计装饰器
5
+ *
6
+ * @description
7
+ * 用于手动记录业务操作的审计日志,支持:
8
+ * - 自定义操作模板
9
+ * - 动态描述参数
10
+ * - 回滚操作定义
11
+ * - 自动事务管理
12
+ *
13
+ * @param options 审计操作选项
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * @AuditLog({
18
+ * templateKey: 'user.approve',
19
+ * descriptionParams: (args, result) => ({
20
+ * username: args[0].username,
21
+ * approver: result.approver
22
+ * }),
23
+ * rollbackActions: (args, result) => [{
24
+ * type: RollbackActionType.UPDATE,
25
+ * action: 'reject',
26
+ * params: { userId: args[0].id },
27
+ * order: 1
28
+ * }],
29
+ * autoTransaction: true
30
+ * })
31
+ * async approveUser(user: User): Promise<ApprovalResult> {
32
+ * // 业务逻辑
33
+ * }
34
+ * ```
35
+ */
3
36
  export declare function AuditLog(options: AuditOperationOptions): MethodDecorator;
37
+ /**
38
+ * 获取方法的审计配置
39
+ * @param target 目标类或实例
40
+ * @param propertyKey 方法名
41
+ * @returns 审计操作选项
42
+ */
4
43
  export declare function getAuditOperationConfig(target: any, propertyKey: string | symbol): AuditOperationOptions | undefined;
44
+ /**
45
+ * 检查方法是否配置了审计
46
+ * @param target 目标类或实例
47
+ * @param propertyKey 方法名
48
+ * @returns 是否配置了审计
49
+ */
5
50
  export declare function hasAuditOperation(target: any, propertyKey: string | symbol): boolean;
@@ -4,20 +4,69 @@ exports.AUDIT_OPERATION_OPTIONS = void 0;
4
4
  exports.AuditLog = AuditLog;
5
5
  exports.getAuditOperationConfig = getAuditOperationConfig;
6
6
  exports.hasAuditOperation = hasAuditOperation;
7
+ // 元数据键
7
8
  exports.AUDIT_OPERATION_OPTIONS = Symbol('AUDIT_OPERATION_OPTIONS');
9
+ /**
10
+ * 方法审计装饰器
11
+ *
12
+ * @description
13
+ * 用于手动记录业务操作的审计日志,支持:
14
+ * - 自定义操作模板
15
+ * - 动态描述参数
16
+ * - 回滚操作定义
17
+ * - 自动事务管理
18
+ *
19
+ * @param options 审计操作选项
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * @AuditLog({
24
+ * templateKey: 'user.approve',
25
+ * descriptionParams: (args, result) => ({
26
+ * username: args[0].username,
27
+ * approver: result.approver
28
+ * }),
29
+ * rollbackActions: (args, result) => [{
30
+ * type: RollbackActionType.UPDATE,
31
+ * action: 'reject',
32
+ * params: { userId: args[0].id },
33
+ * order: 1
34
+ * }],
35
+ * autoTransaction: true
36
+ * })
37
+ * async approveUser(user: User): Promise<ApprovalResult> {
38
+ * // 业务逻辑
39
+ * }
40
+ * ```
41
+ */
8
42
  function AuditLog(options) {
9
43
  return (target, propertyKey, descriptor) => {
44
+ // 验证必需参数
10
45
  if (!options.templateKey) {
11
46
  throw new Error(`@AuditLog requires templateKey for method ${String(propertyKey)}`);
12
47
  }
48
+ // 存储元数据
13
49
  const methodMetadata = Object.assign(Object.assign({}, options), { methodName: String(propertyKey) });
14
50
  Reflect.defineMetadata(exports.AUDIT_OPERATION_OPTIONS, methodMetadata, target, propertyKey);
51
+ // 返回原始描述符,实际的拦截逻辑由 AuditInterceptor 处理
15
52
  return descriptor;
16
53
  };
17
54
  }
55
+ /**
56
+ * 获取方法的审计配置
57
+ * @param target 目标类或实例
58
+ * @param propertyKey 方法名
59
+ * @returns 审计操作选项
60
+ */
18
61
  function getAuditOperationConfig(target, propertyKey) {
19
62
  return Reflect.getMetadata(exports.AUDIT_OPERATION_OPTIONS, target, propertyKey);
20
63
  }
64
+ /**
65
+ * 检查方法是否配置了审计
66
+ * @param target 目标类或实例
67
+ * @param propertyKey 方法名
68
+ * @returns 是否配置了审计
69
+ */
21
70
  function hasAuditOperation(target, propertyKey) {
22
71
  return Reflect.hasMetadata(exports.AUDIT_OPERATION_OPTIONS, target, propertyKey);
23
72
  }
@@ -1,5 +1,80 @@
1
1
  import { EntityAuditConfig, FieldDisplayOptions } from '../interfaces';
2
2
  export declare const ENTITY_AUDIT_OPTIONS: unique symbol;
3
3
  export declare const FIELD_AUDIT_OPTIONS: unique symbol;
4
- export declare function EntityAudit(options?: EntityAuditConfig): ClassDecorator;
4
+ /**
5
+ * 实体审计装饰器
6
+ *
7
+ * @description
8
+ * 支持基础审计配置。
9
+ * 字段标签和值标签请使用 @AuditField({ label: { zh: '姓名', en: 'Name' } })
10
+ *
11
+ * @param options 审计配置选项
12
+ *
13
+ * @example
14
+ * // 基础用法
15
+ * @AuditEntity({
16
+ * enabled: true,
17
+ * excludeFields: ['password'],
18
+ * maskFields: ['email']
19
+ * })
20
+ *
21
+ * @example
22
+ * // 指定模板键
23
+ * @AuditEntity({
24
+ * enabled: true,
25
+ * templateKey: 'user',
26
+ * })
27
+ */
28
+ export declare function AuditEntity(options?: EntityAuditConfig): ClassDecorator;
29
+ /**
30
+ * 字段审计装饰器
31
+ * @param options 字段显示选项(支持多语言 label 和 valueLabels)
32
+ *
33
+ * @example
34
+ * // 单语言
35
+ * @AuditField({ label: '姓名' })
36
+ *
37
+ * @example
38
+ * // 多语言
39
+ * @AuditField({ label: { zh: '姓名', en: 'Name' } })
40
+ *
41
+ * @example
42
+ * // 带值标签映射
43
+ * @AuditField({
44
+ * label: { zh: '状态', en: 'Status' },
45
+ * valueLabels: {
46
+ * active: { zh: '激活', en: 'Active' },
47
+ * inactive: { zh: '未激活', en: 'Inactive' }
48
+ * }
49
+ * })
50
+ */
5
51
  export declare function AuditField(options?: FieldDisplayOptions): PropertyDecorator;
52
+ /**
53
+ * 获取实体审计配置
54
+ * @param target 目标类
55
+ * @returns 审计配置
56
+ */
57
+ export declare function getEntityAuditConfig(target: any): EntityAuditConfig;
58
+ /**
59
+ * 获取字段审计配置
60
+ * @param target 目标类
61
+ * @returns 字段配置映射
62
+ */
63
+ export declare function getFieldAuditConfig(target: any): Record<string, FieldDisplayOptions>;
64
+ /**
65
+ * 获取字段的标签(支持多语言)
66
+ * @param target 目标类
67
+ * @param fieldName 字段名
68
+ * @param language 语言代码(默认:zh)
69
+ * @returns 字段标签
70
+ */
71
+ export declare function getFieldLabel(target: any, fieldName: string, language?: string): string;
72
+ /**
73
+ * 获取字段值的标签(支持多语言)
74
+ * @param target 目标类
75
+ * @param fieldName 字段名
76
+ * @param value 值
77
+ * @param language 语言代码(默认:zh)
78
+ * @returns 值的标签
79
+ */
80
+ export declare function getFieldValueLabel(target: any, fieldName: string, value: any, language?: string): string;
@@ -1,15 +1,87 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FIELD_AUDIT_OPTIONS = exports.ENTITY_AUDIT_OPTIONS = void 0;
4
- exports.EntityAudit = EntityAudit;
4
+ exports.AuditEntity = AuditEntity;
5
5
  exports.AuditField = AuditField;
6
+ exports.getEntityAuditConfig = getEntityAuditConfig;
7
+ exports.getFieldAuditConfig = getFieldAuditConfig;
8
+ exports.getFieldLabel = getFieldLabel;
9
+ exports.getFieldValueLabel = getFieldValueLabel;
10
+ // 元数据键
6
11
  exports.ENTITY_AUDIT_OPTIONS = Symbol('ENTITY_AUDIT_OPTIONS');
7
12
  exports.FIELD_AUDIT_OPTIONS = Symbol('FIELD_AUDIT_OPTIONS');
8
- function EntityAudit(options) {
13
+ /**
14
+ * 实体审计装饰器
15
+ *
16
+ * @description
17
+ * 支持基础审计配置。
18
+ * 字段标签和值标签请使用 @AuditField({ label: { zh: '姓名', en: 'Name' } })
19
+ *
20
+ * @param options 审计配置选项
21
+ *
22
+ * @example
23
+ * // 基础用法
24
+ * @AuditEntity({
25
+ * enabled: true,
26
+ * excludeFields: ['password'],
27
+ * maskFields: ['email']
28
+ * })
29
+ *
30
+ * @example
31
+ * // 指定模板键
32
+ * @AuditEntity({
33
+ * enabled: true,
34
+ * templateKey: 'user',
35
+ * })
36
+ */
37
+ function AuditEntity(options) {
9
38
  return (target) => {
10
- Reflect.defineMetadata(exports.ENTITY_AUDIT_OPTIONS, options || {}, target);
39
+ // 处理兼容性:sensitiveFields 别名
40
+ const mergedOptions = Object.assign(Object.assign({}, options), {
41
+ // 合并 sensitiveFields 到 maskFields
42
+ maskFields: [
43
+ ...((options === null || options === void 0 ? void 0 : options.maskFields) || []),
44
+ ...((options === null || options === void 0 ? void 0 : options.sensitiveFields) || []),
45
+ ] });
46
+ // 去重
47
+ if (mergedOptions.maskFields && mergedOptions.maskFields.length > 0) {
48
+ mergedOptions.maskFields = [...new Set(mergedOptions.maskFields)];
49
+ }
50
+ // 存储基础审计元数据
51
+ Reflect.defineMetadata(exports.ENTITY_AUDIT_OPTIONS, mergedOptions, target);
52
+ // 如果有 templateKey,同时存储到 entity-log 元数据(兼容性)
53
+ if (mergedOptions.templateKey) {
54
+ Reflect.defineMetadata('entity-log:enabled', true, target);
55
+ Reflect.defineMetadata('entity-log:options', {
56
+ templateKey: mergedOptions.templateKey,
57
+ excludeFields: mergedOptions.excludeFields,
58
+ sensitiveFields: mergedOptions.maskFields,
59
+ }, target);
60
+ }
11
61
  };
12
62
  }
63
+ /**
64
+ * 字段审计装饰器
65
+ * @param options 字段显示选项(支持多语言 label 和 valueLabels)
66
+ *
67
+ * @example
68
+ * // 单语言
69
+ * @AuditField({ label: '姓名' })
70
+ *
71
+ * @example
72
+ * // 多语言
73
+ * @AuditField({ label: { zh: '姓名', en: 'Name' } })
74
+ *
75
+ * @example
76
+ * // 带值标签映射
77
+ * @AuditField({
78
+ * label: { zh: '状态', en: 'Status' },
79
+ * valueLabels: {
80
+ * active: { zh: '激活', en: 'Active' },
81
+ * inactive: { zh: '未激活', en: 'Inactive' }
82
+ * }
83
+ * })
84
+ */
13
85
  function AuditField(options) {
14
86
  return (target, propertyKey) => {
15
87
  const existingOptions = Reflect.getMetadata(exports.FIELD_AUDIT_OPTIONS, target.constructor) || {};
@@ -17,3 +89,63 @@ function AuditField(options) {
17
89
  Reflect.defineMetadata(exports.FIELD_AUDIT_OPTIONS, existingOptions, target.constructor);
18
90
  };
19
91
  }
92
+ /**
93
+ * 获取实体审计配置
94
+ * @param target 目标类
95
+ * @returns 审计配置
96
+ */
97
+ function getEntityAuditConfig(target) {
98
+ return Reflect.getMetadata(exports.ENTITY_AUDIT_OPTIONS, target) || {};
99
+ }
100
+ /**
101
+ * 获取字段审计配置
102
+ * @param target 目标类
103
+ * @returns 字段配置映射
104
+ */
105
+ function getFieldAuditConfig(target) {
106
+ return Reflect.getMetadata(exports.FIELD_AUDIT_OPTIONS, target) || {};
107
+ }
108
+ /**
109
+ * 获取字段的标签(支持多语言)
110
+ * @param target 目标类
111
+ * @param fieldName 字段名
112
+ * @param language 语言代码(默认:zh)
113
+ * @returns 字段标签
114
+ */
115
+ function getFieldLabel(target, fieldName, language = 'zh') {
116
+ var _a;
117
+ const fieldConfig = getFieldAuditConfig(target);
118
+ const label = (_a = fieldConfig[fieldName]) === null || _a === void 0 ? void 0 : _a.label;
119
+ if (!label) {
120
+ return fieldName;
121
+ }
122
+ // 如果是字符串,直接返回
123
+ if (typeof label === 'string') {
124
+ return label;
125
+ }
126
+ // 如果是对象,返回指定语言的值
127
+ return label[language] || label['zh'] || fieldName;
128
+ }
129
+ /**
130
+ * 获取字段值的标签(支持多语言)
131
+ * @param target 目标类
132
+ * @param fieldName 字段名
133
+ * @param value 值
134
+ * @param language 语言代码(默认:zh)
135
+ * @returns 值的标签
136
+ */
137
+ function getFieldValueLabel(target, fieldName, value, language = 'zh') {
138
+ var _a;
139
+ const fieldConfig = getFieldAuditConfig(target);
140
+ const valueLabels = (_a = fieldConfig[fieldName]) === null || _a === void 0 ? void 0 : _a.valueLabels;
141
+ if (!valueLabels || !valueLabels[value]) {
142
+ return value;
143
+ }
144
+ const labelMap = valueLabels[value];
145
+ // 如果是字符串,直接返回
146
+ if (typeof labelMap === 'string') {
147
+ return labelMap;
148
+ }
149
+ // 如果是对象,返回指定语言的值
150
+ return labelMap[language] || labelMap['zh'] || value;
151
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './entity-audit.decorator';
2
2
  export * from './audit-controller.decorator';
3
+ export * from './audit-operation.decorator';
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./entity-audit.decorator"), exports);
18
18
  __exportStar(require("./audit-controller.decorator"), exports);
19
+ __exportStar(require("./audit-operation.decorator"), exports);
@@ -1,4 +1,7 @@
1
1
  import { AuditOperation } from '../enums';
2
+ /**
3
+ * 审计日志查询DTO
4
+ */
2
5
  export declare class AuditLogQueryDto {
3
6
  page?: number;
4
7
  limit?: number;
@@ -14,6 +14,9 @@ const swagger_1 = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const class_transformer_1 = require("class-transformer");
16
16
  const enums_1 = require("../enums");
17
+ /**
18
+ * 审计日志查询DTO
19
+ */
17
20
  class AuditLogQueryDto {
18
21
  constructor() {
19
22
  this.page = 1;
@@ -1,3 +1,6 @@
1
+ /**
2
+ * 开始事务DTO
3
+ */
1
4
  export declare class BeginTransactionDto {
2
5
  description: string;
3
6
  }