@apart-tech/intelligence-core 1.11.3 → 1.11.5
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/dist/auth/ability.d.ts +148 -0
- package/dist/auth/ability.d.ts.map +1 -0
- package/dist/auth/ability.js +285 -0
- package/dist/auth/ability.js.map +1 -0
- package/dist/auth/ability.test.d.ts +2 -0
- package/dist/auth/ability.test.d.ts.map +1 -0
- package/dist/auth/ability.test.js +680 -0
- package/dist/auth/ability.test.js.map +1 -0
- package/dist/auth/delegation-jwt.d.ts +167 -0
- package/dist/auth/delegation-jwt.d.ts.map +1 -0
- package/dist/auth/delegation-jwt.js +237 -0
- package/dist/auth/delegation-jwt.js.map +1 -0
- package/dist/auth/delegation-jwt.test.d.ts +2 -0
- package/dist/auth/delegation-jwt.test.d.ts.map +1 -0
- package/dist/auth/delegation-jwt.test.js +283 -0
- package/dist/auth/delegation-jwt.test.js.map +1 -0
- package/dist/auth/principal.d.ts +94 -0
- package/dist/auth/principal.d.ts.map +1 -0
- package/dist/auth/principal.js +33 -0
- package/dist/auth/principal.js.map +1 -0
- package/dist/config/config.test.d.ts +2 -0
- package/dist/config/config.test.d.ts.map +1 -0
- package/dist/config/config.test.js +57 -0
- package/dist/config/config.test.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +17 -0
- package/dist/config/index.js.map +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/jwt.test.d.ts +2 -0
- package/dist/lib/__tests__/jwt.test.d.ts.map +1 -0
- package/dist/lib/__tests__/jwt.test.js +97 -0
- package/dist/lib/__tests__/jwt.test.js.map +1 -0
- package/dist/lib/jwt.d.ts +20 -0
- package/dist/lib/jwt.d.ts.map +1 -1
- package/dist/lib/jwt.js +56 -3
- package/dist/lib/jwt.js.map +1 -1
- package/dist/services/__tests__/delegation-cleanup-service.test.d.ts +2 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.d.ts.map +1 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.js +211 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.js.map +1 -0
- package/dist/services/agent-run-service.d.ts +44 -7
- package/dist/services/agent-run-service.d.ts.map +1 -1
- package/dist/services/agent-run-service.js +14 -0
- package/dist/services/agent-run-service.js.map +1 -1
- package/dist/services/agent-schedule-service.d.ts +21 -0
- package/dist/services/agent-schedule-service.d.ts.map +1 -1
- package/dist/services/agent-schedule-service.js +12 -0
- package/dist/services/agent-schedule-service.js.map +1 -1
- package/dist/services/audit-event-service.d.ts +76 -0
- package/dist/services/audit-event-service.d.ts.map +1 -0
- package/dist/services/audit-event-service.js +48 -0
- package/dist/services/audit-event-service.js.map +1 -0
- package/dist/services/cleaning-service.d.ts.map +1 -1
- package/dist/services/cleaning-service.js +5 -1
- package/dist/services/cleaning-service.js.map +1 -1
- package/dist/services/delegation-cleanup-service.d.ts +133 -0
- package/dist/services/delegation-cleanup-service.d.ts.map +1 -0
- package/dist/services/delegation-cleanup-service.js +111 -0
- package/dist/services/delegation-cleanup-service.js.map +1 -0
- package/dist/services/edge-service.d.ts.map +1 -1
- package/dist/services/edge-service.js +3 -0
- package/dist/services/edge-service.js.map +1 -1
- package/dist/services/org-agent-type-service.d.ts +15 -0
- package/dist/services/org-agent-type-service.d.ts.map +1 -1
- package/dist/services/org-agent-type-service.js +2 -0
- package/dist/services/org-agent-type-service.js.map +1 -1
- package/dist/services/usage-service.d.ts +48 -0
- package/dist/services/usage-service.d.ts.map +1 -0
- package/dist/services/usage-service.js +116 -0
- package/dist/services/usage-service.js.map +1 -0
- package/dist/services/user-service.d.ts.map +1 -1
- package/dist/services/user-service.js +24 -6
- package/dist/services/user-service.js.map +1 -1
- package/dist/services/user-service.test.d.ts +2 -0
- package/dist/services/user-service.test.d.ts.map +1 -0
- package/dist/services/user-service.test.js +86 -0
- package/dist/services/user-service.test.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/prisma/schema.prisma +158 -82
- package/dist/db/schema.d.ts +0 -507
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -77
- package/dist/db/schema.js.map +0 -1
package/prisma/schema.prisma
CHANGED
|
@@ -8,12 +8,17 @@ datasource db {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
model Organization {
|
|
11
|
-
id
|
|
12
|
-
name
|
|
13
|
-
slug
|
|
14
|
-
metadata
|
|
15
|
-
createdAt
|
|
16
|
-
auth0OrgId
|
|
11
|
+
id String @id @default(uuid()) @db.Uuid
|
|
12
|
+
name String @db.VarChar(200)
|
|
13
|
+
slug String @unique @db.VarChar(200)
|
|
14
|
+
metadata Json @default("{}")
|
|
15
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
16
|
+
auth0OrgId String? @unique @map("auth0_org_id") @db.VarChar(100)
|
|
17
|
+
authorizationMode String @default("internal") @map("authorization_mode") @db.VarChar(30)
|
|
18
|
+
plan String @default("free") @db.VarChar(20)
|
|
19
|
+
stripeCustomerId String? @unique @map("stripe_customer_id") @db.VarChar(255)
|
|
20
|
+
stripeSubscriptionId String? @map("stripe_subscription_id") @db.VarChar(255)
|
|
21
|
+
currentPeriodEnd DateTime? @map("current_period_end") @db.Timestamptz
|
|
17
22
|
|
|
18
23
|
nodes Node[]
|
|
19
24
|
edges Edge[]
|
|
@@ -29,23 +34,27 @@ model Organization {
|
|
|
29
34
|
invites Invite[]
|
|
30
35
|
orgAgentTypes OrgAgentType[]
|
|
31
36
|
orgMcpServers OrgMcpServer[]
|
|
37
|
+
usageRecords UsageRecord[]
|
|
32
38
|
|
|
33
39
|
@@map("organizations")
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
model User {
|
|
37
|
-
id
|
|
38
|
-
auth0Sub
|
|
39
|
-
email
|
|
40
|
-
name
|
|
41
|
-
avatarUrl
|
|
42
|
-
createdAt
|
|
43
|
-
updatedAt
|
|
43
|
+
id String @id @default(uuid()) @db.Uuid
|
|
44
|
+
auth0Sub String @unique @map("auth0_sub") @db.VarChar(255)
|
|
45
|
+
email String @db.VarChar(320)
|
|
46
|
+
name String? @db.VarChar(200)
|
|
47
|
+
avatarUrl String? @map("avatar_url") @db.Text
|
|
48
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
49
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
44
50
|
claudeOauthTokenEncrypted String? @map("claude_oauth_token_encrypted") @db.Text
|
|
45
51
|
apartRefreshTokenEncrypted String? @map("apart_refresh_token_encrypted") @db.Text
|
|
46
52
|
agentSecretsEncrypted String? @map("agent_secrets_encrypted") @db.Text
|
|
47
53
|
|
|
48
|
-
memberships
|
|
54
|
+
memberships Membership[]
|
|
55
|
+
createdAgentTypes OrgAgentType[] @relation("OrgAgentTypeCreatedBy")
|
|
56
|
+
invokedAgentRuns AgentRun[] @relation("AgentRunInvokedBy")
|
|
57
|
+
scheduledAgents AgentSchedule[] @relation("AgentScheduleScheduledBy")
|
|
49
58
|
|
|
50
59
|
@@index([email], map: "idx_users_email")
|
|
51
60
|
@@map("users")
|
|
@@ -138,21 +147,21 @@ model Domain {
|
|
|
138
147
|
}
|
|
139
148
|
|
|
140
149
|
model Node {
|
|
141
|
-
id String
|
|
142
|
-
type String
|
|
143
|
-
title String
|
|
144
|
-
content String
|
|
150
|
+
id String @id @default(uuid()) @db.Uuid
|
|
151
|
+
type String @db.VarChar(100)
|
|
152
|
+
title String @db.VarChar(500)
|
|
153
|
+
content String @default("") @db.Text
|
|
145
154
|
embedding Unsupported("vector")?
|
|
146
|
-
searchVector Unsupported("tsvector")?
|
|
147
|
-
metadata Json
|
|
148
|
-
status String
|
|
149
|
-
createdBy String
|
|
150
|
-
createdAt DateTime
|
|
151
|
-
updatedAt DateTime
|
|
152
|
-
version Int
|
|
153
|
-
hasPii Boolean
|
|
154
|
-
domainId String?
|
|
155
|
-
organizationId String
|
|
155
|
+
searchVector Unsupported("tsvector")? @map("search_vector")
|
|
156
|
+
metadata Json @default("{}")
|
|
157
|
+
status String @default("draft") @db.VarChar(20)
|
|
158
|
+
createdBy String @map("created_by") @db.VarChar(255)
|
|
159
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
160
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
161
|
+
version Int @default(1)
|
|
162
|
+
hasPii Boolean @default(false) @map("has_pii")
|
|
163
|
+
domainId String? @map("domain_id") @db.Uuid
|
|
164
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
156
165
|
|
|
157
166
|
sourceEdges Edge[] @relation("SourceNode")
|
|
158
167
|
targetEdges Edge[] @relation("TargetNode")
|
|
@@ -191,23 +200,23 @@ model Edge {
|
|
|
191
200
|
}
|
|
192
201
|
|
|
193
202
|
model Workspace {
|
|
194
|
-
id
|
|
195
|
-
name
|
|
196
|
-
slug
|
|
197
|
-
description
|
|
203
|
+
id String @id @default(uuid()) @db.Uuid
|
|
204
|
+
name String @db.VarChar(200)
|
|
205
|
+
slug String @db.VarChar(200)
|
|
206
|
+
description String @default("") @db.Text
|
|
198
207
|
|
|
199
208
|
// Filter rules
|
|
200
|
-
domainSlugs
|
|
201
|
-
nodeTypes
|
|
202
|
-
tags
|
|
209
|
+
domainSlugs Json @default("[]") @map("domain_slugs")
|
|
210
|
+
nodeTypes Json @default("[]") @map("node_types")
|
|
211
|
+
tags Json @default("[]") @map("tags")
|
|
203
212
|
|
|
204
213
|
// Context assembly overrides
|
|
205
|
-
maxDepth
|
|
206
|
-
maxNodes
|
|
207
|
-
includeDrafts
|
|
214
|
+
maxDepth Int? @map("max_depth")
|
|
215
|
+
maxNodes Int? @map("max_nodes")
|
|
216
|
+
includeDrafts Boolean @default(false) @map("include_drafts")
|
|
208
217
|
|
|
209
218
|
// Layer 1: map description for AI
|
|
210
|
-
systemPrompt
|
|
219
|
+
systemPrompt String @default("") @map("system_prompt") @db.Text
|
|
211
220
|
|
|
212
221
|
metadata Json @default("{}")
|
|
213
222
|
createdBy String @map("created_by") @db.VarChar(255)
|
|
@@ -251,11 +260,22 @@ model OrgAgentType {
|
|
|
251
260
|
createdBy String @map("created_by") @db.VarChar(255)
|
|
252
261
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
253
262
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
254
|
-
|
|
255
|
-
|
|
263
|
+
kind String @default("org_agent") @db.VarChar(30)
|
|
264
|
+
auth0ClientId String? @unique @map("auth0_client_id") @db.VarChar(255)
|
|
265
|
+
intrinsicPolicy Json @default("{}") @map("intrinsic_policy")
|
|
266
|
+
toolCatalogue String[] @default([]) @map("tool_catalogue")
|
|
267
|
+
requiresCiba Boolean @default(false) @map("requires_ciba")
|
|
268
|
+
createdByUserId String? @map("created_by_user_id") @db.Uuid
|
|
269
|
+
|
|
270
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
271
|
+
createdByUser User? @relation("OrgAgentTypeCreatedBy", fields: [createdByUserId], references: [id], onDelete: SetNull)
|
|
272
|
+
agentRuns AgentRun[] @relation("AgentRunAgent")
|
|
273
|
+
schedules AgentSchedule[] @relation("AgentScheduleAgent")
|
|
274
|
+
apiKeys ApiKey[] @relation("ApiKeyAgent")
|
|
256
275
|
|
|
257
276
|
@@unique([organizationId, slug], map: "uq_org_agent_type_org_slug")
|
|
258
277
|
@@index([organizationId], map: "idx_org_agent_types_organization")
|
|
278
|
+
@@index([createdByUserId], map: "idx_org_agent_types_created_by_user_id")
|
|
259
279
|
@@map("org_agent_types")
|
|
260
280
|
}
|
|
261
281
|
|
|
@@ -279,56 +299,75 @@ model OrgMcpServer {
|
|
|
279
299
|
}
|
|
280
300
|
|
|
281
301
|
model AgentRun {
|
|
282
|
-
id
|
|
283
|
-
organizationId
|
|
284
|
-
prompt
|
|
285
|
-
type
|
|
286
|
-
status
|
|
287
|
-
result
|
|
288
|
-
error
|
|
289
|
-
sandboxId
|
|
290
|
-
model
|
|
291
|
-
startedAt
|
|
292
|
-
completedAt
|
|
293
|
-
createdBy
|
|
294
|
-
scheduleId
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
302
|
+
id String @id @default(uuid()) @db.Uuid
|
|
303
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
304
|
+
prompt String @db.Text
|
|
305
|
+
type String @default("researcher") @db.VarChar(30)
|
|
306
|
+
status String @default("pending") @db.VarChar(20)
|
|
307
|
+
result String @default("") @db.Text
|
|
308
|
+
error String? @db.Text
|
|
309
|
+
sandboxId String? @map("sandbox_id") @db.VarChar(100)
|
|
310
|
+
model String @default("sonnet") @db.VarChar(50)
|
|
311
|
+
startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz
|
|
312
|
+
completedAt DateTime? @map("completed_at") @db.Timestamptz
|
|
313
|
+
createdBy String @map("created_by") @db.VarChar(255)
|
|
314
|
+
scheduleId String? @map("schedule_id") @db.Uuid
|
|
315
|
+
agentId String? @map("agent_id") @db.Uuid
|
|
316
|
+
invokedByUserId String? @map("invoked_by_user_id") @db.Uuid
|
|
317
|
+
parentAgentRunId String? @map("parent_agent_run_id") @db.Uuid
|
|
318
|
+
actClaim Json? @map("act_claim")
|
|
319
|
+
capturedAbility Json? @map("captured_ability")
|
|
320
|
+
|
|
321
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
322
|
+
schedule AgentSchedule? @relation(fields: [scheduleId], references: [id], onDelete: SetNull)
|
|
323
|
+
agent OrgAgentType? @relation("AgentRunAgent", fields: [agentId], references: [id], onDelete: SetNull)
|
|
324
|
+
invokedByUser User? @relation("AgentRunInvokedBy", fields: [invokedByUserId], references: [id], onDelete: SetNull)
|
|
325
|
+
parent AgentRun? @relation("AgentRunParent", fields: [parentAgentRunId], references: [id], onDelete: SetNull)
|
|
326
|
+
children AgentRun[] @relation("AgentRunParent")
|
|
298
327
|
|
|
299
328
|
@@index([organizationId], map: "idx_agent_runs_organization")
|
|
300
329
|
@@index([status], map: "idx_agent_runs_status")
|
|
301
330
|
@@index([type], map: "idx_agent_runs_type")
|
|
302
331
|
@@index([scheduleId], map: "idx_agent_runs_schedule")
|
|
332
|
+
@@index([agentId], map: "idx_agent_runs_agent_id")
|
|
333
|
+
@@index([invokedByUserId], map: "idx_agent_runs_invoked_by_user_id")
|
|
334
|
+
@@index([parentAgentRunId], map: "idx_agent_runs_parent_agent_run_id")
|
|
303
335
|
@@map("agent_runs")
|
|
304
336
|
}
|
|
305
337
|
|
|
306
338
|
model AgentSchedule {
|
|
307
|
-
id
|
|
308
|
-
organizationId
|
|
309
|
-
name
|
|
310
|
-
description
|
|
311
|
-
cronExpression
|
|
312
|
-
timezone
|
|
313
|
-
agentType
|
|
314
|
-
prompt
|
|
315
|
-
model
|
|
316
|
-
workspace
|
|
317
|
-
enabled
|
|
318
|
-
apiKeyEncrypted
|
|
319
|
-
apiKeyHash
|
|
320
|
-
gcpJobName
|
|
321
|
-
lastTriggeredAt
|
|
322
|
-
lastRunId
|
|
323
|
-
createdBy
|
|
324
|
-
createdAt
|
|
325
|
-
updatedAt
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
339
|
+
id String @id @default(uuid()) @db.Uuid
|
|
340
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
341
|
+
name String @db.VarChar(200)
|
|
342
|
+
description String @default("") @db.Text
|
|
343
|
+
cronExpression String @map("cron_expression") @db.VarChar(100)
|
|
344
|
+
timezone String @default("UTC") @db.VarChar(50)
|
|
345
|
+
agentType String @default("researcher") @map("agent_type") @db.VarChar(30)
|
|
346
|
+
prompt String @db.Text
|
|
347
|
+
model String @default("sonnet") @db.VarChar(50)
|
|
348
|
+
workspace String? @db.VarChar(200)
|
|
349
|
+
enabled Boolean @default(true)
|
|
350
|
+
apiKeyEncrypted String @map("api_key_encrypted") @db.Text
|
|
351
|
+
apiKeyHash String @map("api_key_hash") @db.VarChar(64)
|
|
352
|
+
gcpJobName String? @map("gcp_job_name") @db.VarChar(500)
|
|
353
|
+
lastTriggeredAt DateTime? @map("last_triggered_at") @db.Timestamptz
|
|
354
|
+
lastRunId String? @map("last_run_id") @db.Uuid
|
|
355
|
+
createdBy String @map("created_by") @db.VarChar(255)
|
|
356
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
357
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
358
|
+
agentId String? @map("agent_id") @db.Uuid
|
|
359
|
+
scheduledByUserId String? @map("scheduled_by_user_id") @db.Uuid
|
|
360
|
+
capturedAbility Json? @map("captured_ability")
|
|
361
|
+
|
|
362
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
363
|
+
runs AgentRun[]
|
|
364
|
+
agent OrgAgentType? @relation("AgentScheduleAgent", fields: [agentId], references: [id], onDelete: SetNull)
|
|
365
|
+
scheduledByUser User? @relation("AgentScheduleScheduledBy", fields: [scheduledByUserId], references: [id], onDelete: SetNull)
|
|
329
366
|
|
|
330
367
|
@@index([organizationId], map: "idx_agent_schedules_organization")
|
|
331
368
|
@@index([apiKeyHash], map: "idx_agent_schedules_api_key_hash")
|
|
369
|
+
@@index([agentId], map: "idx_agent_schedules_agent_id")
|
|
370
|
+
@@index([scheduledByUserId], map: "idx_agent_schedules_scheduled_by_user_id")
|
|
332
371
|
@@map("agent_schedules")
|
|
333
372
|
}
|
|
334
373
|
|
|
@@ -341,17 +380,54 @@ model ApiKey {
|
|
|
341
380
|
lastUsedAt DateTime? @map("last_used_at") @db.Timestamptz
|
|
342
381
|
active Int @default(1)
|
|
343
382
|
organizationId String @map("organization_id") @db.Uuid
|
|
383
|
+
agentId String? @map("agent_id") @db.Uuid
|
|
344
384
|
|
|
345
|
-
organization Organization
|
|
385
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
386
|
+
agent OrgAgentType? @relation("ApiKeyAgent", fields: [agentId], references: [id], onDelete: SetNull)
|
|
346
387
|
|
|
347
388
|
@@index([organizationId], map: "idx_api_keys_organization")
|
|
389
|
+
@@index([agentId], map: "idx_api_keys_agent_id")
|
|
348
390
|
@@map("api_keys")
|
|
349
391
|
}
|
|
350
392
|
|
|
351
393
|
model EmbeddingCache {
|
|
352
|
-
contentHash String
|
|
394
|
+
contentHash String @id @map("content_hash") @db.VarChar(64)
|
|
353
395
|
embedding Unsupported("vector")
|
|
354
|
-
createdAt DateTime
|
|
396
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
355
397
|
|
|
356
398
|
@@map("embedding_cache")
|
|
357
399
|
}
|
|
400
|
+
|
|
401
|
+
model AuditEvent {
|
|
402
|
+
id String @id @default(uuid()) @db.Uuid
|
|
403
|
+
agentRunId String? @map("agent_run_id") @db.Uuid
|
|
404
|
+
principalType String @map("principal_type") @db.VarChar(30)
|
|
405
|
+
principalId String @map("principal_id") @db.VarChar(255)
|
|
406
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
407
|
+
action String @db.VarChar(100)
|
|
408
|
+
subjectType String? @map("subject_type") @db.VarChar(100)
|
|
409
|
+
subjectId String? @map("subject_id") @db.VarChar(255)
|
|
410
|
+
effectiveAbility Json @default("{}") @map("effective_ability")
|
|
411
|
+
result String @db.VarChar(20)
|
|
412
|
+
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
413
|
+
|
|
414
|
+
@@index([organizationId], map: "idx_audit_events_organization_id")
|
|
415
|
+
@@index([agentRunId], map: "idx_audit_events_agent_run_id")
|
|
416
|
+
@@index([createdAt], map: "idx_audit_events_created_at")
|
|
417
|
+
@@map("audit_events")
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
model UsageRecord {
|
|
421
|
+
id String @id @default(uuid()) @db.Uuid
|
|
422
|
+
organizationId String @map("organization_id") @db.Uuid
|
|
423
|
+
metric String @db.VarChar(50)
|
|
424
|
+
periodStart DateTime @map("period_start") @db.Date
|
|
425
|
+
count Int @default(0)
|
|
426
|
+
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
|
|
427
|
+
|
|
428
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
429
|
+
|
|
430
|
+
@@unique([organizationId, metric, periodStart], map: "uq_usage_org_metric_period")
|
|
431
|
+
@@index([organizationId], map: "idx_usage_records_organization")
|
|
432
|
+
@@map("usage_records")
|
|
433
|
+
}
|