@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,289 @@
1
+ "use strict";
2
+ /**
3
+ * Soft Delete Middleware
4
+ * 软删除中间件
5
+ *
6
+ * 自动处理软删除逻辑:
7
+ * 1. 查询操作自动添加 isDeleted: false 条件
8
+ * 2. 删除操作自动转换为软删除(update isDeleted = true)
9
+ *
10
+ * Prisma 7.x 更新:
11
+ * - 使用 $extends 替代已移除的 $use 方法
12
+ * - 返回扩展后的 PrismaClient 实例
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const prisma = new PrismaClient();
17
+ * const extendedPrisma = setupSoftDeleteMiddleware(prisma);
18
+ * // 使用 extendedPrisma 而不是原始的 prisma
19
+ * await extendedPrisma.userInfo.findMany(); // 自动添加 isDeleted: false
20
+ * ```
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.isSoftDeleteModel = isSoftDeleteModel;
24
+ exports.setupSoftDeleteMiddleware = setupSoftDeleteMiddleware;
25
+ exports.hardDelete = hardDelete;
26
+ /**
27
+ * 查询操作列表
28
+ */
29
+ const QUERY_ACTIONS = [
30
+ 'findFirst',
31
+ 'findMany',
32
+ 'findUnique',
33
+ 'findFirstOrThrow',
34
+ 'findUniqueOrThrow',
35
+ 'count',
36
+ 'aggregate',
37
+ 'groupBy',
38
+ ];
39
+ /**
40
+ * 不支持软删除的模型列表(这些模型没有 isDeleted 字段)
41
+ *
42
+ * 分类说明:
43
+ * - 系统/配置表:SystemTaskQueue
44
+ * - 关联表:BotPlugin, BotSkill, BotModel
45
+ * - 日志表:BotUsageLog, OperateLog
46
+ * - 安全令牌表:ProxyToken
47
+ */
48
+ const NON_SOFT_DELETE_MODELS = [
49
+ // 系统/配置表(无 isDeleted 字段)
50
+ 'SystemTaskQueue',
51
+ 'SystemConfig',
52
+ 'TenantConfig',
53
+ 'SystemSyncTask',
54
+ // 关联表(多对多关系,通过 onDelete: Cascade 级联删除,无 isDeleted 字段)
55
+ 'BotSkill',
56
+ 'BotModel',
57
+ 'BotPlugin',
58
+ 'BotMcpServer',
59
+ 'GatewaySkill',
60
+ 'TenantPlugin',
61
+ 'ModelCapabilityTag',
62
+ 'ModelAvailabilityCapabilityTag',
63
+ 'FallbackChainModel',
64
+ 'ComplexityRoutingModelMapping',
65
+ 'BotSkillSourceSnapshot',
66
+ 'BotKnowledgeBaseSourceSnapshot',
67
+ 'BotKnowledgeLink',
68
+ // 路由/策略配置表(无 isDeleted 字段)
69
+ 'BotModelRouting',
70
+ 'BotRoutingConfig',
71
+ 'ComplexityRoutingConfig',
72
+ 'FallbackChain',
73
+ 'CostStrategy',
74
+ 'AgentModel',
75
+ 'GatewayConfigVersion',
76
+ 'GatewayConfigChangeLog',
77
+ // 技能版本表(只追加,不软删除,无 isDeleted 字段)
78
+ 'SkillVersion',
79
+ // 技能表(通过 onDelete: Cascade 级联删除,无 isDeleted 字段)
80
+ 'Skill',
81
+ // 模型可用性缓存表(无需软删除,无 isDeleted 字段)
82
+ 'ModelAvailability',
83
+ 'ModelCatalog',
84
+ // 日志表(只追加,不删除,无 isDeleted 字段)
85
+ 'BotUsageLog',
86
+ 'OperateLog',
87
+ 'OpenClawAuditEvent',
88
+ // 安全令牌表(通过 revokedAt 字段标记失效,不使用软删除,无 isDeleted 字段)
89
+ 'ProxyToken',
90
+ // MCP Server(无 isDeleted 字段)
91
+ 'McpServer',
92
+ // Pairing 记录(无 isDeleted 字段)
93
+ 'FeishuPairingRecord',
94
+ 'PlatformPairingRecord',
95
+ // 计费相关表(当前 schema 未包含 isDeleted 字段)
96
+ 'Invoice',
97
+ 'InvoiceItem',
98
+ 'Payment',
99
+ 'Topup',
100
+ // === bot autonomy / trigger / notification ===
101
+ // 这些模型当前 schema 未包含 isDeleted 字段
102
+ 'ApprovalRequest',
103
+ 'BotTokenUsage',
104
+ 'BotTrigger',
105
+ 'BotTriggerHistory',
106
+ 'Notification',
107
+ // === workspace / session ===
108
+ // 这些模型当前 schema 未包含 isDeleted 字段
109
+ 'Workspace',
110
+ 'WorkspaceSession',
111
+ // === feedback / optimization ===
112
+ // 这些模型当前 schema 未包含 isDeleted 字段
113
+ 'BotExecutionFeedback',
114
+ 'BotOptimizationSuggestion',
115
+ // === knowledge ===
116
+ // 这些模型当前 schema 未包含 isDeleted 字段
117
+ 'KnowledgeBaseBot',
118
+ 'KnowledgeUsage',
119
+ // === bot session / chain ===
120
+ // 这些模型当前 schema 未包含 isDeleted 字段
121
+ 'BotSessionChain',
122
+ 'BotCrossSessionMessage',
123
+ 'SubAgentMessage',
124
+ 'SubAgentHeartbeatConfig',
125
+ 'SubAgentHeartbeatLog',
126
+ 'SubAgentRelation',
127
+ 'AutonomyPolicy',
128
+ // === bot extensions ===
129
+ // 这些模型当前 schema 未包含 isDeleted 字段
130
+ 'BotFocusExtension',
131
+ 'BotCronJobMeta',
132
+ 'BotMdFileVersion',
133
+ 'MemoryItem',
134
+ // === organization ===
135
+ // 这些模型当前 schema 未包含 isDeleted 字段
136
+ 'OrganizationMember',
137
+ 'UserTenantPreference',
138
+ // === template ===
139
+ // 这些模型当前 schema 未包含 isDeleted 字段
140
+ 'PositionSkill',
141
+ 'PositionKnowledgeBase',
142
+ 'TemplateSkill',
143
+ 'TemplateKnowledgeBase',
144
+ // === general preset ===
145
+ // 这些模型当前 schema 未包含 isDeleted 字段
146
+ 'GeneralPreset',
147
+ 'GeneralPresetSkill',
148
+ 'GeneralPresetKnowledgeBase',
149
+ // === marketing ===
150
+ // 这些模型当前 schema 未包含 isDeleted 字段
151
+ 'MarketingLead',
152
+ // === compliance / data lifecycle ===
153
+ // DeletionRequest 模型无 isDeleted 字段,通过 status 字段管理状态
154
+ 'DeletionRequest',
155
+ // === plaza ===
156
+ // 这些模型当前 schema 未包含 isDeleted 字段
157
+ 'PlazaLike',
158
+ 'PlazaSubscription',
159
+ // === workflow ===
160
+ // 这些模型当前 schema 未包含 isDeleted 字段
161
+ 'BotWorkflow',
162
+ 'WorkflowTemplate',
163
+ 'WorkflowExecution',
164
+ 'WorkflowNodeExecution',
165
+ 'WorkflowVersion',
166
+ // === cost intelligence ===
167
+ // 这些模型当前 schema 未包含 isDeleted 字段
168
+ 'CostAnomaly',
169
+ 'AnomalyRule',
170
+ 'OptimizationSuggestion',
171
+ 'CostPrediction',
172
+ 'BotOptimizationSuggestion',
173
+ // === compliance (Q1 2027 治理合规 1.0) ===
174
+ // 这些模型当前 schema 未包含 isDeleted 字段
175
+ 'CertificationStatus',
176
+ 'RetentionPolicy',
177
+ 'DeletionRequest',
178
+ 'ComplianceReport',
179
+ ];
180
+ /**
181
+ * 检查模型是否支持软删除
182
+ */
183
+ function isSoftDeleteModel(modelName) {
184
+ if (!modelName)
185
+ return false;
186
+ // 如果模型在不支持软删除的列表中,返回 false
187
+ return !NON_SOFT_DELETE_MODELS.includes(modelName);
188
+ }
189
+ /**
190
+ * 检查 where 条件是否已显式指定 isDeleted
191
+ * 支持嵌套的 OR/AND/NOT 条件
192
+ */
193
+ function hasExplicitIsDeleted(where) {
194
+ if (!where)
195
+ return false;
196
+ // 直接检查 isDeleted 字段
197
+ if ('isDeleted' in where)
198
+ return true;
199
+ // 检查 OR 条件
200
+ if (Array.isArray(where.OR)) {
201
+ for (const condition of where.OR) {
202
+ if (hasExplicitIsDeleted(condition)) {
203
+ return true;
204
+ }
205
+ }
206
+ }
207
+ // 检查 AND 条件
208
+ if (Array.isArray(where.AND)) {
209
+ for (const condition of where.AND) {
210
+ if (hasExplicitIsDeleted(condition)) {
211
+ return true;
212
+ }
213
+ }
214
+ }
215
+ // 检查 NOT 条件
216
+ if (where.NOT) {
217
+ if (Array.isArray(where.NOT)) {
218
+ for (const condition of where.NOT) {
219
+ if (hasExplicitIsDeleted(condition)) {
220
+ return true;
221
+ }
222
+ }
223
+ }
224
+ else {
225
+ if (hasExplicitIsDeleted(where.NOT)) {
226
+ return true;
227
+ }
228
+ }
229
+ }
230
+ return false;
231
+ }
232
+ /**
233
+ * 设置软删除中间件
234
+ * Prisma 7.x: 使用 $extends 创建扩展客户端
235
+ *
236
+ * 注意:由于 Prisma 7.x 的 $extends API 限制,delete 操作的转换需要使用模型特定的扩展
237
+ * 当前实现仅处理查询操作的软删除过滤
238
+ *
239
+ * @param prisma - Prisma 客户端实例
240
+ * @returns 扩展后的 PrismaClient 实例
241
+ */
242
+ function setupSoftDeleteMiddleware(prisma) {
243
+ return prisma.$extends({
244
+ query: {
245
+ $allOperations({ operation, model, args, query }) {
246
+ // 检查是否为软删除模型
247
+ if (!isSoftDeleteModel(model)) {
248
+ return query(args);
249
+ }
250
+ // 处理查询操作:自动添加 isDeleted: false
251
+ if (QUERY_ACTIONS.includes(operation)) {
252
+ const newArgs = { ...args };
253
+ if (!newArgs.where) {
254
+ newArgs.where = {};
255
+ }
256
+ // 只有在未显式指定 isDeleted 时才自动添加
257
+ if (!hasExplicitIsDeleted(newArgs.where)) {
258
+ newArgs.where = {
259
+ ...newArgs.where,
260
+ isDeleted: false,
261
+ };
262
+ }
263
+ return query(newArgs);
264
+ }
265
+ // 对于 delete 和 deleteMany 操作,我们需要使用不同的方法
266
+ // 在 Prisma 7.x 中,我们不能在 $extends 中直接将一个操作转换为另一个操作
267
+ // 这些操作需要在使用时手动处理,或者使用模型特定的扩展
268
+ // 暂时让这些操作通过,后续可以通过其他方式处理
269
+ return query(args);
270
+ },
271
+ },
272
+ });
273
+ }
274
+ /**
275
+ * 硬删除工具函数
276
+ * 当确实需要物理删除时使用
277
+ *
278
+ * @example
279
+ * ```typescript
280
+ * await hardDelete(prisma.userInfo, { id: 'xxx' });
281
+ * ```
282
+ */
283
+ async function hardDelete(model, where) {
284
+ // 直接调用原始 delete,绕过中间件的软删除转换
285
+ // 注意:由于中间件会拦截 delete,这个函数实际上需要使用 $executeRaw
286
+ // 这里只是一个概念示例,实际使用时需要使用原始 SQL
287
+ return model.delete({ where });
288
+ }
289
+ //# sourceMappingURL=soft-delete.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soft-delete.middleware.js","sourceRoot":"","sources":["../../src/middleware/soft-delete.middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ export declare const tenantContext: AsyncLocalStorage<{
3
+ tenantId: string;
4
+ }>;
5
+ /**
6
+ * 获取当前租户 ID
7
+ */
8
+ export declare function getTenantId(): string | null;
9
+ /**
10
+ * 设置租户上下文
11
+ */
12
+ export declare function setTenantContext(tenantId: string, callback: () => void): void;
13
+ /**
14
+ * 创建租户隔离扩展(Prisma 7.x)
15
+ * 自动注入 tenantId 过滤,防止跨租户数据访问
16
+ */
17
+ export declare function setupTenantIsolationExtension(prisma: any): any;
18
+ //# sourceMappingURL=tenant-isolation-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-isolation-extension.d.ts","sourceRoot":"","sources":["../../src/middleware/tenant-isolation-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,eAAO,MAAM,aAAa;cAAqC,MAAM;EAAK,CAAC;AAE3E;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAG3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,QAEtE;AAyBD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,OA2ExD"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tenantContext = void 0;
4
+ exports.getTenantId = getTenantId;
5
+ exports.setTenantContext = setTenantContext;
6
+ exports.setupTenantIsolationExtension = setupTenantIsolationExtension;
7
+ const common_1 = require("@nestjs/common");
8
+ const async_hooks_1 = require("async_hooks");
9
+ // 全局上下文存储
10
+ exports.tenantContext = new async_hooks_1.AsyncLocalStorage();
11
+ /**
12
+ * 获取当前租户 ID
13
+ */
14
+ function getTenantId() {
15
+ const context = exports.tenantContext.getStore();
16
+ return context?.tenantId || null;
17
+ }
18
+ /**
19
+ * 设置租户上下文
20
+ */
21
+ function setTenantContext(tenantId, callback) {
22
+ exports.tenantContext.run({ tenantId }, callback);
23
+ }
24
+ /**
25
+ * 多租户表列表
26
+ */
27
+ const MULTI_TENANT_MODELS = [
28
+ 'Bot',
29
+ 'BotCronJobMeta',
30
+ 'BotModelRouting',
31
+ 'BotSkill',
32
+ 'BotUsageLog',
33
+ 'Conversation',
34
+ 'Message',
35
+ 'PluginInstall',
36
+ 'ProviderKey',
37
+ 'ModelAvailability',
38
+ 'AuditLog',
39
+ 'File',
40
+ 'Skill',
41
+ 'SkillVersion',
42
+ 'TenantMember',
43
+ 'FallbackChain',
44
+ 'GatewayConfigVersion',
45
+ ];
46
+ /**
47
+ * 创建租户隔离扩展(Prisma 7.x)
48
+ * 自动注入 tenantId 过滤,防止跨租户数据访问
49
+ */
50
+ function setupTenantIsolationExtension(prisma) {
51
+ return prisma.$extends({
52
+ query: {
53
+ $allModels: {
54
+ async $allOperations({ model, operation, args, query }) {
55
+ // 只处理多租户表
56
+ if (!MULTI_TENANT_MODELS.includes(model)) {
57
+ return query(args);
58
+ }
59
+ // 获取当前租户 ID
60
+ const tenantId = getTenantId();
61
+ // 如果没有租户上下文,跳过(例如系统级操作)
62
+ if (!tenantId) {
63
+ return query(args);
64
+ }
65
+ // 读操作:自动注入 tenantId 过滤
66
+ if ([
67
+ 'findMany',
68
+ 'findFirst',
69
+ 'findUnique',
70
+ 'count',
71
+ 'aggregate',
72
+ ].includes(operation)) {
73
+ args.where = {
74
+ ...args.where,
75
+ tenantId,
76
+ };
77
+ }
78
+ // 写操作:自动注入 tenantId
79
+ if (operation === 'create') {
80
+ args.data = {
81
+ ...args.data,
82
+ tenantId,
83
+ };
84
+ }
85
+ if (operation === 'createMany') {
86
+ if (Array.isArray(args.data)) {
87
+ args.data = args.data.map((item) => ({
88
+ ...item,
89
+ tenantId,
90
+ }));
91
+ }
92
+ }
93
+ // 更新/删除操作:验证 tenantId
94
+ if (['update', 'updateMany', 'delete', 'deleteMany', 'upsert'].includes(operation)) {
95
+ args.where = {
96
+ ...args.where,
97
+ tenantId,
98
+ };
99
+ }
100
+ const result = await query(args);
101
+ // 验证返回结果不包含其他租户数据
102
+ if (result && typeof result === 'object') {
103
+ validateResultTenantId(result, tenantId);
104
+ }
105
+ return result;
106
+ },
107
+ },
108
+ },
109
+ });
110
+ }
111
+ /**
112
+ * 验证结果中的 tenantId
113
+ */
114
+ function validateResultTenantId(result, expectedTenantId) {
115
+ if (Array.isArray(result)) {
116
+ result.forEach((item) => validateResultTenantId(item, expectedTenantId));
117
+ }
118
+ else if (result && typeof result === 'object') {
119
+ if (result.tenantId && result.tenantId !== expectedTenantId) {
120
+ throw new common_1.ForbiddenException(`Data leak detected: result contains data from tenant ${result.tenantId}`);
121
+ }
122
+ }
123
+ }
124
+ //# sourceMappingURL=tenant-isolation-extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-isolation-extension.js","sourceRoot":"","sources":["../../src/middleware/tenant-isolation-extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Prisma 模块导出
3
+ */
4
+ export { PrismaModule } from './prisma.module';
5
+ export * from './prisma.service';
6
+ export * from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
@@ -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
+ exports.PrismaModule = void 0;
18
+ /**
19
+ * Prisma 模块导出
20
+ */
21
+ var prisma_module_1 = require("./prisma.module");
22
+ Object.defineProperty(exports, "PrismaModule", { enumerable: true, get: function () { return prisma_module_1.PrismaModule; } });
23
+ __exportStar(require("./prisma.service"), exports);
24
+ __exportStar(require("./types"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiC;AACjC,0CAAwB"}
@@ -0,0 +1,3 @@
1
+ export declare class PrismaModule {
2
+ }
3
+ //# sourceMappingURL=prisma.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.module.d.ts","sourceRoot":"","sources":["../../src/prisma/prisma.module.ts"],"names":[],"mappings":"AAMA,qBAKa,YAAY;CAAG"}
@@ -0,0 +1,26 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PrismaModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const prisma_service_1 = require("@/prisma/prisma.service");
12
+ const prisma_write_module_1 = require("@/prisma-write/prisma-write.module");
13
+ const prisma_read_module_1 = require("@/prisma-read/prisma-read.module");
14
+ const infra_redis_1 = require("@dofe/infra-redis");
15
+ const config_1 = require("@nestjs/config");
16
+ let PrismaModule = class PrismaModule {
17
+ };
18
+ exports.PrismaModule = PrismaModule;
19
+ exports.PrismaModule = PrismaModule = __decorate([
20
+ (0, common_1.Module)({
21
+ imports: [prisma_write_module_1.PrismaWriteModule, prisma_read_module_1.PrismaReadModule, infra_redis_1.RedisModule, config_1.ConfigModule],
22
+ providers: [prisma_service_1.PrismaService],
23
+ exports: [prisma_service_1.PrismaService],
24
+ })
25
+ ], PrismaModule);
26
+ //# sourceMappingURL=prisma.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.module.js","sourceRoot":"","sources":["../../src/prisma/prisma.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,4DAAwD;AACxD,4EAAuE;AACvE,yEAAoE;AACpE,mDAAgD;AAChD,2CAA8C;AAMvC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uCAAiB,EAAE,qCAAgB,EAAE,yBAAW,EAAE,qBAAY,CAAC;QACzE,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
@@ -0,0 +1,10 @@
1
+ import { PrismaReadService } from '@/prisma-read/prisma-read.service';
2
+ import { PrismaWriteService } from '@/prisma-write/prisma-write.service';
3
+ export declare class PrismaService {
4
+ private readonly prismaRead;
5
+ private readonly prismaWrite;
6
+ constructor(prismaRead: PrismaReadService, prismaWrite: PrismaWriteService);
7
+ get read(): import("@prisma/client").PrismaClient<import("@prisma/client").Prisma.PrismaClientOptions, import("@prisma/client").Prisma.LogLevel, import("../../../../../models.dofe.ai/apps/api/generated/prisma-client/runtime/client").DefaultArgs>;
8
+ get write(): import("@prisma/client").PrismaClient<import("@prisma/client").Prisma.PrismaClientOptions, import("@prisma/client").Prisma.LogLevel, import("../../../../../models.dofe.ai/apps/api/generated/prisma-client/runtime/client").DefaultArgs>;
9
+ }
10
+ //# sourceMappingURL=prisma.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.service.d.ts","sourceRoot":"","sources":["../../src/prisma/prisma.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,UAAU,EAAE,iBAAiB,EAC7B,WAAW,EAAE,kBAAkB;IAElD,IAAI,IAAI,8OAEP;IAED,IAAI,KAAK,8OAER;CACF"}
@@ -0,0 +1,36 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PrismaService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const prisma_read_service_1 = require("@/prisma-read/prisma-read.service");
15
+ const prisma_write_service_1 = require("@/prisma-write/prisma-write.service");
16
+ let PrismaService = class PrismaService {
17
+ prismaRead;
18
+ prismaWrite;
19
+ constructor(prismaRead, prismaWrite) {
20
+ this.prismaRead = prismaRead;
21
+ this.prismaWrite = prismaWrite;
22
+ }
23
+ get read() {
24
+ return this.prismaRead.client;
25
+ }
26
+ get write() {
27
+ return this.prismaWrite.client;
28
+ }
29
+ };
30
+ exports.PrismaService = PrismaService;
31
+ exports.PrismaService = PrismaService = __decorate([
32
+ (0, common_1.Injectable)(),
33
+ __metadata("design:paramtypes", [prisma_read_service_1.PrismaReadService,
34
+ prisma_write_service_1.PrismaWriteService])
35
+ ], PrismaService);
36
+ //# sourceMappingURL=prisma.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../../src/prisma/prisma.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2EAAsE;AACtE,8EAAyE;AAGlE,IAAM,aAAa,GAAnB,MAAM,aAAa;IAEL;IACA;IAFnB,YACmB,UAA6B,EAC7B,WAA+B;QAD/B,eAAU,GAAV,UAAU,CAAmB;QAC7B,gBAAW,GAAX,WAAW,CAAoB;IAC/C,CAAC;IACJ,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;CACF,CAAA;AAZY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAGoB,uCAAiB;QAChB,yCAAkB;GAHvC,aAAa,CAYzB"}
@@ -0,0 +1,4 @@
1
+ export declare class AppDbConfig {
2
+ url: string;
3
+ }
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prisma/types.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;IAEtB,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,22 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppDbConfig = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class AppDbConfig {
15
+ url;
16
+ }
17
+ exports.AppDbConfig = AppDbConfig;
18
+ __decorate([
19
+ (0, class_validator_1.IsNotEmpty)(),
20
+ __metadata("design:type", String)
21
+ ], AppDbConfig.prototype, "url", void 0);
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/prisma/types.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6C;AAE7C,MAAa,WAAW;IAEtB,GAAG,CAAS;CACb;AAHD,kCAGC;AADC;IADC,IAAA,4BAAU,GAAE;;wCACD"}
@@ -0,0 +1,3 @@
1
+ export declare class PrismaReadModule {
2
+ }
3
+ //# sourceMappingURL=prisma-read.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-read.module.d.ts","sourceRoot":"","sources":["../../src/prisma-read/prisma-read.module.ts"],"names":[],"mappings":"AAKA,qBAKa,gBAAgB;CAAG"}