@varaos/db 1.0.0

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/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@varaos/db",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "files": [
6
+ "prisma/**"
7
+ ],
8
+ "license": "MIT",
9
+ "devDependencies": {
10
+ "prisma": "^6.16.1"
11
+ }
12
+ }
@@ -0,0 +1,77 @@
1
+ -- CreateTable
2
+ CREATE TABLE "User" (
3
+ "id" TEXT NOT NULL,
4
+ "name" TEXT NOT NULL,
5
+ "image" TEXT,
6
+ "email" TEXT NOT NULL,
7
+ "password" TEXT,
8
+ "emailVerified" TIMESTAMP(3),
9
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
10
+ "updatedAt" TIMESTAMP(3) NOT NULL,
11
+
12
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
13
+ );
14
+
15
+ -- CreateTable
16
+ CREATE TABLE "Account" (
17
+ "id" TEXT NOT NULL,
18
+ "userId" TEXT NOT NULL,
19
+ "type" TEXT NOT NULL,
20
+ "provider" TEXT NOT NULL,
21
+ "providerAccountId" TEXT NOT NULL,
22
+ "refresh_token" TEXT,
23
+ "access_token" TEXT,
24
+ "expires_at" INTEGER,
25
+ "token_type" TEXT,
26
+ "scope" TEXT,
27
+ "id_token" TEXT,
28
+ "session_state" TEXT,
29
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
30
+ "updatedAt" TIMESTAMP(3) NOT NULL,
31
+
32
+ CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
33
+ );
34
+
35
+ -- CreateTable
36
+ CREATE TABLE "VerificationToken" (
37
+ "id" TEXT NOT NULL,
38
+ "email" TEXT NOT NULL,
39
+ "token" TEXT NOT NULL,
40
+ "expiresAt" TIMESTAMP(3) NOT NULL,
41
+
42
+ CONSTRAINT "VerificationToken_pkey" PRIMARY KEY ("id")
43
+ );
44
+
45
+ -- CreateTable
46
+ CREATE TABLE "PasswordResetToken" (
47
+ "id" TEXT NOT NULL,
48
+ "email" TEXT NOT NULL,
49
+ "token" TEXT NOT NULL,
50
+ "expiresAt" TIMESTAMP(3) NOT NULL,
51
+
52
+ CONSTRAINT "PasswordResetToken_pkey" PRIMARY KEY ("id")
53
+ );
54
+
55
+ -- CreateIndex
56
+ CREATE UNIQUE INDEX "User_id_key" ON "User"("id");
57
+
58
+ -- CreateIndex
59
+ CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
60
+
61
+ -- CreateIndex
62
+ CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId");
63
+
64
+ -- CreateIndex
65
+ CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
66
+
67
+ -- CreateIndex
68
+ CREATE UNIQUE INDEX "VerificationToken_email_token_key" ON "VerificationToken"("email", "token");
69
+
70
+ -- CreateIndex
71
+ CREATE UNIQUE INDEX "PasswordResetToken_token_key" ON "PasswordResetToken"("token");
72
+
73
+ -- CreateIndex
74
+ CREATE UNIQUE INDEX "PasswordResetToken_email_token_key" ON "PasswordResetToken"("email", "token");
75
+
76
+ -- AddForeignKey
77
+ ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,25 @@
1
+ -- CreateTable
2
+ CREATE TABLE "public"."integrations" (
3
+ "id" TEXT NOT NULL,
4
+ "userId" TEXT NOT NULL,
5
+ "provider" TEXT NOT NULL,
6
+ "providerAccountId" TEXT NOT NULL,
7
+ "integration" TEXT NOT NULL,
8
+ "accessToken" TEXT NOT NULL,
9
+ "refreshToken" TEXT,
10
+ "expiresAt" TIMESTAMP(3),
11
+ "scopes" JSONB NOT NULL,
12
+ "profile" JSONB NOT NULL,
13
+ "status" TEXT NOT NULL DEFAULT 'active',
14
+ "metadata" JSONB,
15
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
16
+ "updatedAt" TIMESTAMP(3) NOT NULL,
17
+
18
+ CONSTRAINT "integrations_pkey" PRIMARY KEY ("id")
19
+ );
20
+
21
+ -- CreateIndex
22
+ CREATE UNIQUE INDEX "integrations_userId_provider_integration_key" ON "public"."integrations"("userId", "provider", "integration");
23
+
24
+ -- AddForeignKey
25
+ ALTER TABLE "public"."integrations" ADD CONSTRAINT "integrations_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "public"."User" ADD COLUMN "onboarding" TIMESTAMP(3);
@@ -0,0 +1,175 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - The `status` column on the `integrations` table would be dropped and recreated. This will lead to data loss if there is data in the column.
5
+ - A unique constraint covering the columns `[userId,provider,integration,workspaceId]` on the table `integrations` will be added. If there are existing duplicate values, this will fail.
6
+
7
+ */
8
+ -- CreateEnum
9
+ CREATE TYPE "Role" AS ENUM ('user', 'support', 'business', 'superadmin', 'moderator', 'admin');
10
+
11
+ -- CreateEnum
12
+ CREATE TYPE "Status" AS ENUM ('active', 'suspended', 'deleted');
13
+
14
+ -- CreateEnum
15
+ CREATE TYPE "Plan" AS ENUM ('free', 'pro', 'enterprise');
16
+
17
+ -- DropIndex
18
+ DROP INDEX "User_id_key";
19
+
20
+ -- DropIndex
21
+ DROP INDEX "integrations_userId_provider_integration_key";
22
+
23
+ -- AlterTable
24
+ ALTER TABLE "User" ADD COLUMN "creditsUsed" INTEGER NOT NULL DEFAULT 0,
25
+ ADD COLUMN "defaultWorkspaceId" TEXT,
26
+ ADD COLUMN "deletedAt" TIMESTAMP(3),
27
+ ADD COLUMN "language" TEXT,
28
+ ADD COLUMN "lastLogin" TIMESTAMP(3),
29
+ ADD COLUMN "lastPasswordChange" TIMESTAMP(3),
30
+ ADD COLUMN "metadata" JSONB,
31
+ ADD COLUMN "plan" "Plan" NOT NULL DEFAULT 'free',
32
+ ADD COLUMN "role" "Role" NOT NULL DEFAULT 'user',
33
+ ADD COLUMN "status" "Status" NOT NULL DEFAULT 'active',
34
+ ADD COLUMN "timezone" TEXT,
35
+ ADD COLUMN "tokenBalance" INTEGER NOT NULL DEFAULT 0,
36
+ ADD COLUMN "twoFactorEnabled" BOOLEAN NOT NULL DEFAULT false,
37
+ ADD COLUMN "twoFactorSecret" TEXT;
38
+
39
+ -- AlterTable
40
+ ALTER TABLE "integrations" ADD COLUMN "deletedAt" TIMESTAMP(3),
41
+ ADD COLUMN "workspaceId" TEXT,
42
+ DROP COLUMN "status",
43
+ ADD COLUMN "status" "Status" NOT NULL DEFAULT 'active';
44
+
45
+ -- CreateTable
46
+ CREATE TABLE "Workspace" (
47
+ "id" TEXT NOT NULL,
48
+ "name" TEXT NOT NULL,
49
+ "description" TEXT,
50
+ "ownerId" TEXT NOT NULL,
51
+ "status" "Status" NOT NULL DEFAULT 'active',
52
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
53
+ "updatedAt" TIMESTAMP(3) NOT NULL,
54
+
55
+ CONSTRAINT "Workspace_pkey" PRIMARY KEY ("id")
56
+ );
57
+
58
+ -- CreateTable
59
+ CREATE TABLE "integration_catalog" (
60
+ "id" TEXT NOT NULL,
61
+ "provider" TEXT NOT NULL,
62
+ "integration" TEXT NOT NULL,
63
+ "name" TEXT NOT NULL,
64
+ "showDuringOnboarding" BOOLEAN NOT NULL DEFAULT true,
65
+ "default" BOOLEAN NOT NULL DEFAULT false,
66
+ "iconUrl" TEXT,
67
+ "description" TEXT,
68
+ "docsUrl" TEXT,
69
+ "status" "Status" NOT NULL DEFAULT 'active',
70
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
71
+ "updatedAt" TIMESTAMP(3) NOT NULL,
72
+
73
+ CONSTRAINT "integration_catalog_pkey" PRIMARY KEY ("id")
74
+ );
75
+
76
+ -- CreateTable
77
+ CREATE TABLE "IntegrationSyncLog" (
78
+ "id" TEXT NOT NULL,
79
+ "integrationId" TEXT NOT NULL,
80
+ "syncStatus" TEXT NOT NULL,
81
+ "errorMessage" TEXT,
82
+ "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
83
+
84
+ CONSTRAINT "IntegrationSyncLog_pkey" PRIMARY KEY ("id")
85
+ );
86
+
87
+ -- CreateTable
88
+ CREATE TABLE "AIAgent" (
89
+ "id" TEXT NOT NULL,
90
+ "name" TEXT NOT NULL,
91
+ "key" TEXT NOT NULL,
92
+ "description" TEXT,
93
+ "active" BOOLEAN NOT NULL DEFAULT true,
94
+ "config" JSONB,
95
+ "workspaceId" TEXT,
96
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
97
+ "updatedAt" TIMESTAMP(3) NOT NULL,
98
+
99
+ CONSTRAINT "AIAgent_pkey" PRIMARY KEY ("id")
100
+ );
101
+
102
+ -- CreateTable
103
+ CREATE TABLE "TokenTransaction" (
104
+ "id" TEXT NOT NULL,
105
+ "userId" TEXT NOT NULL,
106
+ "agentId" TEXT,
107
+ "tokensUsed" INTEGER NOT NULL,
108
+ "action" TEXT NOT NULL,
109
+ "metadata" JSONB,
110
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
111
+
112
+ CONSTRAINT "TokenTransaction_pkey" PRIMARY KEY ("id")
113
+ );
114
+
115
+ -- CreateTable
116
+ CREATE TABLE "AuditLog" (
117
+ "id" TEXT NOT NULL,
118
+ "userId" TEXT,
119
+ "eventType" TEXT NOT NULL,
120
+ "description" TEXT,
121
+ "metadata" JSONB,
122
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
123
+
124
+ CONSTRAINT "AuditLog_pkey" PRIMARY KEY ("id")
125
+ );
126
+
127
+ -- CreateTable
128
+ CREATE TABLE "Subscription" (
129
+ "id" TEXT NOT NULL,
130
+ "userId" TEXT NOT NULL,
131
+ "plan" "Plan" NOT NULL,
132
+ "status" TEXT NOT NULL,
133
+ "startedAt" TIMESTAMP(3) NOT NULL,
134
+ "endedAt" TIMESTAMP(3),
135
+ "nextPayment" TIMESTAMP(3),
136
+ "metadata" JSONB,
137
+
138
+ CONSTRAINT "Subscription_pkey" PRIMARY KEY ("id")
139
+ );
140
+
141
+ -- CreateIndex
142
+ CREATE UNIQUE INDEX "Workspace_ownerId_key" ON "Workspace"("ownerId");
143
+
144
+ -- CreateIndex
145
+ CREATE UNIQUE INDEX "integration_catalog_provider_integration_key" ON "integration_catalog"("provider", "integration");
146
+
147
+ -- CreateIndex
148
+ CREATE UNIQUE INDEX "AIAgent_key_key" ON "AIAgent"("key");
149
+
150
+ -- CreateIndex
151
+ CREATE UNIQUE INDEX "integrations_userId_provider_integration_workspaceId_key" ON "integrations"("userId", "provider", "integration", "workspaceId");
152
+
153
+ -- AddForeignKey
154
+ ALTER TABLE "Workspace" ADD CONSTRAINT "Workspace_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
155
+
156
+ -- AddForeignKey
157
+ ALTER TABLE "integrations" ADD CONSTRAINT "integrations_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "Workspace"("id") ON DELETE SET NULL ON UPDATE CASCADE;
158
+
159
+ -- AddForeignKey
160
+ ALTER TABLE "IntegrationSyncLog" ADD CONSTRAINT "IntegrationSyncLog_integrationId_fkey" FOREIGN KEY ("integrationId") REFERENCES "integrations"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
161
+
162
+ -- AddForeignKey
163
+ ALTER TABLE "AIAgent" ADD CONSTRAINT "AIAgent_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "Workspace"("id") ON DELETE SET NULL ON UPDATE CASCADE;
164
+
165
+ -- AddForeignKey
166
+ ALTER TABLE "TokenTransaction" ADD CONSTRAINT "TokenTransaction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
167
+
168
+ -- AddForeignKey
169
+ ALTER TABLE "TokenTransaction" ADD CONSTRAINT "TokenTransaction_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "AIAgent"("id") ON DELETE SET NULL ON UPDATE CASCADE;
170
+
171
+ -- AddForeignKey
172
+ ALTER TABLE "AuditLog" ADD CONSTRAINT "AuditLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
173
+
174
+ -- AddForeignKey
175
+ ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@@ -0,0 +1,18 @@
1
+ -- CreateTable
2
+ CREATE TABLE "public"."WaitList" (
3
+ "id" TEXT NOT NULL,
4
+ "email" TEXT NOT NULL,
5
+ "name" TEXT,
6
+ "company" TEXT,
7
+ "role" TEXT,
8
+ "teamSize" TEXT,
9
+ "useCase" TEXT,
10
+ "consentToUpdates" BOOLEAN NOT NULL,
11
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ "updatedAt" TIMESTAMP(3) NOT NULL,
13
+
14
+ CONSTRAINT "WaitList_pkey" PRIMARY KEY ("id")
15
+ );
16
+
17
+ -- CreateIndex
18
+ CREATE UNIQUE INDEX "WaitList_email_key" ON "public"."WaitList"("email");
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"
@@ -0,0 +1,271 @@
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ }
4
+
5
+ datasource db {
6
+ provider = "postgresql"
7
+ url = env("DATABASE_URL")
8
+ directUrl = env("DIRECT_URL")
9
+ }
10
+
11
+ /// User roles, scoped globally and workspace-wise if needed
12
+ enum Role {
13
+ user
14
+ support
15
+ business
16
+ superadmin
17
+ moderator
18
+ admin
19
+ }
20
+
21
+ /// Status enums for consistent use
22
+ enum Status {
23
+ active
24
+ suspended
25
+ deleted
26
+ }
27
+
28
+ /// Subscription plans
29
+ enum Plan {
30
+ free
31
+ pro
32
+ enterprise
33
+ }
34
+
35
+ /// Workspaces represent shared AI work environments
36
+ model Workspace {
37
+ id String @id @default(uuid())
38
+ name String
39
+ description String?
40
+ ownerId String @unique // Add UNIQUE here for one-to-one relation
41
+ status Status @default(active)
42
+
43
+ createdAt DateTime @default(now())
44
+ updatedAt DateTime @updatedAt
45
+
46
+ owner User @relation(fields: [ownerId], references: [id]) // defining side
47
+ integrations Integration[]
48
+ aiAgents AIAgent[]
49
+ }
50
+
51
+ model User {
52
+ id String @id @default(uuid())
53
+
54
+ name String
55
+ image String?
56
+
57
+ email String @unique
58
+
59
+ password String?
60
+
61
+ emailVerified DateTime?
62
+
63
+ onboarding DateTime?
64
+
65
+ role Role @default(user)
66
+
67
+ timezone String?
68
+ language String?
69
+
70
+ status Status @default(active)
71
+
72
+ lastLogin DateTime?
73
+ lastPasswordChange DateTime?
74
+ twoFactorEnabled Boolean @default(false)
75
+ twoFactorSecret String?
76
+
77
+ metadata Json?
78
+
79
+ plan Plan @default(free)
80
+ tokenBalance Int @default(0)
81
+ creditsUsed Int @default(0)
82
+
83
+ accounts Account[]
84
+ integrations Integration[]
85
+ tokenTransactions TokenTransaction[]
86
+ auditLogs AuditLog[]
87
+ subscriptions Subscription[]
88
+
89
+ defaultWorkspaceId String?
90
+
91
+ // Inverse side of relation, no fields or references here!
92
+ defaultWorkspace Workspace? @relation()
93
+
94
+ createdAt DateTime @default(now())
95
+ updatedAt DateTime @updatedAt
96
+ deletedAt DateTime?
97
+ }
98
+
99
+ /// OAuth or other third-party accounts linked to user
100
+ model Account {
101
+ id String @id @default(uuid())
102
+ userId String
103
+ type String
104
+ provider String
105
+ providerAccountId String
106
+ refresh_token String? @db.Text
107
+ access_token String? @db.Text
108
+ expires_at Int?
109
+ token_type String?
110
+ scope String?
111
+ id_token String? @db.Text
112
+ session_state String?
113
+
114
+ createdAt DateTime @default(now())
115
+ updatedAt DateTime @updatedAt
116
+
117
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
118
+
119
+ @@unique([provider, providerAccountId])
120
+ }
121
+
122
+ /// Email verification tokens for account security
123
+ model VerificationToken {
124
+ id String @id @default(uuid())
125
+ email String
126
+ token String @unique
127
+ expiresAt DateTime
128
+
129
+ @@unique([email, token])
130
+ }
131
+
132
+ /// Password reset tokens
133
+ model PasswordResetToken {
134
+ id String @id @default(uuid())
135
+ email String
136
+ token String @unique
137
+ expiresAt DateTime
138
+
139
+ @@unique([email, token])
140
+ }
141
+
142
+ /// User’s connected integrations scoped optionally by workspace
143
+ model Integration {
144
+ id String @id @default(cuid())
145
+ userId String
146
+ workspaceId String? // optional workspace scoping
147
+ provider String // e.g. 'google'
148
+ providerAccountId String // Unique provider account user id
149
+ integration String // e.g. 'gmail'
150
+ accessToken String // encrypted
151
+ refreshToken String? // encrypted
152
+ expiresAt DateTime?
153
+ scopes Json // OAuth scopes granted
154
+ profile Json // profile info
155
+ status Status @default(active)
156
+ metadata Json? // extra, e.g. connectedAt, nonce
157
+
158
+ createdAt DateTime @default(now())
159
+ updatedAt DateTime @updatedAt
160
+ deletedAt DateTime?
161
+
162
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
163
+ workspace Workspace? @relation(fields: [workspaceId], references: [id])
164
+ integrationSyncLog IntegrationSyncLog[]
165
+
166
+ @@unique([userId, provider, integration, workspaceId], name: "user_provider_integration_workspace")
167
+ @@map("integrations")
168
+ }
169
+
170
+ /// Master list of officially supported integrations/tools
171
+ model IntegrationCatalog {
172
+ id String @id @default(uuid())
173
+ provider String
174
+ integration String
175
+ name String
176
+ showDuringOnboarding Boolean @default(true)
177
+ default Boolean @default(false)
178
+ iconUrl String?
179
+ description String?
180
+ docsUrl String?
181
+ status Status @default(active)
182
+
183
+ createdAt DateTime @default(now())
184
+ updatedAt DateTime @updatedAt
185
+
186
+ @@unique([provider, integration])
187
+ @@map("integration_catalog")
188
+ }
189
+
190
+ /// Log of sync activity for integrations
191
+ model IntegrationSyncLog {
192
+ id String @id @default(uuid())
193
+ integrationId String
194
+ syncStatus String // e.g. 'success', 'error', 'pending'
195
+ errorMessage String?
196
+ timestamp DateTime @default(now())
197
+
198
+ integration Integration @relation(fields: [integrationId], references: [id])
199
+ }
200
+
201
+ /// Represents AI agents your platform offers
202
+ model AIAgent {
203
+ id String @id @default(uuid())
204
+ name String
205
+ key String @unique
206
+ description String?
207
+ active Boolean @default(true)
208
+ config Json? // JSON spec for agent config
209
+
210
+ workspaceId String? // scoped to workspace if applicable
211
+ workspace Workspace? @relation(fields: [workspaceId], references: [id])
212
+
213
+ createdAt DateTime @default(now())
214
+ updatedAt DateTime @updatedAt
215
+
216
+ tokenTransactions TokenTransaction[]
217
+ }
218
+
219
+ /// Tracks per-user AI token usage and actions
220
+ model TokenTransaction {
221
+ id String @id @default(uuid())
222
+ userId String
223
+ agentId String?
224
+ tokensUsed Int
225
+ action String // descriptive action name, e.g. "code_generation"
226
+ metadata Json?
227
+ createdAt DateTime @default(now())
228
+
229
+ user User @relation(fields: [userId], references: [id])
230
+ agent AIAgent? @relation(fields: [agentId], references: [id])
231
+ }
232
+
233
+ /// Security and system audit logs
234
+ model AuditLog {
235
+ id String @id @default(uuid())
236
+ userId String? // null if system-wide event
237
+ eventType String
238
+ description String?
239
+ metadata Json?
240
+ createdAt DateTime @default(now())
241
+
242
+ user User? @relation(fields: [userId], references: [id])
243
+ }
244
+
245
+ /// User subscription and billing information
246
+ model Subscription {
247
+ id String @id @default(uuid())
248
+ userId String
249
+ plan Plan
250
+ status String // e.g. 'active', 'canceled', 'trialing'
251
+ startedAt DateTime
252
+ endedAt DateTime?
253
+ nextPayment DateTime?
254
+ metadata Json?
255
+
256
+ user User @relation(fields: [userId], references: [id])
257
+ }
258
+
259
+ model WaitList {
260
+ id String @id @default(uuid())
261
+ email String @unique
262
+ name String?
263
+ company String?
264
+ role String?
265
+ teamSize String?
266
+ useCase String?
267
+ consentToUpdates Boolean
268
+
269
+ createdAt DateTime @default(now())
270
+ updatedAt DateTime @updatedAt
271
+ }