@nest-omni/core 4.1.3-2 → 4.1.3-22

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 (441) hide show
  1. package/audit/audit.module.d.ts +11 -0
  2. package/audit/audit.module.js +65 -1
  3. package/audit/controllers/audit.controller.d.ts +81 -1
  4. package/audit/controllers/audit.controller.js +67 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  8. package/audit/decorators/audit-controller.decorator.js +11 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +38 -0
  10. package/audit/decorators/audit-operation.decorator.js +42 -0
  11. package/audit/decorators/entity-audit.decorator.d.ts +85 -1
  12. package/audit/decorators/entity-audit.decorator.js +153 -3
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-action-query.dto.d.ts +13 -0
  16. package/audit/dto/audit-action-query.dto.js +77 -0
  17. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  18. package/audit/dto/audit-log-query.dto.js +3 -0
  19. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  20. package/audit/dto/begin-transaction.dto.js +3 -0
  21. package/audit/dto/compare-entities.dto.d.ts +3 -0
  22. package/audit/dto/compare-entities.dto.js +3 -0
  23. package/audit/dto/index.d.ts +1 -0
  24. package/audit/dto/index.js +1 -0
  25. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  26. package/audit/dto/pre-check-restore.dto.js +3 -0
  27. package/audit/dto/restore-entity.dto.d.ts +3 -0
  28. package/audit/dto/restore-entity.dto.js +3 -0
  29. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  30. package/audit/entities/audit-action-summary.entity.js +101 -0
  31. package/audit/entities/entity-audit-log.entity.d.ts +10 -2
  32. package/audit/entities/entity-audit-log.entity.js +48 -9
  33. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  34. package/audit/entities/entity-transaction.entity.js +42 -3
  35. package/audit/entities/index.d.ts +3 -0
  36. package/audit/entities/index.js +3 -0
  37. package/audit/entities/manual-operation-log.entity.d.ts +4 -2
  38. package/audit/entities/manual-operation-log.entity.js +12 -9
  39. package/audit/entities/operation-template.entity.d.ts +4 -0
  40. package/audit/entities/operation-template.entity.js +4 -0
  41. package/audit/enums/audit.enums.d.ts +29 -6
  42. package/audit/enums/audit.enums.js +31 -7
  43. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  44. package/audit/examples/decorator-value-mapping.example.js +414 -0
  45. package/audit/index.d.ts +5 -1
  46. package/audit/index.js +38 -1
  47. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  48. package/audit/interceptors/audit-action.interceptor.js +215 -0
  49. package/audit/interceptors/audit.interceptor.d.ts +16 -0
  50. package/audit/interceptors/audit.interceptor.js +41 -11
  51. package/audit/interceptors/index.d.ts +1 -0
  52. package/audit/interceptors/index.js +1 -0
  53. package/audit/interfaces/audit.interfaces.d.ts +174 -4
  54. package/audit/services/audit-action.service.d.ts +141 -0
  55. package/audit/services/audit-action.service.js +244 -0
  56. package/audit/services/audit-context.service.d.ts +106 -0
  57. package/audit/services/audit-context.service.js +185 -0
  58. package/audit/services/audit-strategy.service.d.ts +6 -0
  59. package/audit/services/audit-strategy.service.js +13 -0
  60. package/audit/services/entity-audit.service.d.ts +273 -5
  61. package/audit/services/entity-audit.service.js +840 -60
  62. package/audit/services/index.d.ts +3 -0
  63. package/audit/services/index.js +3 -0
  64. package/audit/services/manual-audit-log.service.d.ts +133 -9
  65. package/audit/services/manual-audit-log.service.js +157 -42
  66. package/audit/services/multi-database.service.d.ts +9 -2
  67. package/audit/services/multi-database.service.js +9 -21
  68. package/audit/services/operation-description.service.d.ts +71 -2
  69. package/audit/services/operation-description.service.js +231 -20
  70. package/audit/services/transaction-audit.service.d.ts +30 -0
  71. package/audit/services/transaction-audit.service.js +53 -5
  72. package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
  73. package/audit/subscribers/entity-audit.subscriber.js +98 -6
  74. package/cache/cache-metrics.service.d.ts +67 -0
  75. package/cache/cache-metrics.service.js +68 -4
  76. package/cache/cache-serialization.service.d.ts +31 -0
  77. package/cache/cache-serialization.service.js +25 -0
  78. package/cache/cache.constants.d.ts +9 -0
  79. package/cache/cache.constants.js +9 -0
  80. package/cache/cache.health.d.ts +26 -0
  81. package/cache/cache.health.js +30 -0
  82. package/cache/cache.module.d.ts +87 -2
  83. package/cache/cache.module.js +84 -11
  84. package/cache/cache.service.d.ts +143 -3
  85. package/cache/cache.service.js +173 -4
  86. package/cache/cache.warmup.service.d.ts +39 -0
  87. package/cache/cache.warmup.service.js +32 -0
  88. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  89. package/cache/decorators/cache-evict.decorator.js +56 -0
  90. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  91. package/cache/decorators/cache-put.decorator.js +39 -0
  92. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  93. package/cache/decorators/cacheable.decorator.js +55 -0
  94. package/cache/dependencies/callback.dependency.d.ts +33 -0
  95. package/cache/dependencies/callback.dependency.js +39 -1
  96. package/cache/dependencies/chain.dependency.d.ts +28 -0
  97. package/cache/dependencies/chain.dependency.js +34 -0
  98. package/cache/dependencies/db.dependency.d.ts +83 -7
  99. package/cache/dependencies/db.dependency.js +89 -14
  100. package/cache/dependencies/file.dependency.d.ts +32 -0
  101. package/cache/dependencies/file.dependency.js +34 -0
  102. package/cache/dependencies/tag.dependency.d.ts +75 -4
  103. package/cache/dependencies/tag.dependency.js +145 -11
  104. package/cache/dependencies/time.dependency.d.ts +43 -0
  105. package/cache/dependencies/time.dependency.js +43 -0
  106. package/cache/entities/index.d.ts +1 -0
  107. package/cache/entities/index.js +17 -0
  108. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  109. package/cache/entities/typeorm-cache.entity.js +110 -0
  110. package/cache/examples/basic-usage.d.ts +15 -0
  111. package/cache/examples/basic-usage.js +62 -8
  112. package/cache/index.d.ts +2 -1
  113. package/cache/index.js +28 -2
  114. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  115. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  116. package/cache/interfaces/cache-options.interface.js +6 -0
  117. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  118. package/cache/providers/base-cache.provider.d.ts +14 -0
  119. package/cache/providers/base-cache.provider.js +16 -0
  120. package/cache/providers/cls-cache.provider.d.ts +20 -0
  121. package/cache/providers/cls-cache.provider.js +28 -0
  122. package/cache/providers/index.d.ts +2 -1
  123. package/cache/providers/index.js +2 -1
  124. package/cache/providers/lrucache.provider.d.ts +76 -0
  125. package/cache/providers/lrucache.provider.js +226 -0
  126. package/cache/providers/redis-cache.provider.d.ts +26 -0
  127. package/cache/providers/redis-cache.provider.js +29 -0
  128. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  129. package/cache/providers/typeorm-cache.provider.js +483 -0
  130. package/cache/utils/dependency-manager.util.d.ts +52 -0
  131. package/cache/utils/dependency-manager.util.js +59 -0
  132. package/cache/utils/key-generator.util.d.ts +42 -0
  133. package/cache/utils/key-generator.util.js +53 -1
  134. package/common/abstract.entity.d.ts +14 -0
  135. package/common/abstract.entity.js +14 -0
  136. package/common/boilerplate.polyfill.d.ts +143 -0
  137. package/common/boilerplate.polyfill.js +35 -1
  138. package/common/dto/dto-container.d.ts +16 -0
  139. package/common/dto/dto-container.js +20 -0
  140. package/common/dto/dto-decorators.d.ts +18 -0
  141. package/common/dto/dto-decorators.js +14 -0
  142. package/common/dto/dto-extensions.d.ts +11 -0
  143. package/common/dto/dto-extensions.js +9 -0
  144. package/common/dto/dto-service-accessor.d.ts +17 -0
  145. package/common/dto/dto-service-accessor.js +18 -0
  146. package/common/dto/dto-transformer.d.ts +12 -0
  147. package/common/dto/dto-transformer.js +9 -0
  148. package/common/dto/index.js +2 -0
  149. package/common/examples/paginate-and-map.example.d.ts +6 -0
  150. package/common/examples/paginate-and-map.example.js +26 -0
  151. package/common/helpers/validation-metadata-helper.d.ts +55 -0
  152. package/common/helpers/validation-metadata-helper.js +60 -0
  153. package/common/index.d.ts +1 -0
  154. package/common/index.js +4 -0
  155. package/common/utils.d.ts +15 -0
  156. package/common/utils.js +15 -0
  157. package/constants/language-code.js +1 -0
  158. package/decorators/field.decorators.d.ts +72 -3
  159. package/decorators/field.decorators.js +155 -19
  160. package/decorators/property.decorators.js +1 -0
  161. package/decorators/public-route.decorator.js +1 -0
  162. package/decorators/transform.decorators.d.ts +27 -2
  163. package/decorators/transform.decorators.js +29 -23
  164. package/decorators/translate.decorator.js +1 -0
  165. package/decorators/user.decorator.js +1 -0
  166. package/decorators/validator.decorators.d.ts +8 -18
  167. package/decorators/validator.decorators.js +22 -190
  168. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  169. package/file-upload/controllers/file-access.controller.js +128 -0
  170. package/file-upload/decorators/column.decorator.d.ts +151 -0
  171. package/file-upload/decorators/column.decorator.js +273 -0
  172. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  173. package/file-upload/decorators/csv-data.decorator.js +85 -0
  174. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  175. package/file-upload/decorators/csv-import.decorator.js +24 -0
  176. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  177. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  178. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  179. package/file-upload/decorators/excel-data.decorator.js +85 -0
  180. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  181. package/file-upload/decorators/file-upload.decorator.js +172 -0
  182. package/file-upload/decorators/index.d.ts +5 -0
  183. package/file-upload/decorators/index.js +38 -0
  184. package/file-upload/decorators/process.decorator.d.ts +40 -0
  185. package/file-upload/decorators/process.decorator.js +52 -0
  186. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  187. package/file-upload/decorators/validate-data.decorator.js +39 -0
  188. package/file-upload/dto/create-file.dto.d.ts +24 -0
  189. package/file-upload/dto/create-file.dto.js +112 -0
  190. package/file-upload/dto/find-files.dto.d.ts +15 -0
  191. package/file-upload/dto/find-files.dto.js +76 -0
  192. package/file-upload/dto/index.d.ts +4 -0
  193. package/file-upload/dto/index.js +20 -0
  194. package/file-upload/dto/pagination.dto.d.ts +7 -0
  195. package/file-upload/dto/pagination.dto.js +39 -0
  196. package/file-upload/dto/update-file.dto.d.ts +15 -0
  197. package/file-upload/dto/update-file.dto.js +67 -0
  198. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  199. package/file-upload/entities/file-metadata.entity.js +76 -0
  200. package/file-upload/entities/file.entity.d.ts +114 -0
  201. package/file-upload/entities/file.entity.js +350 -0
  202. package/file-upload/entities/index.d.ts +2 -0
  203. package/file-upload/entities/index.js +18 -0
  204. package/file-upload/enums/file-type.enum.d.ts +72 -0
  205. package/file-upload/enums/file-type.enum.js +212 -0
  206. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  207. package/file-upload/exceptions/file-upload.exception.js +120 -0
  208. package/file-upload/exceptions/index.d.ts +1 -0
  209. package/file-upload/exceptions/index.js +17 -0
  210. package/file-upload/file-upload.module.d.ts +89 -0
  211. package/file-upload/file-upload.module.js +292 -0
  212. package/file-upload/index.d.ts +37 -0
  213. package/file-upload/index.js +77 -0
  214. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  215. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  216. package/file-upload/interceptors/index.d.ts +1 -0
  217. package/file-upload/interceptors/index.js +17 -0
  218. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  219. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  220. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  221. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  222. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  223. package/file-upload/interfaces/file-entity.interface.js +28 -0
  224. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  225. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  226. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  227. package/file-upload/interfaces/file-processor.interface.js +2 -0
  228. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  229. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  230. package/file-upload/interfaces/index.d.ts +7 -0
  231. package/file-upload/interfaces/index.js +24 -0
  232. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  233. package/file-upload/interfaces/processor-options.interface.js +2 -0
  234. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  235. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  236. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  237. package/file-upload/interfaces/upload-options.interface.js +2 -0
  238. package/file-upload/processors/csv.processor.d.ts +98 -0
  239. package/file-upload/processors/csv.processor.js +391 -0
  240. package/file-upload/processors/excel.processor.d.ts +130 -0
  241. package/file-upload/processors/excel.processor.js +547 -0
  242. package/file-upload/processors/image.processor.d.ts +199 -0
  243. package/file-upload/processors/image.processor.js +377 -0
  244. package/file-upload/providers/index.d.ts +2 -0
  245. package/file-upload/providers/index.js +18 -0
  246. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  247. package/file-upload/providers/local-storage.provider.js +484 -0
  248. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  249. package/file-upload/providers/s3-storage.provider.js +455 -0
  250. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  251. package/file-upload/services/file-signature-validator.service.js +376 -0
  252. package/file-upload/services/file.service.d.ts +193 -0
  253. package/file-upload/services/file.service.js +638 -0
  254. package/file-upload/services/index.d.ts +4 -0
  255. package/file-upload/services/index.js +20 -0
  256. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  257. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  258. package/file-upload/services/mime-registry.service.d.ts +47 -0
  259. package/file-upload/services/mime-registry.service.js +167 -0
  260. package/file-upload/utils/checksum.util.d.ts +28 -0
  261. package/file-upload/utils/checksum.util.js +65 -0
  262. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  263. package/file-upload/utils/dynamic-import.util.js +156 -0
  264. package/file-upload/utils/filename.util.d.ts +59 -0
  265. package/file-upload/utils/filename.util.js +184 -0
  266. package/file-upload/utils/filepath.util.d.ts +70 -0
  267. package/file-upload/utils/filepath.util.js +152 -0
  268. package/file-upload/utils/index.d.ts +4 -0
  269. package/file-upload/utils/index.js +20 -0
  270. package/filters/bad-request.filter.js +19 -4
  271. package/filters/constraint-errors.js +1 -0
  272. package/helpers/common.helper.d.ts +13 -0
  273. package/helpers/common.helper.js +13 -0
  274. package/http-client/config/http-client.config.d.ts +20 -0
  275. package/http-client/config/http-client.config.js +48 -21
  276. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  277. package/http-client/decorators/http-client.decorators.js +154 -78
  278. package/http-client/entities/http-log.entity.d.ts +217 -8
  279. package/http-client/entities/http-log.entity.js +7 -22
  280. package/http-client/errors/http-client.errors.d.ts +57 -0
  281. package/http-client/errors/http-client.errors.js +58 -0
  282. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  283. package/http-client/examples/advanced-usage.example.js +53 -61
  284. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  285. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  286. package/http-client/examples/basic-usage.example.d.ts +60 -0
  287. package/http-client/examples/basic-usage.example.js +60 -0
  288. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  289. package/http-client/examples/multi-api-configuration.example.js +76 -5
  290. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  291. package/http-client/examples/proxy-from-environment.example.js +409 -0
  292. package/http-client/http-client.module.d.ts +48 -2
  293. package/http-client/http-client.module.js +147 -68
  294. package/http-client/index.d.ts +1 -1
  295. package/http-client/index.js +8 -0
  296. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  297. package/http-client/interfaces/api-client-config.interface.js +3 -0
  298. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  299. package/http-client/services/api-client-registry.service.d.ts +50 -11
  300. package/http-client/services/api-client-registry.service.js +90 -250
  301. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  302. package/http-client/services/circuit-breaker.service.js +237 -7
  303. package/http-client/services/http-client.service.d.ts +124 -14
  304. package/http-client/services/http-client.service.js +437 -148
  305. package/http-client/services/http-log-query.service.d.ts +83 -0
  306. package/http-client/services/http-log-query.service.js +121 -13
  307. package/http-client/services/http-replay.service.d.ts +101 -0
  308. package/http-client/services/http-replay.service.js +86 -0
  309. package/http-client/services/index.d.ts +0 -1
  310. package/http-client/services/index.js +0 -1
  311. package/http-client/services/log-cleanup.service.d.ts +63 -0
  312. package/http-client/services/log-cleanup.service.js +54 -2
  313. package/http-client/services/logging.service.d.ts +116 -7
  314. package/http-client/services/logging.service.js +349 -86
  315. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  316. package/http-client/utils/call-stack-extractor.util.js +83 -0
  317. package/http-client/utils/context-extractor.util.d.ts +49 -0
  318. package/http-client/utils/context-extractor.util.js +54 -0
  319. package/http-client/utils/curl-generator.util.d.ts +21 -0
  320. package/http-client/utils/curl-generator.util.js +44 -3
  321. package/http-client/utils/index.d.ts +1 -0
  322. package/http-client/utils/index.js +1 -0
  323. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  324. package/http-client/utils/proxy-environment.util.js +148 -0
  325. package/http-client/utils/request-id.util.d.ts +18 -0
  326. package/http-client/utils/request-id.util.js +20 -0
  327. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  328. package/http-client/utils/retry-recorder.util.js +44 -0
  329. package/http-client/utils/security-validator.util.d.ts +118 -0
  330. package/http-client/utils/security-validator.util.js +352 -0
  331. package/index.d.ts +3 -1
  332. package/index.js +12 -1
  333. package/interceptors/translation-interceptor.service.js +5 -0
  334. package/ip-filter/constants.d.ts +21 -0
  335. package/ip-filter/constants.js +24 -0
  336. package/ip-filter/decorators/index.d.ts +1 -0
  337. package/ip-filter/decorators/index.js +17 -0
  338. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  339. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  340. package/ip-filter/guards/index.d.ts +1 -0
  341. package/ip-filter/guards/index.js +17 -0
  342. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  343. package/ip-filter/guards/ip-filter.guard.js +174 -0
  344. package/ip-filter/index.d.ts +7 -0
  345. package/ip-filter/index.js +23 -0
  346. package/ip-filter/interfaces/index.d.ts +4 -0
  347. package/ip-filter/interfaces/index.js +20 -0
  348. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  349. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  350. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  351. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  352. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  353. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  354. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  355. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  356. package/ip-filter/ip-filter.module.d.ts +55 -0
  357. package/ip-filter/ip-filter.module.js +105 -0
  358. package/ip-filter/services/index.d.ts +1 -0
  359. package/ip-filter/services/index.js +17 -0
  360. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  361. package/ip-filter/services/ip-filter.service.js +238 -0
  362. package/ip-filter/utils/index.d.ts +1 -0
  363. package/ip-filter/utils/index.js +17 -0
  364. package/ip-filter/utils/ip-utils.d.ts +61 -0
  365. package/ip-filter/utils/ip-utils.js +162 -0
  366. package/package.json +32 -29
  367. package/providers/context.provider.d.ts +9 -0
  368. package/providers/context.provider.js +15 -0
  369. package/providers/generator.provider.d.ts +4 -0
  370. package/providers/generator.provider.js +4 -0
  371. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  372. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  373. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  374. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  375. package/redis-lock/index.d.ts +2 -0
  376. package/redis-lock/index.js +8 -1
  377. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  378. package/redis-lock/lock-heartbeat.service.js +232 -0
  379. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  380. package/redis-lock/redis-lock.decorator.js +120 -0
  381. package/redis-lock/redis-lock.module.d.ts +66 -0
  382. package/redis-lock/redis-lock.module.js +175 -70
  383. package/redis-lock/redis-lock.service.d.ts +282 -0
  384. package/redis-lock/redis-lock.service.js +343 -20
  385. package/setup/bootstrap.setup.d.ts +2 -1
  386. package/setup/bootstrap.setup.js +22 -1
  387. package/setup/index.d.ts +1 -0
  388. package/setup/index.js +1 -0
  389. package/setup/mode.setup.d.ts +44 -0
  390. package/setup/mode.setup.js +44 -0
  391. package/setup/run-in-mode.decorator.d.ts +56 -0
  392. package/setup/run-in-mode.decorator.js +92 -0
  393. package/setup/schedule.decorator.d.ts +227 -0
  394. package/setup/schedule.decorator.js +240 -12
  395. package/setup/worker.decorator.d.ts +86 -0
  396. package/setup/worker.decorator.js +97 -0
  397. package/shared/index.d.ts +1 -1
  398. package/shared/index.js +1 -1
  399. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
  400. package/shared/services/api-config.service.d.ts +3 -0
  401. package/shared/services/api-config.service.js +21 -9
  402. package/shared/services/index.d.ts +0 -1
  403. package/shared/services/index.js +0 -1
  404. package/validator-json/decorators.d.ts +17 -0
  405. package/validator-json/decorators.js +17 -2
  406. package/validator-json/default.d.ts +6 -0
  407. package/validator-json/default.js +30 -2
  408. package/validator-json/defaultConverters.js +1 -0
  409. package/validator-json/options.d.ts +23 -0
  410. package/validators/common-validators.d.ts +143 -0
  411. package/validators/common-validators.js +249 -0
  412. package/validators/custom-validate.examples.d.ts +23 -0
  413. package/validators/custom-validate.examples.js +78 -6
  414. package/validators/custom-validate.validator.d.ts +108 -0
  415. package/validators/custom-validate.validator.js +85 -0
  416. package/validators/file-mimetype.validator.d.ts +0 -2
  417. package/validators/file-mimetype.validator.js +4 -6
  418. package/validators/index.d.ts +1 -0
  419. package/validators/index.js +1 -0
  420. package/validators/is-exists.validator.d.ts +26 -6
  421. package/validators/is-exists.validator.js +30 -7
  422. package/validators/is-unique.validator.d.ts +33 -7
  423. package/validators/is-unique.validator.js +59 -17
  424. package/validators/skip-empty.validator.d.ts +5 -0
  425. package/validators/skip-empty.validator.js +5 -0
  426. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  427. package/vault/vault-config.loader.d.ts +30 -0
  428. package/vault/vault-config.loader.js +48 -1
  429. package/vault/vault-config.service.d.ts +53 -0
  430. package/vault/vault-config.service.js +57 -0
  431. package/vault/vault.module.d.ts +4 -0
  432. package/vault/vault.module.js +4 -0
  433. package/cache/providers/memory-cache.provider.d.ts +0 -26
  434. package/cache/providers/memory-cache.provider.js +0 -171
  435. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  436. package/decorators/examples/validation-decorators.example.js +0 -331
  437. package/http-client/services/cache.service.d.ts +0 -24
  438. package/http-client/services/cache.service.js +0 -264
  439. package/shared/services/validator.service.d.ts +0 -3
  440. package/shared/services/validator.service.js +0 -20
  441. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -26,33 +26,61 @@ const common_1 = require("@nestjs/common");
26
26
  const typeorm_1 = require("@nestjs/typeorm");
27
27
  const typeorm_2 = require("typeorm");
28
28
  const entities_1 = require("../entities");
29
+ const cache_1 = require("../../cache");
30
+ /**
31
+ * 操作描述服务
32
+ * 负责根据模板和参数动态生成多语言描述
33
+ */
29
34
  let OperationDescriptionService = class OperationDescriptionService {
30
- constructor(templateRepository, transactionRepository, auditLogRepository, manualOperationRepository) {
35
+ constructor(templateRepository, transactionRepository, auditLogRepository, manualOperationRepository, cacheService) {
31
36
  this.templateRepository = templateRepository;
32
37
  this.transactionRepository = transactionRepository;
33
38
  this.auditLogRepository = auditLogRepository;
34
39
  this.manualOperationRepository = manualOperationRepository;
35
- this.templateCache = new Map();
40
+ this.cacheService = cacheService;
41
+ // 缓存命名空间
42
+ this.CACHE_NAMESPACE = 'audit:template';
43
+ // 缓存TTL(30分钟)
44
+ this.CACHE_TTL = 30 * 60 * 1000;
36
45
  }
46
+ /**
47
+ * 动态生成操作名称
48
+ * @param templateKey 模板键
49
+ * @param language 语言
50
+ * @returns 操作名称
51
+ */
37
52
  generateOperationName(templateKey_1) {
38
53
  return __awaiter(this, arguments, void 0, function* (templateKey, language = 'zh') {
39
54
  const template = yield this.getOperationTemplate(templateKey);
40
55
  if (!template) {
41
- return templateKey;
56
+ return templateKey; // 如果没有模板,返回模板键
42
57
  }
43
58
  return template.nameTemplates[language] || template.nameTemplates['zh'] || templateKey;
44
59
  });
45
60
  }
61
+ /**
62
+ * 动态生成操作描述
63
+ * @param templateKey 模板键
64
+ * @param descriptionParams 描述参数
65
+ * @param language 语言
66
+ * @returns 描述文本
67
+ */
46
68
  generateDescription(templateKey_1, descriptionParams_1) {
47
69
  return __awaiter(this, arguments, void 0, function* (templateKey, descriptionParams, language = 'zh') {
48
70
  const template = yield this.getOperationTemplate(templateKey);
49
71
  if (!template) {
50
- return templateKey;
72
+ return templateKey; // 如果没有模板,返回模板键
51
73
  }
52
74
  const templateStr = template.descriptionTemplates[language] || template.descriptionTemplates['zh'] || templateKey;
53
75
  return this.fillTemplate(templateStr, descriptionParams);
54
76
  });
55
77
  }
78
+ /**
79
+ * 动态生成变更详情
80
+ * @param changeDetails 变更详情列表
81
+ * @param language 语言
82
+ * @returns 格式化的变更详情
83
+ */
56
84
  generateChangeDetails(changeDetails_1) {
57
85
  return __awaiter(this, arguments, void 0, function* (changeDetails, language = 'zh') {
58
86
  return changeDetails.map((detail) => {
@@ -67,22 +95,32 @@ let OperationDescriptionService = class OperationDescriptionService {
67
95
  });
68
96
  });
69
97
  }
98
+ /**
99
+ * 获取事务描述(包含所有变更)
100
+ * @param transactionId 事务ID
101
+ * @param language 语言
102
+ * @returns 事务描述对象
103
+ */
70
104
  getTransactionDescription(transactionId_1) {
71
105
  return __awaiter(this, arguments, void 0, function* (transactionId, language = 'zh') {
106
+ // 获取事务信息
72
107
  const transaction = yield this.transactionRepository.findOne({
73
108
  where: { id: transactionId },
74
109
  });
75
110
  if (!transaction) {
76
111
  throw new Error(`Transaction ${transactionId} not found`);
77
112
  }
113
+ // 获取事务的审计日志
78
114
  const auditLogs = yield this.auditLogRepository.find({
79
115
  where: { requestId: transactionId },
80
116
  order: { createdAt: 'ASC' },
81
117
  });
118
+ // 获取事务的手动操作记录
82
119
  const manualOperations = yield this.manualOperationRepository.find({
83
120
  where: { transactionId },
84
121
  order: { createdAt: 'ASC' },
85
122
  });
123
+ // 生成操作名称和描述
86
124
  let operationName;
87
125
  let description;
88
126
  if (transaction.operationTemplateKey) {
@@ -90,6 +128,7 @@ let OperationDescriptionService = class OperationDescriptionService {
90
128
  description = yield this.generateDescription(transaction.operationTemplateKey, transaction.descriptionParams || {}, language);
91
129
  }
92
130
  else {
131
+ // 如果没有事务级别的模板,使用第一个变更的模板
93
132
  const firstLog = auditLogs[0];
94
133
  if (firstLog && firstLog.operationTemplateKey) {
95
134
  operationName = yield this.generateOperationName(firstLog.operationTemplateKey, language);
@@ -100,7 +139,9 @@ let OperationDescriptionService = class OperationDescriptionService {
100
139
  description = transaction.description || 'Unknown operation';
101
140
  }
102
141
  }
142
+ // 生成变更详情
103
143
  const changes = [];
144
+ // 添加实体变更
104
145
  for (const log of auditLogs) {
105
146
  const changeDescription = log.operationTemplateKey
106
147
  ? yield this.generateDescription(log.operationTemplateKey, log.descriptionParams || {}, language)
@@ -117,6 +158,7 @@ let OperationDescriptionService = class OperationDescriptionService {
117
158
  createdAt: log.createdAt,
118
159
  });
119
160
  }
161
+ // 添加手动操作
120
162
  for (const manualOp of manualOperations) {
121
163
  const opName = yield this.generateOperationName(manualOp.operationTemplateKey, language);
122
164
  const opDescription = yield this.generateDescription(manualOp.operationTemplateKey, manualOp.descriptionParams, language);
@@ -127,6 +169,7 @@ let OperationDescriptionService = class OperationDescriptionService {
127
169
  createdAt: manualOp.createdAt,
128
170
  });
129
171
  }
172
+ // 按时间排序
130
173
  changes.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
131
174
  return {
132
175
  operationName,
@@ -135,24 +178,147 @@ let OperationDescriptionService = class OperationDescriptionService {
135
178
  };
136
179
  });
137
180
  }
181
+ /**
182
+ * 批量获取事务描述
183
+ * @param transactionIds 事务ID列表
184
+ * @param language 语言
185
+ * @returns 事务描述映射
186
+ */
138
187
  batchGetTransactionDescriptions(transactionIds_1) {
139
188
  return __awaiter(this, arguments, void 0, function* (transactionIds, language = 'zh') {
189
+ if (transactionIds.length === 0) {
190
+ return {};
191
+ }
192
+ // 批量查询事务信息
193
+ const transactions = yield this.transactionRepository
194
+ .createQueryBuilder('tx')
195
+ .whereInIds(transactionIds)
196
+ .getMany();
197
+ // 批量查询审计日志
198
+ const auditLogs = yield this.auditLogRepository
199
+ .createQueryBuilder('log')
200
+ .where('log.requestId IN (:...transactionIds)', { transactionIds })
201
+ .orderBy('log.createdAt', 'ASC')
202
+ .getMany();
203
+ // 批量查询手动操作记录
204
+ const manualOperations = yield this.manualOperationRepository
205
+ .createQueryBuilder('op')
206
+ .where('op.transactionId IN (:...transactionIds)', { transactionIds })
207
+ .orderBy('op.createdAt', 'ASC')
208
+ .getMany();
209
+ // 收集所有需要的模板键
210
+ const templateKeys = new Set();
211
+ transactions.forEach(tx => {
212
+ if (tx.operationTemplateKey)
213
+ templateKeys.add(tx.operationTemplateKey);
214
+ });
215
+ auditLogs.forEach(log => {
216
+ if (log.operationTemplateKey)
217
+ templateKeys.add(log.operationTemplateKey);
218
+ });
219
+ manualOperations.forEach(op => {
220
+ if (op.operationTemplateKey)
221
+ templateKeys.add(op.operationTemplateKey);
222
+ });
223
+ // 批量预加载模板
224
+ if (templateKeys.size > 0) {
225
+ yield this.preloadTemplates(Array.from(templateKeys));
226
+ }
227
+ // 按事务ID分组
228
+ const logsByTxId = new Map();
229
+ const opsByTxId = new Map();
230
+ auditLogs.forEach(log => {
231
+ const txId = log.requestId;
232
+ if (!logsByTxId.has(txId))
233
+ logsByTxId.set(txId, []);
234
+ logsByTxId.get(txId).push(log);
235
+ });
236
+ manualOperations.forEach(op => {
237
+ const txId = op.transactionId;
238
+ if (!opsByTxId.has(txId))
239
+ opsByTxId.set(txId, []);
240
+ opsByTxId.get(txId).push(op);
241
+ });
242
+ // 构建结果
140
243
  const results = {};
141
- for (const transactionId of transactionIds) {
244
+ for (const transaction of transactions) {
142
245
  try {
143
- results[transactionId] = yield this.getTransactionDescription(transactionId, language);
246
+ const txLogs = logsByTxId.get(transaction.id) || [];
247
+ const txOps = opsByTxId.get(transaction.id) || [];
248
+ // 生成操作名称和描述
249
+ let operationName;
250
+ let description;
251
+ if (transaction.operationTemplateKey) {
252
+ operationName = yield this.generateOperationName(transaction.operationTemplateKey, language);
253
+ description = yield this.generateDescription(transaction.operationTemplateKey, transaction.descriptionParams || {}, language);
254
+ }
255
+ else {
256
+ const firstLog = txLogs[0];
257
+ if (firstLog && firstLog.operationTemplateKey) {
258
+ operationName = yield this.generateOperationName(firstLog.operationTemplateKey, language);
259
+ description = yield this.generateDescription(firstLog.operationTemplateKey, firstLog.descriptionParams || {}, language);
260
+ }
261
+ else {
262
+ operationName = 'Unknown Operation';
263
+ description = transaction.description || 'Unknown operation';
264
+ }
265
+ }
266
+ // 生成变更详情
267
+ const changes = [];
268
+ // 添加实体变更
269
+ for (const log of txLogs) {
270
+ const changeDescription = log.operationTemplateKey
271
+ ? yield this.generateDescription(log.operationTemplateKey, log.descriptionParams || {}, language)
272
+ : log.description || '';
273
+ const changeDetails = log.changeDetails
274
+ ? yield this.generateChangeDetails(log.changeDetails, language)
275
+ : [];
276
+ changes.push({
277
+ entityName: log.entityType,
278
+ entityId: log.entityId,
279
+ operation: log.operation,
280
+ description: changeDescription,
281
+ details: changeDetails,
282
+ createdAt: log.createdAt,
283
+ });
284
+ }
285
+ // 添加手动操作
286
+ for (const manualOp of txOps) {
287
+ const opName = yield this.generateOperationName(manualOp.operationTemplateKey, language);
288
+ const opDescription = yield this.generateDescription(manualOp.operationTemplateKey, manualOp.descriptionParams, language);
289
+ changes.push({
290
+ type: 'manual',
291
+ description: `${opName}: ${opDescription}`,
292
+ details: manualOp.descriptionParams,
293
+ createdAt: manualOp.createdAt,
294
+ });
295
+ }
296
+ // 按时间排序
297
+ changes.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
298
+ results[transaction.id] = {
299
+ operationName,
300
+ description,
301
+ changes,
302
+ };
144
303
  }
145
304
  catch (error) {
146
- console.error(`Failed to get description for transaction ${transactionId}:`, error);
305
+ console.error(`Failed to get description for transaction ${transaction.id}:`, error);
147
306
  }
148
307
  }
149
308
  return results;
150
309
  });
151
310
  }
311
+ /**
312
+ * 填充模板
313
+ * @param template 模板字符串
314
+ * @param params 参数
315
+ * @returns 填充后的字符串
316
+ */
152
317
  fillTemplate(template, params) {
153
318
  if (!template)
154
319
  return '';
155
320
  let result = template;
321
+ // 替换参数 {key} -> value
156
322
  for (const [key, value] of Object.entries(params || {})) {
157
323
  const placeholder = `{${key}}`;
158
324
  if (result.includes(placeholder)) {
@@ -161,6 +327,12 @@ let OperationDescriptionService = class OperationDescriptionService {
161
327
  }
162
328
  return result;
163
329
  }
330
+ /**
331
+ * 格式化显示值
332
+ * @param value 原始值
333
+ * @param displayValue 显示值
334
+ * @returns 格式化后的值
335
+ */
164
336
  formatDisplayValue(value, displayValue) {
165
337
  if (displayValue !== undefined) {
166
338
  return displayValue;
@@ -170,32 +342,70 @@ let OperationDescriptionService = class OperationDescriptionService {
170
342
  }
171
343
  return String(value);
172
344
  }
345
+ /**
346
+ * 获取操作模板(使用统一缓存服务)
347
+ * @param templateKey 模板键
348
+ * @returns 操作模板
349
+ */
173
350
  getOperationTemplate(templateKey) {
174
351
  return __awaiter(this, void 0, void 0, function* () {
175
- if (this.templateCache.has(templateKey)) {
176
- return this.templateCache.get(templateKey);
177
- }
178
- const template = yield this.templateRepository.findOne({
179
- where: { key: templateKey },
352
+ // 使用统一缓存服务的 getOrSet 方法
353
+ return this.cacheService.getOrSet(templateKey, () => __awaiter(this, void 0, void 0, function* () {
354
+ // 从数据库查询
355
+ const template = yield this.templateRepository.findOne({
356
+ where: { key: templateKey },
357
+ });
358
+ return template;
359
+ }), {
360
+ namespace: this.CACHE_NAMESPACE,
361
+ ttl: this.CACHE_TTL,
362
+ // 只使用内存缓存层,避免序列化开销
363
+ layers: [cache_1.CacheLayer.MEMORY],
180
364
  });
181
- if (template) {
182
- this.templateCache.set(templateKey, template);
365
+ });
366
+ }
367
+ /**
368
+ * 获取模板字符串(仅返回模板文本,不填充参数)
369
+ * @param templateKey 模板键
370
+ * @param language 语言
371
+ * @returns 模板字符串
372
+ */
373
+ getTemplate(templateKey_1) {
374
+ return __awaiter(this, arguments, void 0, function* (templateKey, language = 'zh') {
375
+ const template = yield this.getOperationTemplate(templateKey);
376
+ if (!template) {
377
+ return null;
183
378
  }
184
- return template;
379
+ return template.descriptionTemplates[language] || template.descriptionTemplates['zh'] || null;
185
380
  });
186
381
  }
382
+ /**
383
+ * 清除模板缓存
384
+ */
187
385
  clearTemplateCache() {
188
- this.templateCache.clear();
386
+ // 使用统一缓存服务清除
387
+ this.cacheService.deletePattern(`${this.CACHE_NAMESPACE}:*`, [cache_1.CacheLayer.MEMORY]);
189
388
  }
389
+ /**
390
+ * 预加载模板到缓存
391
+ * @param templateKeys 模板键列表
392
+ */
190
393
  preloadTemplates(templateKeys) {
191
394
  return __awaiter(this, void 0, void 0, function* () {
192
395
  const templates = yield this.templateRepository
193
396
  .createQueryBuilder('template')
194
397
  .where('template.key IN (:...keys)', { keys: templateKeys })
195
398
  .getMany();
196
- for (const template of templates) {
197
- this.templateCache.set(template.key, template);
198
- }
399
+ // 批量设置到缓存
400
+ const cacheItems = templates.map(template => ({
401
+ key: template.key,
402
+ value: template,
403
+ }));
404
+ yield this.cacheService.mset(cacheItems, {
405
+ namespace: this.CACHE_NAMESPACE,
406
+ ttl: this.CACHE_TTL,
407
+ layers: [cache_1.CacheLayer.MEMORY],
408
+ });
199
409
  });
200
410
  }
201
411
  };
@@ -209,5 +419,6 @@ exports.OperationDescriptionService = OperationDescriptionService = __decorate([
209
419
  __metadata("design:paramtypes", [typeorm_2.Repository,
210
420
  typeorm_2.Repository,
211
421
  typeorm_2.Repository,
212
- typeorm_2.Repository])
422
+ typeorm_2.Repository,
423
+ cache_1.CacheService])
213
424
  ], OperationDescriptionService);
@@ -4,19 +4,49 @@ import { AuditOperation } from '../enums';
4
4
  import { AuditContextService } from './audit-context.service';
5
5
  import { EntityAuditService } from './entity-audit.service';
6
6
  import { MultiDatabaseService } from './multi-database.service';
7
+ /**
8
+ * 事务审计服务
9
+ */
7
10
  export declare class TransactionAuditService {
8
11
  private readonly transactionRepository;
9
12
  private readonly contextService;
10
13
  private readonly auditService;
11
14
  private readonly multiDbService;
12
15
  constructor(transactionRepository: Repository<EntityTransactionEntity>, contextService: AuditContextService, auditService: EntityAuditService, multiDbService: MultiDatabaseService);
16
+ /**
17
+ * 开始事务
18
+ */
13
19
  beginTransaction(description: string): Promise<string>;
20
+ /**
21
+ * 提交事务
22
+ */
14
23
  commitTransaction(transactionId: string): Promise<void>;
24
+ /**
25
+ * 回滚事务(支持多数据库)
26
+ */
15
27
  rollbackTransaction(transactionId: string): Promise<void>;
28
+ /**
29
+ * 添加实体到事务
30
+ */
16
31
  addEntityToTransaction(transactionId: string, entityType: string, entityId: string, operation: AuditOperation): Promise<void>;
32
+ /**
33
+ * 执行回滚(支持多数据库)
34
+ */
17
35
  private performRollback;
36
+ /**
37
+ * 按数据库连接分组实体
38
+ */
18
39
  private groupEntitiesByConnection;
40
+ /**
41
+ * 在指定连接中回滚实体
42
+ */
19
43
  private rollbackEntitiesInConnection;
44
+ /**
45
+ * 回滚单个实体
46
+ */
20
47
  private rollbackSingleEntity;
48
+ /**
49
+ * 获取最新的审计日志
50
+ */
21
51
  private getLatestAuditLog;
22
52
  }
@@ -30,6 +30,10 @@ const enums_1 = require("../enums");
30
30
  const audit_context_service_1 = require("./audit-context.service");
31
31
  const entity_audit_service_1 = require("./entity-audit.service");
32
32
  const multi_database_service_1 = require("./multi-database.service");
33
+ const transaction_1 = require("@nest-omni/transaction");
34
+ /**
35
+ * 事务审计服务
36
+ */
33
37
  let TransactionAuditService = class TransactionAuditService {
34
38
  constructor(transactionRepository, contextService, auditService, multiDbService) {
35
39
  this.transactionRepository = transactionRepository;
@@ -37,23 +41,30 @@ let TransactionAuditService = class TransactionAuditService {
37
41
  this.auditService = auditService;
38
42
  this.multiDbService = multiDbService;
39
43
  }
44
+ /**
45
+ * 开始事务
46
+ */
40
47
  beginTransaction(description) {
41
48
  return __awaiter(this, void 0, void 0, function* () {
42
49
  const context = yield this.contextService.getCurrentContext();
43
50
  const transaction = this.transactionRepository.create({
44
51
  description,
45
- status: enums_1.TransactionStatus.PENDING,
52
+ status: enums_1.AuditTransactionStatus.PENDING,
46
53
  entities: [],
47
54
  userId: context.userId,
48
55
  username: context.username,
49
56
  });
50
57
  const savedTransaction = yield this.transactionRepository.save(transaction);
58
+ // 设置事务ID到上下文
51
59
  this.contextService.setContext({
52
60
  transactionId: savedTransaction.id,
53
61
  });
54
62
  return savedTransaction.id;
55
63
  });
56
64
  }
65
+ /**
66
+ * 提交事务
67
+ */
57
68
  commitTransaction(transactionId) {
58
69
  return __awaiter(this, void 0, void 0, function* () {
59
70
  const transaction = yield this.transactionRepository.findOne({
@@ -62,10 +73,13 @@ let TransactionAuditService = class TransactionAuditService {
62
73
  if (!transaction) {
63
74
  throw new Error(`Transaction not found: ${transactionId}`);
64
75
  }
65
- transaction.status = enums_1.TransactionStatus.COMMITTED;
76
+ transaction.status = enums_1.AuditTransactionStatus.COMMITTED;
66
77
  yield this.transactionRepository.save(transaction);
67
78
  });
68
79
  }
80
+ /**
81
+ * 回滚事务(支持多数据库)
82
+ */
69
83
  rollbackTransaction(transactionId) {
70
84
  return __awaiter(this, void 0, void 0, function* () {
71
85
  const transaction = yield this.transactionRepository.findOne({
@@ -74,11 +88,15 @@ let TransactionAuditService = class TransactionAuditService {
74
88
  if (!transaction) {
75
89
  throw new Error(`Transaction not found: ${transactionId}`);
76
90
  }
91
+ // 执行回滚操作
77
92
  yield this.performRollback(transaction);
78
- transaction.status = enums_1.TransactionStatus.ROLLED_BACK;
93
+ transaction.status = enums_1.AuditTransactionStatus.ROLLED_BACK;
79
94
  yield this.transactionRepository.save(transaction);
80
95
  });
81
96
  }
97
+ /**
98
+ * 添加实体到事务
99
+ */
82
100
  addEntityToTransaction(transactionId, entityType, entityId, operation) {
83
101
  return __awaiter(this, void 0, void 0, function* () {
84
102
  const transaction = yield this.transactionRepository.findOne({
@@ -95,24 +113,35 @@ let TransactionAuditService = class TransactionAuditService {
95
113
  yield this.transactionRepository.save(transaction);
96
114
  });
97
115
  }
116
+ /**
117
+ * 执行回滚(支持多数据库)
118
+ */
98
119
  performRollback(transaction) {
99
120
  return __awaiter(this, void 0, void 0, function* () {
121
+ // 按相反顺序回滚实体
100
122
  const reversedEntities = [...transaction.entities].reverse();
123
+ // 按数据库连接分组
101
124
  const entitiesByConnection = yield this.groupEntitiesByConnection(reversedEntities);
125
+ // 对每个数据库连接执行回滚
102
126
  for (const [connectionName, entities] of Object.entries(entitiesByConnection)) {
103
127
  yield this.rollbackEntitiesInConnection(connectionName, entities);
104
128
  }
105
129
  });
106
130
  }
131
+ /**
132
+ * 按数据库连接分组实体
133
+ */
107
134
  groupEntitiesByConnection(entities) {
108
135
  return __awaiter(this, void 0, void 0, function* () {
109
136
  const grouped = {};
137
+ // 获取所有监听的连接
110
138
  const monitoredConnections = this.multiDbService.getMonitoredConnections();
139
+ // 尝试确定每个实体属于哪个连接
111
140
  for (const entity of entities) {
112
141
  let connectionFound = false;
113
142
  for (const connectionName of monitoredConnections) {
114
143
  try {
115
- const dataSource = yield this.multiDbService.getDataSource(connectionName);
144
+ const dataSource = (0, transaction_1.getDataSource)(connectionName);
116
145
  const metadata = dataSource.getMetadata(entity.entityType);
117
146
  if (metadata) {
118
147
  if (!grouped[connectionName]) {
@@ -124,9 +153,11 @@ let TransactionAuditService = class TransactionAuditService {
124
153
  }
125
154
  }
126
155
  catch (error) {
156
+ // 继续尝试下一个连接
127
157
  continue;
128
158
  }
129
159
  }
160
+ // 如果没有找到连接,使用默认连接
130
161
  if (!connectionFound) {
131
162
  const defaultConnection = 'default';
132
163
  if (!grouped[defaultConnection]) {
@@ -138,9 +169,13 @@ let TransactionAuditService = class TransactionAuditService {
138
169
  return grouped;
139
170
  });
140
171
  }
172
+ /**
173
+ * 在指定连接中回滚实体
174
+ */
141
175
  rollbackEntitiesInConnection(connectionName, entities) {
142
176
  return __awaiter(this, void 0, void 0, function* () {
143
- const dataSource = yield this.multiDbService.getDataSource(connectionName);
177
+ const dataSource = (0, transaction_1.getDataSource)(connectionName);
178
+ // 使用事务执行回滚
144
179
  yield dataSource.transaction((manager) => __awaiter(this, void 0, void 0, function* () {
145
180
  for (const entity of entities) {
146
181
  try {
@@ -154,26 +189,34 @@ let TransactionAuditService = class TransactionAuditService {
154
189
  }));
155
190
  });
156
191
  }
192
+ /**
193
+ * 回滚单个实体
194
+ */
157
195
  rollbackSingleEntity(manager, entity, connectionName) {
158
196
  return __awaiter(this, void 0, void 0, function* () {
159
197
  const repository = manager.getRepository(entity.entityType);
160
198
  switch (entity.operation) {
161
199
  case enums_1.AuditOperation.CREATE:
200
+ // 创建操作回滚:删除实体
162
201
  yield repository.delete({ id: entity.entityId });
163
202
  break;
164
203
  case enums_1.AuditOperation.UPDATE:
204
+ // 更新操作回滚:恢复到之前的值
205
+ // 需要从审计日志中获取之前的值
165
206
  const auditLog = yield this.getLatestAuditLog(entity.entityType, entity.entityId);
166
207
  if (auditLog && auditLog.oldValue) {
167
208
  yield repository.update({ id: entity.entityId }, auditLog.oldValue);
168
209
  }
169
210
  break;
170
211
  case enums_1.AuditOperation.DELETE:
212
+ // 删除操作回滚:恢复实体
171
213
  const deletedAuditLog = yield this.getLatestAuditLog(entity.entityType, entity.entityId);
172
214
  if (deletedAuditLog && deletedAuditLog.oldValue) {
173
215
  yield repository.save(deletedAuditLog.oldValue);
174
216
  }
175
217
  break;
176
218
  case enums_1.AuditOperation.RESTORE:
219
+ // 恢复操作回滚:撤销恢复
177
220
  const restoreAuditLog = yield this.getLatestAuditLog(entity.entityType, entity.entityId);
178
221
  if (restoreAuditLog && restoreAuditLog.oldValue) {
179
222
  yield repository.update({ id: entity.entityId }, restoreAuditLog.oldValue);
@@ -184,8 +227,13 @@ let TransactionAuditService = class TransactionAuditService {
184
227
  }
185
228
  });
186
229
  }
230
+ /**
231
+ * 获取最新的审计日志
232
+ */
187
233
  getLatestAuditLog(entityType, entityId) {
188
234
  return __awaiter(this, void 0, void 0, function* () {
235
+ // 这里需要从审计服务获取
236
+ // 由于循环依赖,这里简化实现
189
237
  return null;
190
238
  });
191
239
  }
@@ -2,13 +2,33 @@ import { EntitySubscriberInterface, InsertEvent, UpdateEvent, RemoveEvent, DataS
2
2
  import { EntityAuditService } from '../services/entity-audit.service';
3
3
  import { AuditContextService } from '../services/audit-context.service';
4
4
  import { DefaultAuditStrategy } from '../services/audit-strategy.service';
5
+ /**
6
+ * 实体审计订阅者
7
+ */
5
8
  export declare class EntityAuditSubscriber implements EntitySubscriberInterface<any> {
6
9
  private readonly entityAuditService;
7
10
  private readonly contextService;
8
11
  private readonly auditStrategy;
12
+ private readonly logger;
9
13
  constructor(entityAuditService: EntityAuditService, contextService: AuditContextService, auditStrategy: DefaultAuditStrategy, dataSource: DataSource);
14
+ /**
15
+ * 在实体插入后记录审计日志
16
+ */
10
17
  afterInsert(event: InsertEvent<any>): Promise<void>;
18
+ /**
19
+ * 在实体更新后记录审计日志
20
+ */
11
21
  afterUpdate(event: UpdateEvent<any>): Promise<void>;
22
+ /**
23
+ * 在实体删除前记录审计日志
24
+ */
12
25
  beforeRemove(event: RemoveEvent<any>): Promise<void>;
26
+ /**
27
+ * 计算变更字段
28
+ */
29
+ private calculateChangedFields;
30
+ /**
31
+ * 检查是否启用了审计
32
+ */
13
33
  private isAuditEnabled;
14
34
  }