@danielcok17/prisma-db 1.15.1 → 1.16.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielcok17/prisma-db",
3
- "version": "1.15.1",
3
+ "version": "1.16.1",
4
4
  "description": "Shared Prisma schema for Legal AI applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/prisma/app.prisma CHANGED
@@ -85,6 +85,7 @@ model User {
85
85
  registrationUtmTerm String? // Keywords pri registrácii
86
86
  // Profile fields
87
87
  phone String? // Mobilný telefón
88
+ phoneVerified DateTime? // Kedy bol telefón overený cez OTP
88
89
  occupation String? // Povolanie (Právnik, Účtovník, etc.)
89
90
  preferredLanguage String? @default("sk") // Jazyk odpovedi (sk, cs, en)
90
91
  // Relations
@@ -116,6 +117,7 @@ model User {
116
117
  conversions Conversion[]
117
118
  // Ingestion pipeline
118
119
  ingestedDocuments IngestedDocument[]
120
+ adminGrants AdminGrant[]
119
121
 
120
122
  // Multi-brand: compound unique allows same email across brands
121
123
  @@unique([email, brand])
@@ -189,6 +191,7 @@ model Organization {
189
191
  invites OrganizationInvite[]
190
192
  stripeCustomer StripeCustomer?
191
193
  folderShares FolderShare[]
194
+ adminGrants AdminGrant[]
192
195
 
193
196
  createdAt DateTime @default(now())
194
197
  updatedAt DateTime @updatedAt
@@ -1254,3 +1257,54 @@ model FolderShare {
1254
1257
  @@index([organizationId])
1255
1258
  @@index([sharedById])
1256
1259
  }
1260
+
1261
+ // ============================================
1262
+ // ADMIN GRANTS & INVITES
1263
+ // ============================================
1264
+
1265
+ model AdminGrant {
1266
+ id String @id @default(cuid())
1267
+ userId String?
1268
+ organizationId String?
1269
+ tier SubscriptionTier
1270
+ startsAt DateTime @default(now())
1271
+ expiresAt DateTime
1272
+ grantedBy String
1273
+ reason String?
1274
+ inviteId String?
1275
+ isActive Boolean @default(true)
1276
+ revokedAt DateTime?
1277
+ revokedBy String?
1278
+ createdAt DateTime @default(now())
1279
+ updatedAt DateTime @updatedAt
1280
+
1281
+ user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
1282
+ organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1283
+
1284
+ @@index([userId])
1285
+ @@index([organizationId])
1286
+ @@index([expiresAt])
1287
+ @@index([isActive])
1288
+ }
1289
+
1290
+ model AppInvite {
1291
+ id String @id @default(cuid())
1292
+ email String
1293
+ token String @unique
1294
+ invitedByEmail String
1295
+ grantTier SubscriptionTier?
1296
+ grantDays Int?
1297
+ targetOrgId String?
1298
+ targetOrgRole MemberRole?
1299
+ createOrgName String?
1300
+ expiresAt DateTime
1301
+ acceptedAt DateTime?
1302
+ acceptedByUserId String?
1303
+ isActive Boolean @default(true)
1304
+ createdAt DateTime @default(now())
1305
+ updatedAt DateTime @updatedAt
1306
+
1307
+ @@index([email])
1308
+ @@index([token])
1309
+ @@index([isActive])
1310
+ }
@@ -0,0 +1,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "User" ADD COLUMN IF NOT EXISTS "phoneVerified" TIMESTAMP(3);
@@ -0,0 +1,121 @@
1
+ -- CreateTable
2
+ CREATE TABLE IF NOT EXISTS "PhoneOtp" (
3
+ "id" TEXT NOT NULL,
4
+ "userId" TEXT NOT NULL,
5
+ "phone" TEXT NOT NULL,
6
+ "bulkgateId" TEXT NOT NULL,
7
+ "expiresAt" TIMESTAMP(3) NOT NULL,
8
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
9
+
10
+ CONSTRAINT "PhoneOtp_pkey" PRIMARY KEY ("id")
11
+ );
12
+
13
+ -- CreateTable
14
+ CREATE TABLE IF NOT EXISTS "AdminGrant" (
15
+ "id" TEXT NOT NULL,
16
+ "userId" TEXT,
17
+ "organizationId" TEXT,
18
+ "tier" "SubscriptionTier" NOT NULL,
19
+ "startsAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
20
+ "expiresAt" TIMESTAMP(3) NOT NULL,
21
+ "grantedBy" TEXT NOT NULL,
22
+ "reason" TEXT,
23
+ "inviteId" TEXT,
24
+ "isActive" BOOLEAN NOT NULL DEFAULT true,
25
+ "revokedAt" TIMESTAMP(3),
26
+ "revokedBy" TEXT,
27
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
28
+ "updatedAt" TIMESTAMP(3) NOT NULL,
29
+
30
+ CONSTRAINT "AdminGrant_pkey" PRIMARY KEY ("id")
31
+ );
32
+
33
+ -- CreateTable
34
+ CREATE TABLE IF NOT EXISTS "AppInvite" (
35
+ "id" TEXT NOT NULL,
36
+ "email" TEXT NOT NULL,
37
+ "token" TEXT NOT NULL,
38
+ "invitedByEmail" TEXT NOT NULL,
39
+ "grantTier" "SubscriptionTier",
40
+ "grantDays" INTEGER,
41
+ "targetOrgId" TEXT,
42
+ "targetOrgRole" "MemberRole",
43
+ "createOrgName" TEXT,
44
+ "expiresAt" TIMESTAMP(3) NOT NULL,
45
+ "acceptedAt" TIMESTAMP(3),
46
+ "acceptedByUserId" TEXT,
47
+ "isActive" BOOLEAN NOT NULL DEFAULT true,
48
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
49
+ "updatedAt" TIMESTAMP(3) NOT NULL,
50
+
51
+ CONSTRAINT "AppInvite_pkey" PRIMARY KEY ("id")
52
+ );
53
+
54
+ -- CreateIndex
55
+ CREATE UNIQUE INDEX IF NOT EXISTS "PhoneOtp_bulkgateId_key" ON "PhoneOtp"("bulkgateId");
56
+
57
+ -- CreateIndex
58
+ CREATE INDEX IF NOT EXISTS "PhoneOtp_userId_idx" ON "PhoneOtp"("userId");
59
+
60
+ -- CreateIndex
61
+ CREATE INDEX IF NOT EXISTS "PhoneOtp_bulkgateId_idx" ON "PhoneOtp"("bulkgateId");
62
+
63
+ -- CreateIndex
64
+ CREATE INDEX IF NOT EXISTS "PhoneOtp_expiresAt_idx" ON "PhoneOtp"("expiresAt");
65
+
66
+ -- CreateIndex
67
+ CREATE INDEX IF NOT EXISTS "AdminGrant_userId_idx" ON "AdminGrant"("userId");
68
+
69
+ -- CreateIndex
70
+ CREATE INDEX IF NOT EXISTS "AdminGrant_organizationId_idx" ON "AdminGrant"("organizationId");
71
+
72
+ -- CreateIndex
73
+ CREATE INDEX IF NOT EXISTS "AdminGrant_expiresAt_idx" ON "AdminGrant"("expiresAt");
74
+
75
+ -- CreateIndex
76
+ CREATE INDEX IF NOT EXISTS "AdminGrant_isActive_idx" ON "AdminGrant"("isActive");
77
+
78
+ -- CreateIndex
79
+ CREATE UNIQUE INDEX IF NOT EXISTS "AppInvite_token_key" ON "AppInvite"("token");
80
+
81
+ -- CreateIndex
82
+ CREATE INDEX IF NOT EXISTS "AppInvite_email_idx" ON "AppInvite"("email");
83
+
84
+ -- CreateIndex
85
+ CREATE INDEX IF NOT EXISTS "AppInvite_token_idx" ON "AppInvite"("token");
86
+
87
+ -- CreateIndex
88
+ CREATE INDEX IF NOT EXISTS "AppInvite_isActive_idx" ON "AppInvite"("isActive");
89
+
90
+ -- CreateIndex
91
+ CREATE INDEX IF NOT EXISTS "User_phone_idx" ON "User"("phone");
92
+
93
+ -- AddForeignKey (idempotent)
94
+ DO $$ BEGIN
95
+ IF NOT EXISTS (
96
+ SELECT 1 FROM pg_constraint WHERE conname = 'PhoneOtp_userId_fkey'
97
+ ) THEN
98
+ ALTER TABLE "PhoneOtp" ADD CONSTRAINT "PhoneOtp_userId_fkey"
99
+ FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
100
+ END IF;
101
+ END $$;
102
+
103
+ -- AddForeignKey (idempotent)
104
+ DO $$ BEGIN
105
+ IF NOT EXISTS (
106
+ SELECT 1 FROM pg_constraint WHERE conname = 'AdminGrant_userId_fkey'
107
+ ) THEN
108
+ ALTER TABLE "AdminGrant" ADD CONSTRAINT "AdminGrant_userId_fkey"
109
+ FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
110
+ END IF;
111
+ END $$;
112
+
113
+ -- AddForeignKey (idempotent)
114
+ DO $$ BEGIN
115
+ IF NOT EXISTS (
116
+ SELECT 1 FROM pg_constraint WHERE conname = 'AdminGrant_organizationId_fkey'
117
+ ) THEN
118
+ ALTER TABLE "AdminGrant" ADD CONSTRAINT "AdminGrant_organizationId_fkey"
119
+ FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
120
+ END IF;
121
+ END $$;