@nest-omni/core 4.1.3-3 → 4.1.3-31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit/audit.module.d.ts +1 -0
- package/audit/audit.module.js +51 -2
- package/audit/controllers/audit.controller.d.ts +57 -1
- package/audit/controllers/audit.controller.js +43 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +1 -1
- package/audit/decorators/audit-controller.decorator.js +2 -2
- package/audit/decorators/audit-operation.decorator.d.ts +0 -7
- package/audit/decorators/audit-operation.decorator.js +0 -7
- package/audit/decorators/entity-audit.decorator.d.ts +78 -2
- package/audit/decorators/entity-audit.decorator.js +145 -4
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-action-query.dto.d.ts +13 -0
- package/audit/dto/audit-action-query.dto.js +77 -0
- package/audit/dto/index.d.ts +1 -0
- package/audit/dto/index.js +1 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +7 -2
- package/audit/entities/entity-audit-log.entity.js +45 -9
- package/audit/entities/entity-transaction.entity.d.ts +8 -2
- package/audit/entities/entity-transaction.entity.js +39 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +0 -2
- package/audit/entities/manual-operation-log.entity.js +8 -9
- package/audit/enums/audit.enums.d.ts +14 -6
- package/audit/enums/audit.enums.js +18 -9
- package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
- package/audit/examples/decorator-value-mapping.example.js +414 -0
- package/audit/index.d.ts +5 -1
- package/audit/index.js +29 -2
- package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
- package/audit/interceptors/audit-action.interceptor.js +217 -0
- package/audit/interceptors/audit.interceptor.d.ts +1 -0
- package/audit/interceptors/audit.interceptor.js +19 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +132 -4
- package/audit/services/audit-action.service.d.ts +142 -0
- package/audit/services/audit-action.service.js +246 -0
- package/audit/services/audit-context.service.d.ts +91 -0
- package/audit/services/audit-context.service.js +170 -0
- package/audit/services/entity-audit.service.d.ts +220 -9
- package/audit/services/entity-audit.service.js +761 -72
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +23 -23
- package/audit/services/manual-audit-log.service.js +34 -57
- package/audit/services/multi-database.service.d.ts +0 -5
- package/audit/services/multi-database.service.js +0 -24
- package/audit/services/operation-description.service.d.ts +14 -3
- package/audit/services/operation-description.service.js +165 -26
- package/audit/services/transaction-audit.service.d.ts +1 -0
- package/audit/services/transaction-audit.service.js +12 -9
- package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
- package/audit/subscribers/entity-audit.subscriber.js +69 -5
- package/cache/cache.module.d.ts +7 -8
- package/cache/cache.module.js +15 -13
- package/cache/cache.service.d.ts +6 -4
- package/cache/cache.service.js +24 -12
- package/cache/decorators/cache-put.decorator.js +5 -4
- package/cache/dependencies/callback.dependency.js +9 -0
- package/cache/dependencies/db.dependency.d.ts +43 -12
- package/cache/dependencies/db.dependency.js +46 -18
- package/cache/dependencies/tag.dependency.d.ts +31 -4
- package/cache/dependencies/tag.dependency.js +100 -11
- package/cache/entities/index.d.ts +1 -0
- package/cache/entities/index.js +17 -0
- package/cache/entities/typeorm-cache.entity.d.ts +71 -0
- package/cache/entities/typeorm-cache.entity.js +110 -0
- package/cache/index.d.ts +2 -1
- package/cache/index.js +19 -2
- package/cache/interfaces/cache-options.interface.d.ts +8 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +77 -0
- package/cache/providers/lrucache.provider.js +228 -0
- package/cache/providers/redis-cache.provider.d.ts +1 -0
- package/cache/providers/redis-cache.provider.js +8 -6
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/common/boilerplate.polyfill.d.ts +1 -0
- package/common/boilerplate.polyfill.js +18 -1
- package/common/helpers/validation-metadata-helper.d.ts +112 -0
- package/common/helpers/validation-metadata-helper.js +164 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/decorators/examples/field-i18n.example.d.ts +294 -0
- package/decorators/examples/field-i18n.example.js +478 -0
- package/decorators/field.decorators.d.ts +95 -3
- package/decorators/field.decorators.js +152 -18
- package/decorators/transform.decorators.d.ts +0 -2
- package/decorators/transform.decorators.js +0 -23
- package/decorators/translate.decorator.d.ts +26 -0
- package/decorators/translate.decorator.js +26 -1
- package/email-log/email-log.constants.d.ts +8 -0
- package/email-log/email-log.constants.js +11 -0
- package/email-log/email-log.module.d.ts +47 -0
- package/email-log/email-log.module.js +140 -0
- package/email-log/index.d.ts +11 -0
- package/email-log/index.js +48 -0
- package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
- package/email-log/interfaces/email-log-options.interface.js +134 -0
- package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
- package/email-log/interfaces/email-log-transport.interface.js +2 -0
- package/email-log/interfaces/index.d.ts +2 -0
- package/email-log/interfaces/index.js +18 -0
- package/email-log/providers/email-provider.d.ts +42 -0
- package/email-log/providers/email-provider.js +127 -0
- package/email-log/providers/index.d.ts +1 -0
- package/email-log/providers/index.js +17 -0
- package/email-log/services/email-log-alert.service.d.ts +46 -0
- package/email-log/services/email-log-alert.service.js +162 -0
- package/email-log/services/email-log-formatter.service.d.ts +78 -0
- package/email-log/services/email-log-formatter.service.js +442 -0
- package/email-log/services/email-log-logger.service.d.ts +85 -0
- package/email-log/services/email-log-logger.service.js +168 -0
- package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
- package/email-log/services/email-log-rate-limiter.service.js +110 -0
- package/email-log/services/email-log-transport.service.d.ts +80 -0
- package/email-log/services/email-log-transport.service.js +271 -0
- package/email-log/services/index.d.ts +5 -0
- package/email-log/services/index.js +21 -0
- package/email-log/transports/index.d.ts +1 -0
- package/email-log/transports/index.js +17 -0
- package/email-log/transports/pino-email.transport.d.ts +56 -0
- package/email-log/transports/pino-email.transport.js +188 -0
- package/email-log/utils/index.d.ts +2 -0
- package/email-log/utils/index.js +18 -0
- package/email-log/utils/log-level.helper.d.ts +46 -0
- package/email-log/utils/log-level.helper.js +74 -0
- package/email-log/utils/pino-transport.utils.d.ts +135 -0
- package/email-log/utils/pino-transport.utils.js +238 -0
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/bad-request.filter.d.ts +9 -0
- package/filters/bad-request.filter.js +57 -16
- package/http-client/config/http-client.config.d.ts +5 -0
- package/http-client/config/http-client.config.js +27 -14
- package/http-client/decorators/http-client.decorators.d.ts +7 -28
- package/http-client/decorators/http-client.decorators.js +124 -99
- package/http-client/entities/http-log.entity.d.ts +0 -20
- package/http-client/entities/http-log.entity.js +1 -21
- package/http-client/examples/advanced-usage.example.d.ts +4 -5
- package/http-client/examples/advanced-usage.example.js +7 -59
- package/http-client/examples/axios-config-extended.example.d.ts +17 -0
- package/http-client/examples/axios-config-extended.example.js +311 -0
- package/http-client/examples/flexible-response-example.d.ts +28 -0
- package/http-client/examples/flexible-response-example.js +120 -0
- package/http-client/examples/index.d.ts +2 -0
- package/http-client/examples/index.js +2 -0
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/examples/ssl-certificate.example.d.ts +47 -0
- package/http-client/examples/ssl-certificate.example.js +432 -0
- package/http-client/http-client.module.d.ts +43 -2
- package/http-client/http-client.module.js +150 -90
- package/http-client/index.d.ts +1 -1
- package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
- package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
- package/http-client/services/api-client-registry.service.d.ts +8 -21
- package/http-client/services/api-client-registry.service.js +31 -282
- package/http-client/services/circuit-breaker.service.d.ts +69 -2
- package/http-client/services/circuit-breaker.service.js +185 -7
- package/http-client/services/http-client.service.d.ts +85 -23
- package/http-client/services/http-client.service.js +512 -168
- package/http-client/services/http-log-query.service.js +0 -13
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/logging.service.d.ts +69 -16
- package/http-client/services/logging.service.js +290 -170
- package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
- package/http-client/utils/call-stack-extractor.util.js +35 -0
- package/http-client/utils/context-extractor.util.d.ts +2 -0
- package/http-client/utils/context-extractor.util.js +17 -3
- package/http-client/utils/curl-generator.util.js +2 -5
- package/http-client/utils/index.d.ts +2 -0
- package/http-client/utils/index.js +2 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +154 -0
- package/http-client/utils/retry-recorder.util.d.ts +0 -4
- package/http-client/utils/retry-recorder.util.js +2 -27
- package/http-client/utils/sanitize.util.d.ts +58 -0
- package/http-client/utils/sanitize.util.js +188 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +354 -0
- package/index.d.ts +4 -1
- package/index.js +6 -1
- package/interceptors/translation-interceptor.service.d.ts +7 -0
- package/interceptors/translation-interceptor.service.js +40 -8
- package/ip-filter/constants.d.ts +21 -0
- package/ip-filter/constants.js +24 -0
- package/ip-filter/decorators/index.d.ts +1 -0
- package/ip-filter/decorators/index.js +17 -0
- package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
- package/ip-filter/decorators/ip-filter.decorator.js +79 -0
- package/ip-filter/guards/index.d.ts +1 -0
- package/ip-filter/guards/index.js +17 -0
- package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
- package/ip-filter/guards/ip-filter.guard.js +174 -0
- package/ip-filter/index.d.ts +7 -0
- package/ip-filter/index.js +23 -0
- package/ip-filter/interfaces/index.d.ts +4 -0
- package/ip-filter/interfaces/index.js +20 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
- package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
- package/ip-filter/interfaces/ip-rule.interface.js +2 -0
- package/ip-filter/ip-filter.module.d.ts +55 -0
- package/ip-filter/ip-filter.module.js +105 -0
- package/ip-filter/services/index.d.ts +1 -0
- package/ip-filter/services/index.js +17 -0
- package/ip-filter/services/ip-filter.service.d.ts +92 -0
- package/ip-filter/services/ip-filter.service.js +238 -0
- package/ip-filter/utils/index.d.ts +1 -0
- package/ip-filter/utils/index.js +17 -0
- package/ip-filter/utils/ip-utils.d.ts +61 -0
- package/ip-filter/utils/ip-utils.js +162 -0
- package/package.json +34 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +13 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +5 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.module.d.ts +6 -0
- package/redis-lock/redis-lock.module.js +136 -77
- package/redis-lock/redis-lock.service.d.ts +31 -0
- package/redis-lock/redis-lock.service.js +124 -17
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +3 -2
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +1 -0
- package/setup/schedule.decorator.js +28 -13
- package/setup/worker.decorator.js +10 -1
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
- package/shared/services/api-config.service.d.ts +41 -0
- package/shared/services/api-config.service.js +175 -8
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validators/custom-validate.validator.d.ts +1 -0
- package/validators/custom-validate.validator.js +1 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/is-exists.validator.d.ts +15 -6
- package/validators/is-exists.validator.js +8 -7
- package/validators/is-unique.validator.d.ts +22 -7
- package/validators/is-unique.validator.js +41 -17
- package/vault/vault-config.service.js +1 -1
- package/cache/providers/memory-cache.provider.d.ts +0 -49
- package/cache/providers/memory-cache.provider.js +0 -197
- package/http-client/services/cache.service.d.ts +0 -76
- package/http-client/services/cache.service.js +0 -333
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
|
@@ -23,11 +23,9 @@ exports.IsUnique = IsUnique;
|
|
|
23
23
|
const class_validator_1 = require("class-validator");
|
|
24
24
|
const nestjs_i18n_1 = require("nestjs-i18n");
|
|
25
25
|
const common_1 = require("@nestjs/common");
|
|
26
|
-
const
|
|
26
|
+
const transaction_1 = require("@nest-omni/transaction");
|
|
27
27
|
let IsUniqueValidator = class IsUniqueValidator {
|
|
28
|
-
constructor(
|
|
29
|
-
this.transactionHost = transactionHost;
|
|
30
|
-
}
|
|
28
|
+
constructor() { }
|
|
31
29
|
/**
|
|
32
30
|
* 解析 Entity 引用,支持多种形式:
|
|
33
31
|
* 1. Entity 类直接引用
|
|
@@ -84,40 +82,66 @@ let IsUniqueValidator = class IsUniqueValidator {
|
|
|
84
82
|
}
|
|
85
83
|
validate(value, args) {
|
|
86
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
-
const [entityRef, findCondition] = args.constraints;
|
|
85
|
+
const [entityRef, findCondition, options] = args.constraints;
|
|
88
86
|
// 解析 Entity 引用
|
|
89
87
|
const entityClass = this.resolveEntity(entityRef, args.property, args.object);
|
|
90
|
-
|
|
88
|
+
// 获取数据源(支持多数据源)
|
|
89
|
+
const dataSourceName = (options === null || options === void 0 ? void 0 : options.dataSource) || 'default';
|
|
90
|
+
const dataSource = (0, transaction_1.getDataSource)(dataSourceName);
|
|
91
|
+
const repository = dataSource.getRepository(entityClass);
|
|
91
92
|
args.value = value;
|
|
92
93
|
let exists;
|
|
93
94
|
const defCon = findCondition(args);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
// 获取用于判断是否为新建的字段
|
|
96
|
+
// 优先级:手动配置的 uniqueKeys > 实体主键
|
|
97
|
+
let pkCols;
|
|
98
|
+
if ((options === null || options === void 0 ? void 0 : options.uniqueKeys) && options.uniqueKeys.length > 0) {
|
|
99
|
+
// 1. 使用手动指定的字段
|
|
100
|
+
pkCols = options.uniqueKeys;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// 2. 使用实体的主键
|
|
104
|
+
pkCols = repository.metadata.primaryColumns.map((column) => column.propertyName);
|
|
105
|
+
}
|
|
106
|
+
// 如果没有主键也没有 uniqueKeys,使用简化逻辑
|
|
107
|
+
// 查询条件本身表示唯一性,只要存在记录就不允许
|
|
108
|
+
if (pkCols.length === 0) {
|
|
109
|
+
const count = yield repository.count({ where: defCon });
|
|
110
|
+
exists = count < 1;
|
|
111
|
+
return exists;
|
|
112
|
+
}
|
|
113
|
+
// 修复:检查是否为新建记录
|
|
114
|
+
// 如果所有 uniqueKeys/主键都没有值(null/undefined),则为新建
|
|
115
|
+
const isNew = !pkCols.some((pk) => {
|
|
116
|
+
const pkValue = args.object[pk];
|
|
117
|
+
return pkValue !== null && pkValue !== undefined && pkValue !== '';
|
|
118
|
+
});
|
|
119
|
+
if (isNew) {
|
|
120
|
+
// 新建场景:简单检查是否存在相同值的记录
|
|
121
|
+
exists = (yield repository.count({ where: defCon })) < 1;
|
|
101
122
|
}
|
|
102
123
|
else {
|
|
124
|
+
// 更新场景:需要排除当前记录(通过主键对比)
|
|
103
125
|
const entities = yield repository
|
|
104
126
|
.createQueryBuilder()
|
|
105
127
|
.where(defCon)
|
|
106
|
-
.select(pkCols)
|
|
107
128
|
.limit(2)
|
|
108
|
-
.
|
|
129
|
+
.getMany();
|
|
109
130
|
const entityCount = entities.length;
|
|
110
131
|
if (entityCount === 1) {
|
|
132
|
+
// 只有一条记录,检查是否是当前记录本身
|
|
111
133
|
const entity = entities[0];
|
|
112
134
|
const oldPk = {};
|
|
113
135
|
const newPk = {};
|
|
114
|
-
pkCols.
|
|
136
|
+
pkCols.forEach((pk) => {
|
|
115
137
|
oldPk[pk] = entity[pk];
|
|
116
138
|
newPk[pk] = args.object[pk];
|
|
117
139
|
});
|
|
140
|
+
// 如果主键相同,说明是自己,允许(唯一)
|
|
118
141
|
exists = JSON.stringify(oldPk) === JSON.stringify(newPk);
|
|
119
142
|
}
|
|
120
143
|
else {
|
|
144
|
+
// 0条或多条记录
|
|
121
145
|
exists = entityCount < 1;
|
|
122
146
|
}
|
|
123
147
|
}
|
|
@@ -132,7 +156,7 @@ exports.IsUniqueValidator = IsUniqueValidator;
|
|
|
132
156
|
exports.IsUniqueValidator = IsUniqueValidator = __decorate([
|
|
133
157
|
(0, common_1.Injectable)(),
|
|
134
158
|
(0, class_validator_1.ValidatorConstraint)({ name: 'isUnique', async: true }),
|
|
135
|
-
__metadata("design:paramtypes", [
|
|
159
|
+
__metadata("design:paramtypes", [])
|
|
136
160
|
], IsUniqueValidator);
|
|
137
161
|
function IsUnique(constraints, validationOptions) {
|
|
138
162
|
return function (object, propertyName) {
|
|
@@ -172,7 +172,7 @@ let VaultConfigService = VaultConfigService_1 = class VaultConfigService {
|
|
|
172
172
|
}
|
|
173
173
|
try {
|
|
174
174
|
const health = yield this.vaultClient.health();
|
|
175
|
-
return health && !health.sealed;
|
|
175
|
+
return !!(health && !health.sealed);
|
|
176
176
|
}
|
|
177
177
|
catch (error) {
|
|
178
178
|
this.logger.error('Vault health check failed', error.message);
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { BaseCacheProvider } from './base-cache.provider';
|
|
2
|
-
/**
|
|
3
|
-
* Memory cache provider using native Map with TTL support
|
|
4
|
-
*
|
|
5
|
-
* This is the L2 cache layer - process-level caching.
|
|
6
|
-
* Data is stored in memory and shared across all requests in the same process.
|
|
7
|
-
*
|
|
8
|
-
* Faster than Redis but not shared across multiple processes/servers.
|
|
9
|
-
*/
|
|
10
|
-
export declare class MemoryCacheProvider extends BaseCacheProvider {
|
|
11
|
-
private cache;
|
|
12
|
-
private keys;
|
|
13
|
-
private defaultTtl?;
|
|
14
|
-
private namespace;
|
|
15
|
-
constructor(options?: {
|
|
16
|
-
ttl?: number;
|
|
17
|
-
namespace?: string;
|
|
18
|
-
});
|
|
19
|
-
getName(): string;
|
|
20
|
-
get<T>(key: string): Promise<T | null>;
|
|
21
|
-
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
22
|
-
delete(key: string | string[]): Promise<void>;
|
|
23
|
-
deletePattern(pattern: string): Promise<number>;
|
|
24
|
-
clear(): Promise<void>;
|
|
25
|
-
has(key: string): Promise<boolean>;
|
|
26
|
-
/**
|
|
27
|
-
* Get all keys (for debugging/testing)
|
|
28
|
-
*/
|
|
29
|
-
getAllKeys(): string[];
|
|
30
|
-
/**
|
|
31
|
-
* Get cache size
|
|
32
|
-
*/
|
|
33
|
-
getSize(): number;
|
|
34
|
-
/**
|
|
35
|
-
* Clean up expired items (optional maintenance method)
|
|
36
|
-
*/
|
|
37
|
-
cleanup(): number;
|
|
38
|
-
/**
|
|
39
|
-
* Optimized mget with batch cleanup
|
|
40
|
-
*/
|
|
41
|
-
mget<T>(keys: string[]): Promise<(T | null)[]>;
|
|
42
|
-
/**
|
|
43
|
-
* Optimized mset
|
|
44
|
-
*/
|
|
45
|
-
mset(items: Array<{
|
|
46
|
-
key: string;
|
|
47
|
-
value: any;
|
|
48
|
-
}>, ttl?: number): Promise<void>;
|
|
49
|
-
}
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MemoryCacheProvider = void 0;
|
|
13
|
-
const base_cache_provider_1 = require("./base-cache.provider");
|
|
14
|
-
/**
|
|
15
|
-
* Memory cache provider using native Map with TTL support
|
|
16
|
-
*
|
|
17
|
-
* This is the L2 cache layer - process-level caching.
|
|
18
|
-
* Data is stored in memory and shared across all requests in the same process.
|
|
19
|
-
*
|
|
20
|
-
* Faster than Redis but not shared across multiple processes/servers.
|
|
21
|
-
*/
|
|
22
|
-
class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
23
|
-
constructor(options) {
|
|
24
|
-
super();
|
|
25
|
-
this.cache = new Map();
|
|
26
|
-
this.keys = new Set();
|
|
27
|
-
this.defaultTtl = options === null || options === void 0 ? void 0 : options.ttl;
|
|
28
|
-
this.namespace = (options === null || options === void 0 ? void 0 : options.namespace) || 'cache:memory';
|
|
29
|
-
}
|
|
30
|
-
getName() {
|
|
31
|
-
return 'Memory';
|
|
32
|
-
}
|
|
33
|
-
get(key) {
|
|
34
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
try {
|
|
36
|
-
const item = this.cache.get(key);
|
|
37
|
-
if (!item) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
// Check if item has expired
|
|
41
|
-
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
42
|
-
this.cache.delete(key);
|
|
43
|
-
this.keys.delete(key);
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return item.value;
|
|
47
|
-
}
|
|
48
|
-
catch (_a) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
set(key, value, ttl) {
|
|
54
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
try {
|
|
56
|
-
const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : this.defaultTtl;
|
|
57
|
-
const expiresAt = effectiveTtl ? Date.now() + effectiveTtl : undefined;
|
|
58
|
-
const item = {
|
|
59
|
-
value,
|
|
60
|
-
expiresAt,
|
|
61
|
-
};
|
|
62
|
-
this.cache.set(key, item);
|
|
63
|
-
this.keys.add(key);
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
throw new Error(`MemoryCacheProvider: Failed to set key ${key}: ${error instanceof Error ? error.message : String(error)}`);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
delete(key) {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
try {
|
|
73
|
-
if (Array.isArray(key)) {
|
|
74
|
-
key.forEach((k) => {
|
|
75
|
-
this.cache.delete(k);
|
|
76
|
-
this.keys.delete(k);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
this.cache.delete(key);
|
|
81
|
-
this.keys.delete(key);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
throw new Error(`MemoryCacheProvider: Failed to delete key(s): ${error instanceof Error ? error.message : String(error)}`);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
deletePattern(pattern) {
|
|
90
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
try {
|
|
92
|
-
const regex = this.patternToRegex(pattern);
|
|
93
|
-
const matchedKeys = Array.from(this.keys).filter((key) => regex.test(key));
|
|
94
|
-
if (matchedKeys.length > 0) {
|
|
95
|
-
yield this.delete(matchedKeys);
|
|
96
|
-
}
|
|
97
|
-
return matchedKeys.length;
|
|
98
|
-
}
|
|
99
|
-
catch (_a) {
|
|
100
|
-
return 0;
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
clear() {
|
|
105
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
try {
|
|
107
|
-
this.cache.clear();
|
|
108
|
-
this.keys.clear();
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
throw new Error(`MemoryCacheProvider: Failed to clear cache: ${error instanceof Error ? error.message : String(error)}`);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
has(key) {
|
|
116
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
try {
|
|
118
|
-
const item = this.cache.get(key);
|
|
119
|
-
if (!item) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
// Check if item has expired
|
|
123
|
-
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
124
|
-
this.cache.delete(key);
|
|
125
|
-
this.keys.delete(key);
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
return true;
|
|
129
|
-
}
|
|
130
|
-
catch (_a) {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Get all keys (for debugging/testing)
|
|
137
|
-
*/
|
|
138
|
-
getAllKeys() {
|
|
139
|
-
return Array.from(this.keys);
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get cache size
|
|
143
|
-
*/
|
|
144
|
-
getSize() {
|
|
145
|
-
return this.keys.size;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Clean up expired items (optional maintenance method)
|
|
149
|
-
*/
|
|
150
|
-
cleanup() {
|
|
151
|
-
let cleaned = 0;
|
|
152
|
-
const now = Date.now();
|
|
153
|
-
for (const [key, item] of this.cache.entries()) {
|
|
154
|
-
if (item.expiresAt && now > item.expiresAt) {
|
|
155
|
-
this.cache.delete(key);
|
|
156
|
-
this.keys.delete(key);
|
|
157
|
-
cleaned++;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return cleaned;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Optimized mget with batch cleanup
|
|
164
|
-
*/
|
|
165
|
-
mget(keys) {
|
|
166
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
-
const results = [];
|
|
168
|
-
const now = Date.now();
|
|
169
|
-
for (const key of keys) {
|
|
170
|
-
const item = this.cache.get(key);
|
|
171
|
-
if (!item) {
|
|
172
|
-
results.push(null);
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
// Check if item has expired
|
|
176
|
-
if (item.expiresAt && now > item.expiresAt) {
|
|
177
|
-
this.cache.delete(key);
|
|
178
|
-
this.keys.delete(key);
|
|
179
|
-
results.push(null);
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
results.push(item.value);
|
|
183
|
-
}
|
|
184
|
-
return results;
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Optimized mset
|
|
189
|
-
*/
|
|
190
|
-
mset(items, ttl) {
|
|
191
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
192
|
-
const promises = items.map((item) => this.set(item.key, item.value, ttl));
|
|
193
|
-
yield Promise.all(promises);
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
exports.MemoryCacheProvider = MemoryCacheProvider;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
-
import { HttpCacheConfig } from '../interfaces/http-client-config.interface';
|
|
3
|
-
import { CacheService } from '../../cache/cache.service';
|
|
4
|
-
/**
|
|
5
|
-
* HTTP缓存服务
|
|
6
|
-
* 集成现有的三层缓存架构
|
|
7
|
-
*/
|
|
8
|
-
export declare class HttpCacheService {
|
|
9
|
-
private readonly cacheService;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
constructor(cacheService: CacheService);
|
|
12
|
-
/**
|
|
13
|
-
* 获取缓存的响应
|
|
14
|
-
*/
|
|
15
|
-
get(config: AxiosRequestConfig, cacheOptions: HttpCacheConfig): Promise<AxiosResponse | null>;
|
|
16
|
-
/**
|
|
17
|
-
* 缓存响应
|
|
18
|
-
*/
|
|
19
|
-
set(config: AxiosRequestConfig, response: AxiosResponse, cacheOptions: HttpCacheConfig): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* 清除缓存
|
|
22
|
-
*/
|
|
23
|
-
clear(pattern?: string): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* 获取缓存统计信息
|
|
26
|
-
*/
|
|
27
|
-
getStats(): Promise<any>;
|
|
28
|
-
/**
|
|
29
|
-
* 清理过期缓存
|
|
30
|
-
*/
|
|
31
|
-
cleanup(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* 预热缓存
|
|
34
|
-
*/
|
|
35
|
-
warmup(urls: string[], headers?: Record<string, string>): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* 获取缓存命中率详情
|
|
38
|
-
*/
|
|
39
|
-
getDetailedStats(): Promise<any>;
|
|
40
|
-
/**
|
|
41
|
-
* 生成缓存键
|
|
42
|
-
*/
|
|
43
|
-
private generateCacheKey;
|
|
44
|
-
/**
|
|
45
|
-
* 构建完整的缓存键
|
|
46
|
-
*/
|
|
47
|
-
private buildCacheKey;
|
|
48
|
-
/**
|
|
49
|
-
* 映射缓存层
|
|
50
|
-
*/
|
|
51
|
-
private mapLayers;
|
|
52
|
-
/**
|
|
53
|
-
* 选择用于缓存键的头信息
|
|
54
|
-
*/
|
|
55
|
-
private selectHeadersForCacheKey;
|
|
56
|
-
/**
|
|
57
|
-
* 判断响应是否可缓存
|
|
58
|
-
*/
|
|
59
|
-
private isResponseCacheable;
|
|
60
|
-
/**
|
|
61
|
-
* 哈希对象
|
|
62
|
-
*/
|
|
63
|
-
private hashObject;
|
|
64
|
-
/**
|
|
65
|
-
* 计算综合命中率
|
|
66
|
-
*/
|
|
67
|
-
private calculateHitRate;
|
|
68
|
-
/**
|
|
69
|
-
* 获取最近的缓存活动
|
|
70
|
-
*/
|
|
71
|
-
private getRecentCacheActivity;
|
|
72
|
-
/**
|
|
73
|
-
* 生成缓存优化建议
|
|
74
|
-
*/
|
|
75
|
-
private generateRecommendations;
|
|
76
|
-
}
|