@danielcok17/prisma-db 1.17.0 → 1.19.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
CHANGED
package/prisma/app.prisma
CHANGED
|
@@ -130,12 +130,18 @@ model User {
|
|
|
130
130
|
// Ingestion pipeline
|
|
131
131
|
ingestedDocuments IngestedDocument[]
|
|
132
132
|
adminGrants AdminGrant[]
|
|
133
|
+
invoiceGrants InvoiceGrant[]
|
|
133
134
|
emailSends EmailSend[]
|
|
134
135
|
emailConsent EmailConsent?
|
|
135
136
|
userScore UserScore?
|
|
136
137
|
sequenceEnrollments EmailSequenceEnrollment[]
|
|
137
138
|
referralsSent Referral[] @relation("ReferralsSent")
|
|
138
139
|
referralsReceived Referral[] @relation("ReferralsReceived")
|
|
140
|
+
// Files & folders system
|
|
141
|
+
userFiles UserFile[] @relation("UserFiles")
|
|
142
|
+
reviewTables FileReviewTable[] @relation("UserReviewTables")
|
|
143
|
+
filesTotalBytes BigInt @default(0)
|
|
144
|
+
filesCount Int @default(0)
|
|
139
145
|
|
|
140
146
|
// Multi-brand: compound unique allows same email across brands
|
|
141
147
|
@@unique([email, brand])
|
|
@@ -213,6 +219,7 @@ model Organization {
|
|
|
213
219
|
stripeCustomer StripeCustomer?
|
|
214
220
|
folderShares FolderShare[]
|
|
215
221
|
adminGrants AdminGrant[]
|
|
222
|
+
invoiceGrants InvoiceGrant[]
|
|
216
223
|
|
|
217
224
|
createdAt DateTime @default(now())
|
|
218
225
|
updatedAt DateTime @updatedAt
|
|
@@ -323,6 +330,7 @@ model Answer {
|
|
|
323
330
|
WorkflowLog WorkflowLog[]
|
|
324
331
|
files MessageFile[]
|
|
325
332
|
canvasDocumentId String? // No FK constraint - flexible document management
|
|
333
|
+
userFiles UserFile[] @relation("UserFileAnswers")
|
|
326
334
|
|
|
327
335
|
@@index([conversationId])
|
|
328
336
|
@@index([messageId])
|
|
@@ -725,7 +733,8 @@ model StripeSubscription {
|
|
|
725
733
|
trialEnd DateTime?
|
|
726
734
|
|
|
727
735
|
// Additional fields
|
|
728
|
-
quantity Int
|
|
736
|
+
quantity Int @default(1) // Počet seats (pre LAW_FIRM/ENTERPRISE tier)
|
|
737
|
+
collectionMethod CollectionMethod @default(CHARGE_AUTOMATICALLY) // Karta vs faktúra
|
|
729
738
|
defaultPaymentMethodId String? // Stripe payment method ID
|
|
730
739
|
|
|
731
740
|
metadata Json? // Dodatočné Stripe metadata
|
|
@@ -887,7 +896,8 @@ enum FolderItemType {
|
|
|
887
896
|
CONVERSATION
|
|
888
897
|
CANVAS_DOCUMENT
|
|
889
898
|
REFERENCE
|
|
890
|
-
ATTACHMENT
|
|
899
|
+
ATTACHMENT // deprecated — kept for migration of old data
|
|
900
|
+
USER_FILE
|
|
891
901
|
}
|
|
892
902
|
|
|
893
903
|
// Folder activity types (for timeline)
|
|
@@ -899,10 +909,35 @@ enum FolderActivityType {
|
|
|
899
909
|
ITEM_ADDED
|
|
900
910
|
ITEM_REMOVED
|
|
901
911
|
ITEM_UPDATED
|
|
912
|
+
ITEM_MOVED
|
|
902
913
|
SHARE_ADDED
|
|
903
914
|
SHARE_REMOVED
|
|
904
915
|
USER_MESSAGE
|
|
905
916
|
USER_NOTE
|
|
917
|
+
FILE_INDEXED
|
|
918
|
+
FILE_INDEX_ERROR
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
enum UserFileStatus {
|
|
922
|
+
STORED
|
|
923
|
+
QUEUED
|
|
924
|
+
INDEXING
|
|
925
|
+
INDEXED
|
|
926
|
+
ERROR
|
|
927
|
+
DELETED
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
enum IndexingJobStatus {
|
|
931
|
+
QUEUED
|
|
932
|
+
RUNNING
|
|
933
|
+
COMPLETED
|
|
934
|
+
FAILED
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
enum FolderType {
|
|
938
|
+
PERSONAL
|
|
939
|
+
MATTER
|
|
940
|
+
KNOWLEDGE_BASE
|
|
906
941
|
}
|
|
907
942
|
|
|
908
943
|
// Folder permission levels
|
|
@@ -1086,6 +1121,121 @@ enum IngestionStatus {
|
|
|
1086
1121
|
ERROR
|
|
1087
1122
|
}
|
|
1088
1123
|
|
|
1124
|
+
model UserFile {
|
|
1125
|
+
id String @id @default(cuid())
|
|
1126
|
+
userId String
|
|
1127
|
+
|
|
1128
|
+
storageKey String @unique
|
|
1129
|
+
storageUrl String?
|
|
1130
|
+
checksumSha256 String
|
|
1131
|
+
|
|
1132
|
+
fileName String
|
|
1133
|
+
fileType String
|
|
1134
|
+
fileSize Int
|
|
1135
|
+
pageCount Int?
|
|
1136
|
+
language String? @default("sk")
|
|
1137
|
+
|
|
1138
|
+
status UserFileStatus @default(STORED)
|
|
1139
|
+
|
|
1140
|
+
docType String?
|
|
1141
|
+
legalArea String?
|
|
1142
|
+
summary String?
|
|
1143
|
+
extractedData Json?
|
|
1144
|
+
references String[] @default([])
|
|
1145
|
+
chunkCount Int?
|
|
1146
|
+
qdrantDocId String? @unique
|
|
1147
|
+
indexingCost Float?
|
|
1148
|
+
indexedAt DateTime?
|
|
1149
|
+
indexError String?
|
|
1150
|
+
|
|
1151
|
+
tags String[] @default([])
|
|
1152
|
+
|
|
1153
|
+
parentFileId String?
|
|
1154
|
+
versionNumber Int @default(1)
|
|
1155
|
+
|
|
1156
|
+
answerId String?
|
|
1157
|
+
|
|
1158
|
+
createdAt DateTime @default(now())
|
|
1159
|
+
updatedAt DateTime @updatedAt
|
|
1160
|
+
deletedAt DateTime?
|
|
1161
|
+
|
|
1162
|
+
user User @relation("UserFiles", fields: [userId], references: [id], onDelete: Cascade)
|
|
1163
|
+
answer Answer? @relation("UserFileAnswers", fields: [answerId], references: [id], onDelete: SetNull)
|
|
1164
|
+
indexingJobs FileIndexingJob[]
|
|
1165
|
+
deadlines FileDeadline[]
|
|
1166
|
+
parentFile UserFile? @relation("FileVersions", fields: [parentFileId], references: [id], onDelete: SetNull)
|
|
1167
|
+
childVersions UserFile[] @relation("FileVersions")
|
|
1168
|
+
|
|
1169
|
+
@@index([userId])
|
|
1170
|
+
@@index([status])
|
|
1171
|
+
@@index([userId, status])
|
|
1172
|
+
@@index([userId, deletedAt])
|
|
1173
|
+
@@index([qdrantDocId])
|
|
1174
|
+
@@index([answerId])
|
|
1175
|
+
@@index([checksumSha256])
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
model FileIndexingJob {
|
|
1179
|
+
id String @id @default(cuid())
|
|
1180
|
+
fileId String
|
|
1181
|
+
userId String
|
|
1182
|
+
status IndexingJobStatus @default(QUEUED)
|
|
1183
|
+
attempts Int @default(0)
|
|
1184
|
+
maxAttempts Int @default(3)
|
|
1185
|
+
errorMsg String?
|
|
1186
|
+
startedAt DateTime?
|
|
1187
|
+
finishedAt DateTime?
|
|
1188
|
+
createdAt DateTime @default(now())
|
|
1189
|
+
|
|
1190
|
+
file UserFile @relation(fields: [fileId], references: [id], onDelete: Cascade)
|
|
1191
|
+
|
|
1192
|
+
@@index([fileId])
|
|
1193
|
+
@@index([userId])
|
|
1194
|
+
@@index([status])
|
|
1195
|
+
@@index([createdAt])
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
model FileDeadline {
|
|
1199
|
+
id String @id @default(cuid())
|
|
1200
|
+
fileId String
|
|
1201
|
+
userId String
|
|
1202
|
+
label String
|
|
1203
|
+
deadlineAt DateTime
|
|
1204
|
+
notifyAt DateTime?
|
|
1205
|
+
isNotified Boolean @default(false)
|
|
1206
|
+
isDismissed Boolean @default(false)
|
|
1207
|
+
sourceSection String?
|
|
1208
|
+
sourcePage Int?
|
|
1209
|
+
createdAt DateTime @default(now())
|
|
1210
|
+
|
|
1211
|
+
file UserFile @relation(fields: [fileId], references: [id], onDelete: Cascade)
|
|
1212
|
+
|
|
1213
|
+
@@index([fileId])
|
|
1214
|
+
@@index([userId])
|
|
1215
|
+
@@index([deadlineAt])
|
|
1216
|
+
@@index([notifyAt, isNotified])
|
|
1217
|
+
@@index([userId, isDismissed])
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
model FileReviewTable {
|
|
1221
|
+
id String @id @default(cuid())
|
|
1222
|
+
userId String
|
|
1223
|
+
folderId String?
|
|
1224
|
+
name String
|
|
1225
|
+
columns Json
|
|
1226
|
+
fileIds String[] @default([])
|
|
1227
|
+
results Json?
|
|
1228
|
+
status String @default("draft")
|
|
1229
|
+
createdAt DateTime @default(now())
|
|
1230
|
+
updatedAt DateTime @updatedAt
|
|
1231
|
+
|
|
1232
|
+
user User @relation("UserReviewTables", fields: [userId], references: [id], onDelete: Cascade)
|
|
1233
|
+
|
|
1234
|
+
@@index([userId])
|
|
1235
|
+
@@index([folderId])
|
|
1236
|
+
@@index([status])
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1089
1239
|
enum LifecycleStage {
|
|
1090
1240
|
REGISTERED
|
|
1091
1241
|
ACTIVATED
|
|
@@ -1150,6 +1300,17 @@ enum ReferralStatus {
|
|
|
1150
1300
|
REWARDED
|
|
1151
1301
|
}
|
|
1152
1302
|
|
|
1303
|
+
enum InvoiceGrantStatus {
|
|
1304
|
+
PENDING // Faktúra odoslaná, čaká na platbu
|
|
1305
|
+
PAID // Zaplatené, grant aktívny
|
|
1306
|
+
VOID // Stornovaná (admin alebo Stripe)
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
enum CollectionMethod {
|
|
1310
|
+
CHARGE_AUTOMATICALLY // Automatické strhnutie kartou
|
|
1311
|
+
SEND_INVOICE // Faktúra na email (bank transfer)
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1153
1314
|
// ============================================
|
|
1154
1315
|
// CANVAS DOCUMENT MODELS
|
|
1155
1316
|
// ============================================
|
|
@@ -1223,6 +1384,9 @@ model Folder {
|
|
|
1223
1384
|
path String @default("/") // Materialized path: "/parentId/grandparentId/..."
|
|
1224
1385
|
depth Int @default(0)
|
|
1225
1386
|
|
|
1387
|
+
// Folder type
|
|
1388
|
+
folderType FolderType @default(PERSONAL)
|
|
1389
|
+
|
|
1226
1390
|
// Metadata
|
|
1227
1391
|
sortOrder Int @default(0)
|
|
1228
1392
|
isArchived Boolean @default(false)
|
|
@@ -1372,6 +1536,33 @@ model AdminGrant {
|
|
|
1372
1536
|
@@index([isActive])
|
|
1373
1537
|
}
|
|
1374
1538
|
|
|
1539
|
+
// One-off admin invoice — standalone faktúra pre špeciálne prípady (demo, trial, custom deal)
|
|
1540
|
+
// Pre recurring fakturáciu použiť StripeSubscription s collectionMethod=SEND_INVOICE
|
|
1541
|
+
model InvoiceGrant {
|
|
1542
|
+
id String @id @default(cuid())
|
|
1543
|
+
userId String?
|
|
1544
|
+
organizationId String?
|
|
1545
|
+
stripeInvoiceId String @unique
|
|
1546
|
+
tier SubscriptionTier
|
|
1547
|
+
durationDays Int // Na koľko dní sa aktivuje grant po platbe
|
|
1548
|
+
amount Int // Suma v centoch (EUR)
|
|
1549
|
+
status InvoiceGrantStatus @default(PENDING)
|
|
1550
|
+
grantId String? // ID AdminGrantu vytvoreného po platbe
|
|
1551
|
+
createdBy String // Admin email
|
|
1552
|
+
notes String?
|
|
1553
|
+
paidAt DateTime?
|
|
1554
|
+
createdAt DateTime @default(now())
|
|
1555
|
+
updatedAt DateTime @updatedAt
|
|
1556
|
+
|
|
1557
|
+
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
1558
|
+
organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
1559
|
+
|
|
1560
|
+
@@index([userId])
|
|
1561
|
+
@@index([organizationId])
|
|
1562
|
+
@@index([status])
|
|
1563
|
+
@@index([stripeInvoiceId])
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1375
1566
|
model AppInvite {
|
|
1376
1567
|
id String @id @default(cuid())
|
|
1377
1568
|
email String
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
-- CreateEnum
|
|
2
|
+
CREATE TYPE "InvoiceGrantStatus" AS ENUM ('PENDING', 'PAID', 'VOID');
|
|
3
|
+
|
|
4
|
+
-- CreateEnum
|
|
5
|
+
CREATE TYPE "CollectionMethod" AS ENUM ('CHARGE_AUTOMATICALLY', 'SEND_INVOICE');
|
|
6
|
+
|
|
7
|
+
-- AlterTable
|
|
8
|
+
ALTER TABLE "StripeSubscription" ADD COLUMN "collectionMethod" "CollectionMethod" NOT NULL DEFAULT 'CHARGE_AUTOMATICALLY';
|
|
9
|
+
|
|
10
|
+
-- CreateTable
|
|
11
|
+
CREATE TABLE "InvoiceGrant" (
|
|
12
|
+
"id" TEXT NOT NULL,
|
|
13
|
+
"userId" TEXT,
|
|
14
|
+
"organizationId" TEXT,
|
|
15
|
+
"stripeInvoiceId" TEXT NOT NULL,
|
|
16
|
+
"tier" "SubscriptionTier" NOT NULL,
|
|
17
|
+
"durationDays" INTEGER NOT NULL,
|
|
18
|
+
"amount" INTEGER NOT NULL,
|
|
19
|
+
"status" "InvoiceGrantStatus" NOT NULL DEFAULT 'PENDING',
|
|
20
|
+
"grantId" TEXT,
|
|
21
|
+
"createdBy" TEXT NOT NULL,
|
|
22
|
+
"notes" TEXT,
|
|
23
|
+
"paidAt" TIMESTAMP(3),
|
|
24
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
25
|
+
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
26
|
+
|
|
27
|
+
CONSTRAINT "InvoiceGrant_pkey" PRIMARY KEY ("id")
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
-- CreateIndex
|
|
31
|
+
CREATE UNIQUE INDEX "InvoiceGrant_stripeInvoiceId_key" ON "InvoiceGrant"("stripeInvoiceId");
|
|
32
|
+
|
|
33
|
+
-- CreateIndex
|
|
34
|
+
CREATE INDEX "InvoiceGrant_userId_idx" ON "InvoiceGrant"("userId");
|
|
35
|
+
|
|
36
|
+
-- CreateIndex
|
|
37
|
+
CREATE INDEX "InvoiceGrant_organizationId_idx" ON "InvoiceGrant"("organizationId");
|
|
38
|
+
|
|
39
|
+
-- CreateIndex
|
|
40
|
+
CREATE INDEX "InvoiceGrant_status_idx" ON "InvoiceGrant"("status");
|
|
41
|
+
|
|
42
|
+
-- CreateIndex
|
|
43
|
+
CREATE INDEX "InvoiceGrant_stripeInvoiceId_idx" ON "InvoiceGrant"("stripeInvoiceId");
|
|
44
|
+
|
|
45
|
+
-- AddForeignKey
|
|
46
|
+
ALTER TABLE "InvoiceGrant" ADD CONSTRAINT "InvoiceGrant_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
47
|
+
|
|
48
|
+
-- AddForeignKey
|
|
49
|
+
ALTER TABLE "InvoiceGrant" ADD CONSTRAINT "InvoiceGrant_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
-- CreateEnum
|
|
2
|
+
CREATE TYPE "UserFileStatus" AS ENUM ('STORED', 'QUEUED', 'INDEXING', 'INDEXED', 'ERROR', 'DELETED');
|
|
3
|
+
|
|
4
|
+
-- CreateEnum
|
|
5
|
+
CREATE TYPE "IndexingJobStatus" AS ENUM ('QUEUED', 'RUNNING', 'COMPLETED', 'FAILED');
|
|
6
|
+
|
|
7
|
+
-- CreateEnum
|
|
8
|
+
CREATE TYPE "FolderType" AS ENUM ('PERSONAL', 'MATTER', 'KNOWLEDGE_BASE');
|
|
9
|
+
|
|
10
|
+
-- AlterEnum
|
|
11
|
+
-- This migration adds more than one value to an enum.
|
|
12
|
+
-- With PostgreSQL versions 11 and earlier, this is not possible
|
|
13
|
+
-- in a single migration. This can be worked around by creating
|
|
14
|
+
-- multiple migrations, each migration adding only one value to
|
|
15
|
+
-- the enum.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ALTER TYPE "FolderActivityType" ADD VALUE 'ITEM_MOVED';
|
|
19
|
+
ALTER TYPE "FolderActivityType" ADD VALUE 'FILE_INDEXED';
|
|
20
|
+
ALTER TYPE "FolderActivityType" ADD VALUE 'FILE_INDEX_ERROR';
|
|
21
|
+
|
|
22
|
+
-- AlterEnum
|
|
23
|
+
ALTER TYPE "FolderItemType" ADD VALUE 'USER_FILE';
|
|
24
|
+
|
|
25
|
+
-- AlterTable
|
|
26
|
+
ALTER TABLE "Folder" ADD COLUMN "folderType" "FolderType" NOT NULL DEFAULT 'PERSONAL';
|
|
27
|
+
|
|
28
|
+
-- AlterTable
|
|
29
|
+
ALTER TABLE "User" ADD COLUMN "filesCount" INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
ADD COLUMN "filesTotalBytes" BIGINT NOT NULL DEFAULT 0;
|
|
31
|
+
|
|
32
|
+
-- CreateTable
|
|
33
|
+
CREATE TABLE "UserFile" (
|
|
34
|
+
"id" TEXT NOT NULL,
|
|
35
|
+
"userId" TEXT NOT NULL,
|
|
36
|
+
"storageKey" TEXT NOT NULL,
|
|
37
|
+
"storageUrl" TEXT,
|
|
38
|
+
"checksumSha256" TEXT NOT NULL,
|
|
39
|
+
"fileName" TEXT NOT NULL,
|
|
40
|
+
"fileType" TEXT NOT NULL,
|
|
41
|
+
"fileSize" INTEGER NOT NULL,
|
|
42
|
+
"pageCount" INTEGER,
|
|
43
|
+
"language" TEXT DEFAULT 'sk',
|
|
44
|
+
"status" "UserFileStatus" NOT NULL DEFAULT 'STORED',
|
|
45
|
+
"docType" TEXT,
|
|
46
|
+
"legalArea" TEXT,
|
|
47
|
+
"summary" TEXT,
|
|
48
|
+
"extractedData" JSONB,
|
|
49
|
+
"references" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
50
|
+
"chunkCount" INTEGER,
|
|
51
|
+
"qdrantDocId" TEXT,
|
|
52
|
+
"indexingCost" DOUBLE PRECISION,
|
|
53
|
+
"indexedAt" TIMESTAMP(3),
|
|
54
|
+
"indexError" TEXT,
|
|
55
|
+
"tags" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
56
|
+
"parentFileId" TEXT,
|
|
57
|
+
"versionNumber" INTEGER NOT NULL DEFAULT 1,
|
|
58
|
+
"answerId" TEXT,
|
|
59
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
60
|
+
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
61
|
+
"deletedAt" TIMESTAMP(3),
|
|
62
|
+
|
|
63
|
+
CONSTRAINT "UserFile_pkey" PRIMARY KEY ("id")
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
-- CreateTable
|
|
67
|
+
CREATE TABLE "FileIndexingJob" (
|
|
68
|
+
"id" TEXT NOT NULL,
|
|
69
|
+
"fileId" TEXT NOT NULL,
|
|
70
|
+
"userId" TEXT NOT NULL,
|
|
71
|
+
"status" "IndexingJobStatus" NOT NULL DEFAULT 'QUEUED',
|
|
72
|
+
"attempts" INTEGER NOT NULL DEFAULT 0,
|
|
73
|
+
"maxAttempts" INTEGER NOT NULL DEFAULT 3,
|
|
74
|
+
"errorMsg" TEXT,
|
|
75
|
+
"startedAt" TIMESTAMP(3),
|
|
76
|
+
"finishedAt" TIMESTAMP(3),
|
|
77
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
78
|
+
|
|
79
|
+
CONSTRAINT "FileIndexingJob_pkey" PRIMARY KEY ("id")
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
-- CreateTable
|
|
83
|
+
CREATE TABLE "FileDeadline" (
|
|
84
|
+
"id" TEXT NOT NULL,
|
|
85
|
+
"fileId" TEXT NOT NULL,
|
|
86
|
+
"userId" TEXT NOT NULL,
|
|
87
|
+
"label" TEXT NOT NULL,
|
|
88
|
+
"deadlineAt" TIMESTAMP(3) NOT NULL,
|
|
89
|
+
"notifyAt" TIMESTAMP(3),
|
|
90
|
+
"isNotified" BOOLEAN NOT NULL DEFAULT false,
|
|
91
|
+
"isDismissed" BOOLEAN NOT NULL DEFAULT false,
|
|
92
|
+
"sourceSection" TEXT,
|
|
93
|
+
"sourcePage" INTEGER,
|
|
94
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
95
|
+
|
|
96
|
+
CONSTRAINT "FileDeadline_pkey" PRIMARY KEY ("id")
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
-- CreateTable
|
|
100
|
+
CREATE TABLE "FileReviewTable" (
|
|
101
|
+
"id" TEXT NOT NULL,
|
|
102
|
+
"userId" TEXT NOT NULL,
|
|
103
|
+
"folderId" TEXT,
|
|
104
|
+
"name" TEXT NOT NULL,
|
|
105
|
+
"columns" JSONB NOT NULL,
|
|
106
|
+
"fileIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
107
|
+
"results" JSONB,
|
|
108
|
+
"status" TEXT NOT NULL DEFAULT 'draft',
|
|
109
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
110
|
+
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
111
|
+
|
|
112
|
+
CONSTRAINT "FileReviewTable_pkey" PRIMARY KEY ("id")
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
-- CreateIndex
|
|
116
|
+
CREATE UNIQUE INDEX "UserFile_storageKey_key" ON "UserFile"("storageKey");
|
|
117
|
+
|
|
118
|
+
-- CreateIndex
|
|
119
|
+
CREATE UNIQUE INDEX "UserFile_qdrantDocId_key" ON "UserFile"("qdrantDocId");
|
|
120
|
+
|
|
121
|
+
-- CreateIndex
|
|
122
|
+
CREATE INDEX "UserFile_userId_idx" ON "UserFile"("userId");
|
|
123
|
+
|
|
124
|
+
-- CreateIndex
|
|
125
|
+
CREATE INDEX "UserFile_status_idx" ON "UserFile"("status");
|
|
126
|
+
|
|
127
|
+
-- CreateIndex
|
|
128
|
+
CREATE INDEX "UserFile_userId_status_idx" ON "UserFile"("userId", "status");
|
|
129
|
+
|
|
130
|
+
-- CreateIndex
|
|
131
|
+
CREATE INDEX "UserFile_userId_deletedAt_idx" ON "UserFile"("userId", "deletedAt");
|
|
132
|
+
|
|
133
|
+
-- CreateIndex
|
|
134
|
+
CREATE INDEX "UserFile_qdrantDocId_idx" ON "UserFile"("qdrantDocId");
|
|
135
|
+
|
|
136
|
+
-- CreateIndex
|
|
137
|
+
CREATE INDEX "UserFile_answerId_idx" ON "UserFile"("answerId");
|
|
138
|
+
|
|
139
|
+
-- CreateIndex
|
|
140
|
+
CREATE INDEX "UserFile_checksumSha256_idx" ON "UserFile"("checksumSha256");
|
|
141
|
+
|
|
142
|
+
-- CreateIndex
|
|
143
|
+
CREATE INDEX "FileIndexingJob_fileId_idx" ON "FileIndexingJob"("fileId");
|
|
144
|
+
|
|
145
|
+
-- CreateIndex
|
|
146
|
+
CREATE INDEX "FileIndexingJob_userId_idx" ON "FileIndexingJob"("userId");
|
|
147
|
+
|
|
148
|
+
-- CreateIndex
|
|
149
|
+
CREATE INDEX "FileIndexingJob_status_idx" ON "FileIndexingJob"("status");
|
|
150
|
+
|
|
151
|
+
-- CreateIndex
|
|
152
|
+
CREATE INDEX "FileIndexingJob_createdAt_idx" ON "FileIndexingJob"("createdAt");
|
|
153
|
+
|
|
154
|
+
-- CreateIndex
|
|
155
|
+
CREATE INDEX "FileDeadline_fileId_idx" ON "FileDeadline"("fileId");
|
|
156
|
+
|
|
157
|
+
-- CreateIndex
|
|
158
|
+
CREATE INDEX "FileDeadline_userId_idx" ON "FileDeadline"("userId");
|
|
159
|
+
|
|
160
|
+
-- CreateIndex
|
|
161
|
+
CREATE INDEX "FileDeadline_deadlineAt_idx" ON "FileDeadline"("deadlineAt");
|
|
162
|
+
|
|
163
|
+
-- CreateIndex
|
|
164
|
+
CREATE INDEX "FileDeadline_notifyAt_isNotified_idx" ON "FileDeadline"("notifyAt", "isNotified");
|
|
165
|
+
|
|
166
|
+
-- CreateIndex
|
|
167
|
+
CREATE INDEX "FileDeadline_userId_isDismissed_idx" ON "FileDeadline"("userId", "isDismissed");
|
|
168
|
+
|
|
169
|
+
-- CreateIndex
|
|
170
|
+
CREATE INDEX "FileReviewTable_userId_idx" ON "FileReviewTable"("userId");
|
|
171
|
+
|
|
172
|
+
-- CreateIndex
|
|
173
|
+
CREATE INDEX "FileReviewTable_folderId_idx" ON "FileReviewTable"("folderId");
|
|
174
|
+
|
|
175
|
+
-- CreateIndex
|
|
176
|
+
CREATE INDEX "FileReviewTable_status_idx" ON "FileReviewTable"("status");
|
|
177
|
+
|
|
178
|
+
-- AddForeignKey
|
|
179
|
+
ALTER TABLE "UserFile" ADD CONSTRAINT "UserFile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
180
|
+
|
|
181
|
+
-- AddForeignKey
|
|
182
|
+
ALTER TABLE "UserFile" ADD CONSTRAINT "UserFile_answerId_fkey" FOREIGN KEY ("answerId") REFERENCES "Answer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
183
|
+
|
|
184
|
+
-- AddForeignKey
|
|
185
|
+
ALTER TABLE "UserFile" ADD CONSTRAINT "UserFile_parentFileId_fkey" FOREIGN KEY ("parentFileId") REFERENCES "UserFile"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
186
|
+
|
|
187
|
+
-- AddForeignKey
|
|
188
|
+
ALTER TABLE "FileIndexingJob" ADD CONSTRAINT "FileIndexingJob_fileId_fkey" FOREIGN KEY ("fileId") REFERENCES "UserFile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
189
|
+
|
|
190
|
+
-- AddForeignKey
|
|
191
|
+
ALTER TABLE "FileDeadline" ADD CONSTRAINT "FileDeadline_fileId_fkey" FOREIGN KEY ("fileId") REFERENCES "UserFile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
192
|
+
|
|
193
|
+
-- AddForeignKey
|
|
194
|
+
ALTER TABLE "FileReviewTable" ADD CONSTRAINT "FileReviewTable_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|