@dofe/infra-prisma 0.1.1

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 (69) hide show
  1. package/dist/db-metrics/index.d.ts +2 -0
  2. package/dist/db-metrics/index.d.ts.map +1 -0
  3. package/dist/db-metrics/index.js +18 -0
  4. package/dist/db-metrics/index.js.map +1 -0
  5. package/dist/db-metrics/src/db-metrics.module.d.ts +22 -0
  6. package/dist/db-metrics/src/db-metrics.module.d.ts.map +1 -0
  7. package/dist/db-metrics/src/db-metrics.module.js +140 -0
  8. package/dist/db-metrics/src/db-metrics.module.js.map +1 -0
  9. package/dist/db-metrics/src/db-metrics.service.d.ts +183 -0
  10. package/dist/db-metrics/src/db-metrics.service.d.ts.map +1 -0
  11. package/dist/db-metrics/src/db-metrics.service.js +334 -0
  12. package/dist/db-metrics/src/db-metrics.service.js.map +1 -0
  13. package/dist/db-metrics/src/index.d.ts +6 -0
  14. package/dist/db-metrics/src/index.d.ts.map +1 -0
  15. package/dist/db-metrics/src/index.js +24 -0
  16. package/dist/db-metrics/src/index.js.map +1 -0
  17. package/dist/index.d.ts +9 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +25 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/middleware/soft-delete.middleware.d.ts +51 -0
  22. package/dist/middleware/soft-delete.middleware.d.ts.map +1 -0
  23. package/dist/middleware/soft-delete.middleware.js +289 -0
  24. package/dist/middleware/soft-delete.middleware.js.map +1 -0
  25. package/dist/middleware/tenant-isolation-extension.d.ts +18 -0
  26. package/dist/middleware/tenant-isolation-extension.d.ts.map +1 -0
  27. package/dist/middleware/tenant-isolation-extension.js +124 -0
  28. package/dist/middleware/tenant-isolation-extension.js.map +1 -0
  29. package/dist/prisma/index.d.ts +7 -0
  30. package/dist/prisma/index.d.ts.map +1 -0
  31. package/dist/prisma/index.js +25 -0
  32. package/dist/prisma/index.js.map +1 -0
  33. package/dist/prisma/prisma.module.d.ts +3 -0
  34. package/dist/prisma/prisma.module.d.ts.map +1 -0
  35. package/dist/prisma/prisma.module.js +26 -0
  36. package/dist/prisma/prisma.module.js.map +1 -0
  37. package/dist/prisma/prisma.service.d.ts +10 -0
  38. package/dist/prisma/prisma.service.d.ts.map +1 -0
  39. package/dist/prisma/prisma.service.js +36 -0
  40. package/dist/prisma/prisma.service.js.map +1 -0
  41. package/dist/prisma/types.d.ts +4 -0
  42. package/dist/prisma/types.d.ts.map +1 -0
  43. package/dist/prisma/types.js +22 -0
  44. package/dist/prisma/types.js.map +1 -0
  45. package/dist/prisma-read/prisma-read.module.d.ts +3 -0
  46. package/dist/prisma-read/prisma-read.module.d.ts.map +1 -0
  47. package/dist/prisma-read/prisma-read.module.js +24 -0
  48. package/dist/prisma-read/prisma-read.module.js.map +1 -0
  49. package/dist/prisma-read/prisma-read.service.d.ts +47 -0
  50. package/dist/prisma-read/prisma-read.service.d.ts.map +1 -0
  51. package/dist/prisma-read/prisma-read.service.js +222 -0
  52. package/dist/prisma-read/prisma-read.service.js.map +1 -0
  53. package/dist/prisma-write/prisma-write.module.d.ts +3 -0
  54. package/dist/prisma-write/prisma-write.module.d.ts.map +1 -0
  55. package/dist/prisma-write/prisma-write.module.js +24 -0
  56. package/dist/prisma-write/prisma-write.module.js.map +1 -0
  57. package/dist/prisma-write/prisma-write.service.d.ts +47 -0
  58. package/dist/prisma-write/prisma-write.service.d.ts.map +1 -0
  59. package/dist/prisma-write/prisma-write.service.js +222 -0
  60. package/dist/prisma-write/prisma-write.service.js.map +1 -0
  61. package/dist/prometheus/index.d.ts +5 -0
  62. package/dist/prometheus/index.d.ts.map +1 -0
  63. package/dist/prometheus/index.js +9 -0
  64. package/dist/prometheus/index.js.map +1 -0
  65. package/dist/prometheus/prometheus.module.d.ts +3 -0
  66. package/dist/prometheus/prometheus.module.d.ts.map +1 -0
  67. package/dist/prometheus/prometheus.module.js +230 -0
  68. package/dist/prometheus/prometheus.module.js.map +1 -0
  69. package/package.json +42 -0
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DbMetricsService = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const config_1 = require("@nestjs/config");
21
+ const nest_winston_1 = require("nest-winston");
22
+ const winston_1 = require("winston");
23
+ const prom_client_1 = require("prom-client");
24
+ const nestjs_prometheus_1 = require("@willsoto/nestjs-prometheus");
25
+ const infra_common_1 = require("@dofe/infra-common");
26
+ const environment_util_1 = __importDefault(require("@dofe/infra-utils/environment.util"));
27
+ /**
28
+ * Default configuration values
29
+ * 默认配置值
30
+ */
31
+ const DEFAULT_CONFIG = {
32
+ enabled: true,
33
+ slowQueryThresholds: {
34
+ info: 100,
35
+ warn: 500,
36
+ error: 1000,
37
+ },
38
+ logQueryParams: true,
39
+ logQueryResult: false,
40
+ maxParamLogLength: 1000,
41
+ };
42
+ /**
43
+ * Database Metrics Service
44
+ * 数据库指标服务
45
+ *
46
+ * Provides unified metrics collection and logging for database operations.
47
+ * 为数据库操作提供统一的指标收集和日志记录。
48
+ */
49
+ let DbMetricsService = class DbMetricsService {
50
+ configService;
51
+ logger;
52
+ queryDuration;
53
+ queryTotal;
54
+ slowQueryTotal;
55
+ txDuration;
56
+ txTotal;
57
+ activeTx;
58
+ config = DEFAULT_CONFIG;
59
+ constructor(configService, logger, queryDuration, queryTotal, slowQueryTotal, txDuration, txTotal, activeTx) {
60
+ this.configService = configService;
61
+ this.logger = logger;
62
+ this.queryDuration = queryDuration;
63
+ this.queryTotal = queryTotal;
64
+ this.slowQueryTotal = slowQueryTotal;
65
+ this.txDuration = txDuration;
66
+ this.txTotal = txTotal;
67
+ this.activeTx = activeTx;
68
+ }
69
+ onModuleInit() {
70
+ const config = this.configService?.get('dbMetrics');
71
+ if (config) {
72
+ this.config = { ...DEFAULT_CONFIG, ...config };
73
+ }
74
+ if (environment_util_1.default.isProduction()) {
75
+ this.logger?.info('DbMetricsService module initialized', {
76
+ config: this.config,
77
+ });
78
+ }
79
+ else {
80
+ this.logger?.debug('DbMetricsService module initialized', {
81
+ config: this.config,
82
+ });
83
+ }
84
+ }
85
+ /**
86
+ * Get current configuration
87
+ * 获取当前配置
88
+ */
89
+ getConfig() {
90
+ return this.config;
91
+ }
92
+ /**
93
+ * Check if metrics collection is enabled
94
+ * 检查指标收集是否启用
95
+ */
96
+ isEnabled() {
97
+ return this.config.enabled;
98
+ }
99
+ // =========================================================================
100
+ // Query Metrics Methods
101
+ // 查询指标方法
102
+ // =========================================================================
103
+ /**
104
+ * Start tracking a query
105
+ * 开始跟踪查询
106
+ */
107
+ recordQueryStart() {
108
+ return {
109
+ startTime: Date.now(),
110
+ traceId: this.getTraceId(),
111
+ };
112
+ }
113
+ /**
114
+ * Record query completion
115
+ * 记录查询完成
116
+ */
117
+ recordQueryEnd(ctx, params, status, args, error) {
118
+ if (!this.config.enabled)
119
+ return;
120
+ const duration = Date.now() - ctx.startTime;
121
+ const durationSec = duration / 1000;
122
+ const { model, action, dbType } = params;
123
+ // Record Prometheus metrics
124
+ this.queryDuration?.observe({ model, action, db_type: dbType, status }, durationSec);
125
+ this.queryTotal?.inc({ model, action, db_type: dbType, status });
126
+ // Determine threshold level and log appropriately
127
+ const thresholdLevel = this.getThresholdLevel(duration);
128
+ if (thresholdLevel) {
129
+ this.slowQueryTotal?.inc({
130
+ model,
131
+ action,
132
+ db_type: dbType,
133
+ threshold_level: thresholdLevel,
134
+ });
135
+ }
136
+ // Log query information
137
+ this.logQuery(ctx.traceId, duration, params, status, args, error, thresholdLevel);
138
+ }
139
+ /**
140
+ * Determine the threshold level based on query duration
141
+ * 根据查询时长确定阈值级别
142
+ */
143
+ getThresholdLevel(duration) {
144
+ const { slowQueryThresholds } = this.config;
145
+ if (duration >= slowQueryThresholds.error)
146
+ return 'error';
147
+ if (duration >= slowQueryThresholds.warn)
148
+ return 'warn';
149
+ if (duration >= slowQueryThresholds.info)
150
+ return 'info';
151
+ return null;
152
+ }
153
+ /**
154
+ * Log query information with appropriate level
155
+ * 以适当的级别记录查询信息
156
+ */
157
+ logQuery(traceId, duration, params, status, args, error, thresholdLevel) {
158
+ const logData = {
159
+ traceId,
160
+ duration: `${duration}ms`,
161
+ model: params.model,
162
+ action: params.action,
163
+ dbType: params.dbType,
164
+ status,
165
+ timestamp: new Date().toISOString(),
166
+ };
167
+ if (this.config.logQueryParams && args) {
168
+ const argsStr = JSON.stringify(args);
169
+ logData.params =
170
+ argsStr.length > this.config.maxParamLogLength
171
+ ? argsStr.substring(0, this.config.maxParamLogLength) + '...'
172
+ : argsStr;
173
+ }
174
+ if (error) {
175
+ logData.error = { name: error.name, message: error.message };
176
+ }
177
+ // Log based on threshold level
178
+ if (thresholdLevel === 'error') {
179
+ this.logger?.error('Slow Query [CRITICAL]', logData);
180
+ }
181
+ else if (thresholdLevel === 'warn') {
182
+ this.logger?.warn('Slow Query [WARNING]', logData);
183
+ }
184
+ else if (thresholdLevel === 'info') {
185
+ this.logger?.info('Slow Query [INFO]', logData);
186
+ }
187
+ else if (status === 'error') {
188
+ this.logger?.error('Query Error', logData);
189
+ }
190
+ else {
191
+ this.logger?.debug('Query Executed', logData);
192
+ }
193
+ }
194
+ // =========================================================================
195
+ // Transaction Metrics Methods
196
+ // 事务指标方法
197
+ // =========================================================================
198
+ /**
199
+ * Start tracking a transaction
200
+ * 开始跟踪事务
201
+ */
202
+ recordTransactionStart() {
203
+ this.activeTx?.inc();
204
+ return {
205
+ startTime: Date.now(),
206
+ traceId: this.getTraceId(),
207
+ sqlCount: 0,
208
+ tablesInvolved: new Set(),
209
+ };
210
+ }
211
+ /**
212
+ * Increment SQL count in transaction context
213
+ * 增加事务上下文中的 SQL 计数
214
+ */
215
+ incrementSqlCount(ctx, model) {
216
+ ctx.sqlCount++;
217
+ if (model) {
218
+ ctx.tablesInvolved.add(model);
219
+ }
220
+ }
221
+ /**
222
+ * Record transaction completion
223
+ * 记录事务完成
224
+ */
225
+ recordTransactionEnd(ctx, status, metadata = {}) {
226
+ if (!this.config.enabled)
227
+ return;
228
+ this.activeTx?.dec();
229
+ const duration = Date.now() - ctx.startTime;
230
+ const durationSec = duration / 1000;
231
+ const labels = {
232
+ status,
233
+ retry_count: String(metadata.retryCount || 0),
234
+ isolation_level: metadata.isolationLevel || 'default',
235
+ };
236
+ this.txDuration?.observe(labels, durationSec);
237
+ this.txTotal?.inc(labels);
238
+ // Merge context data with metadata
239
+ const fullMetadata = {
240
+ ...metadata,
241
+ sqlCount: ctx.sqlCount,
242
+ tablesInvolved: Array.from(ctx.tablesInvolved),
243
+ };
244
+ this.logTransaction(ctx.traceId, duration, status, fullMetadata);
245
+ }
246
+ /**
247
+ * Log transaction information
248
+ * 记录事务信息
249
+ */
250
+ logTransaction(traceId, duration, status, metadata) {
251
+ const logData = {
252
+ traceId,
253
+ duration: `${duration}ms`,
254
+ status,
255
+ ...metadata,
256
+ timestamp: new Date().toISOString(),
257
+ };
258
+ if (status === 'error' || status === 'rollback') {
259
+ this.logger?.error('Transaction Failed', logData);
260
+ }
261
+ else if (duration > this.config.slowQueryThresholds.warn) {
262
+ this.logger?.warn('Slow Transaction', logData);
263
+ }
264
+ else {
265
+ this.logger?.info('Transaction Completed', logData);
266
+ }
267
+ }
268
+ // =========================================================================
269
+ // Utility Methods
270
+ // 工具方法
271
+ // =========================================================================
272
+ /**
273
+ * Get current trace ID from CLS namespace
274
+ * 从 CLS 命名空间获取当前 traceId
275
+ */
276
+ getTraceId() {
277
+ try {
278
+ return infra_common_1.clsNamespace?.get('traceID') || 'unknown';
279
+ }
280
+ catch {
281
+ return 'unknown';
282
+ }
283
+ }
284
+ /**
285
+ * Create a fallback context when metrics service is not available
286
+ * 当指标服务不可用时创建回退上下文
287
+ */
288
+ static createFallbackQueryContext() {
289
+ return {
290
+ startTime: Date.now(),
291
+ traceId: 'unknown',
292
+ };
293
+ }
294
+ /**
295
+ * Create a fallback transaction context
296
+ * 创建回退事务上下文
297
+ */
298
+ static createFallbackTransactionContext() {
299
+ return {
300
+ startTime: Date.now(),
301
+ traceId: 'unknown',
302
+ sqlCount: 0,
303
+ tablesInvolved: new Set(),
304
+ };
305
+ }
306
+ };
307
+ exports.DbMetricsService = DbMetricsService;
308
+ exports.DbMetricsService = DbMetricsService = __decorate([
309
+ (0, common_1.Injectable)(),
310
+ __param(0, (0, common_1.Optional)()),
311
+ __param(1, (0, common_1.Optional)()),
312
+ __param(1, (0, common_1.Inject)(nest_winston_1.WINSTON_MODULE_PROVIDER)),
313
+ __param(2, (0, common_1.Optional)()),
314
+ __param(2, (0, nestjs_prometheus_1.InjectMetric)('prisma_query_duration_seconds')),
315
+ __param(3, (0, common_1.Optional)()),
316
+ __param(3, (0, nestjs_prometheus_1.InjectMetric)('prisma_query_total')),
317
+ __param(4, (0, common_1.Optional)()),
318
+ __param(4, (0, nestjs_prometheus_1.InjectMetric)('prisma_slow_query_total')),
319
+ __param(5, (0, common_1.Optional)()),
320
+ __param(5, (0, nestjs_prometheus_1.InjectMetric)('prisma_transaction_duration_seconds')),
321
+ __param(6, (0, common_1.Optional)()),
322
+ __param(6, (0, nestjs_prometheus_1.InjectMetric)('prisma_transaction_total')),
323
+ __param(7, (0, common_1.Optional)()),
324
+ __param(7, (0, nestjs_prometheus_1.InjectMetric)('prisma_active_transactions')),
325
+ __metadata("design:paramtypes", [config_1.ConfigService,
326
+ winston_1.Logger,
327
+ prom_client_1.Histogram,
328
+ prom_client_1.Counter,
329
+ prom_client_1.Counter,
330
+ prom_client_1.Histogram,
331
+ prom_client_1.Counter,
332
+ prom_client_1.Gauge])
333
+ ], DbMetricsService);
334
+ //# sourceMappingURL=db-metrics.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-metrics.service.js","sourceRoot":"","sources":["../../../src/db-metrics/src/db-metrics.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * DB Metrics 模块导出
3
+ */
4
+ export { DbMetricsModule } from './db-metrics.module';
5
+ export * from './db-metrics.service';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db-metrics/src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DbMetricsModule = void 0;
18
+ /**
19
+ * DB Metrics 模块导出
20
+ */
21
+ var db_metrics_module_1 = require("./db-metrics.module");
22
+ Object.defineProperty(exports, "DbMetricsModule", { enumerable: true, get: function () { return db_metrics_module_1.DbMetricsModule; } });
23
+ __exportStar(require("./db-metrics.service"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db-metrics/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,uDAAqC"}
@@ -0,0 +1,9 @@
1
+ export * from './prisma';
2
+ export * from './prisma-read/prisma-read.module';
3
+ export * from './prisma-read/prisma-read.service';
4
+ export * from './prisma-write/prisma-write.module';
5
+ export * from './prisma-write/prisma-write.service';
6
+ export * from './middleware/soft-delete.middleware';
7
+ export * from './db-metrics';
8
+ export * from './prometheus/prometheus.module';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./prisma"), exports);
18
+ __exportStar(require("./prisma-read/prisma-read.module"), exports);
19
+ __exportStar(require("./prisma-read/prisma-read.service"), exports);
20
+ __exportStar(require("./prisma-write/prisma-write.module"), exports);
21
+ __exportStar(require("./prisma-write/prisma-write.service"), exports);
22
+ __exportStar(require("./middleware/soft-delete.middleware"), exports);
23
+ __exportStar(require("./db-metrics"), exports);
24
+ __exportStar(require("./prometheus/prometheus.module"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,mEAAiD;AACjD,oEAAkD;AAClD,qEAAmD;AACnD,sEAAoD;AACpD,sEAAoD;AACpD,+CAA6B;AAC7B,iEAA+C"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Soft Delete Middleware
3
+ * 软删除中间件
4
+ *
5
+ * 自动处理软删除逻辑:
6
+ * 1. 查询操作自动添加 isDeleted: false 条件
7
+ * 2. 删除操作自动转换为软删除(update isDeleted = true)
8
+ *
9
+ * Prisma 7.x 更新:
10
+ * - 使用 $extends 替代已移除的 $use 方法
11
+ * - 返回扩展后的 PrismaClient 实例
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const prisma = new PrismaClient();
16
+ * const extendedPrisma = setupSoftDeleteMiddleware(prisma);
17
+ * // 使用 extendedPrisma 而不是原始的 prisma
18
+ * await extendedPrisma.userInfo.findMany(); // 自动添加 isDeleted: false
19
+ * ```
20
+ */
21
+ import { PrismaClient } from '@prisma/client';
22
+ /**
23
+ * 检查模型是否支持软删除
24
+ */
25
+ export declare function isSoftDeleteModel(modelName: string | undefined): boolean;
26
+ /**
27
+ * 设置软删除中间件
28
+ * Prisma 7.x: 使用 $extends 创建扩展客户端
29
+ *
30
+ * 注意:由于 Prisma 7.x 的 $extends API 限制,delete 操作的转换需要使用模型特定的扩展
31
+ * 当前实现仅处理查询操作的软删除过滤
32
+ *
33
+ * @param prisma - Prisma 客户端实例
34
+ * @returns 扩展后的 PrismaClient 实例
35
+ */
36
+ export declare function setupSoftDeleteMiddleware(prisma: PrismaClient): PrismaClient;
37
+ /**
38
+ * 硬删除工具函数
39
+ * 当确实需要物理删除时使用
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * await hardDelete(prisma.userInfo, { id: 'xxx' });
44
+ * ```
45
+ */
46
+ export declare function hardDelete<T>(model: {
47
+ delete: (args: {
48
+ where: T;
49
+ }) => Promise<unknown>;
50
+ }, where: T): Promise<unknown>;
51
+ //# sourceMappingURL=soft-delete.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soft-delete.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/soft-delete.middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAsL9C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAIxE;AAkDD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAmC5E;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE;IACL,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD,EACD,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,OAAO,CAAC,CAKlB"}