@danielcok17/prisma-db 1.7.0 → 1.8.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 +1 -1
- package/prisma/app.prisma +216 -5
- package/prisma/generated/app/edge.js +107 -4
- package/prisma/generated/app/index-browser.js +104 -1
- package/prisma/generated/app/index.d.ts +33208 -20479
- package/prisma/generated/app/index.js +107 -4
- package/prisma/generated/app/package.json +1 -1
- package/prisma/generated/app/schema.prisma +211 -0
- package/prisma/generated/app/wasm.js +107 -4
- package/prisma/migrations/20260113205726_add_organization_invite/migration.sql +40 -0
- package/prisma/migrations/20260114184556_add_folder_structure/migration.sql +173 -0
package/package.json
CHANGED
package/prisma/app.prisma
CHANGED
|
@@ -58,10 +58,11 @@ model User {
|
|
|
58
58
|
messageCountResetAt DateTime? // Kedy sa má resetovať message count
|
|
59
59
|
adminGrantExpiresAt DateTime? // Kedy admin grant expiruje
|
|
60
60
|
// Relations
|
|
61
|
-
approvalRequest
|
|
62
|
-
stripeCustomer
|
|
63
|
-
ownedOrganizations
|
|
64
|
-
organizationMembers
|
|
61
|
+
approvalRequest UserApprovalRequest?
|
|
62
|
+
stripeCustomer StripeCustomer? // ✨ B2C Stripe customer
|
|
63
|
+
ownedOrganizations Organization[] @relation("OrganizationOwner")
|
|
64
|
+
organizationMembers OrganizationMember[]
|
|
65
|
+
createdInvites OrganizationInvite[] @relation("InviteCreator")
|
|
65
66
|
accounts Account[]
|
|
66
67
|
answers Answer[]
|
|
67
68
|
conversations Conversation[]
|
|
@@ -73,6 +74,12 @@ model User {
|
|
|
73
74
|
passwordResetTokens PasswordResetToken[]
|
|
74
75
|
canvasDocuments CanvasDocument[]
|
|
75
76
|
canvasDocumentVersions CanvasDocumentVersion[]
|
|
77
|
+
// Folder system relations
|
|
78
|
+
ownedFolders Folder[] @relation("FolderOwner")
|
|
79
|
+
addedFolderItems FolderItem[] @relation("FolderItemAdder")
|
|
80
|
+
folderActivities FolderActivity[] @relation("FolderActivityUser")
|
|
81
|
+
folderSharesReceived FolderShare[] @relation("FolderShareUser")
|
|
82
|
+
createdFolderShares FolderShare[] @relation("FolderShareCreator")
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
// Nový model pre žiadosti o schválenie
|
|
@@ -125,10 +132,12 @@ model Organization {
|
|
|
125
132
|
maxMembers Int @default(5) // Max počet členov podľa tieru
|
|
126
133
|
|
|
127
134
|
// Relations
|
|
128
|
-
owner User
|
|
135
|
+
owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])
|
|
129
136
|
ownerId String
|
|
130
137
|
members OrganizationMember[]
|
|
138
|
+
invites OrganizationInvite[]
|
|
131
139
|
stripeCustomer StripeCustomer?
|
|
140
|
+
folderShares FolderShare[]
|
|
132
141
|
|
|
133
142
|
createdAt DateTime @default(now())
|
|
134
143
|
updatedAt DateTime @updatedAt
|
|
@@ -157,6 +166,32 @@ model OrganizationMember {
|
|
|
157
166
|
@@index([role])
|
|
158
167
|
}
|
|
159
168
|
|
|
169
|
+
// Organization Invite System
|
|
170
|
+
model OrganizationInvite {
|
|
171
|
+
id String @id @default(cuid())
|
|
172
|
+
organizationId String
|
|
173
|
+
token String @unique
|
|
174
|
+
email String? // Optional: specific email invite
|
|
175
|
+
role MemberRole @default(MEMBER)
|
|
176
|
+
createdBy String
|
|
177
|
+
expiresAt DateTime
|
|
178
|
+
maxUses Int @default(1) // For multi-use invites
|
|
179
|
+
currentUses Int @default(0)
|
|
180
|
+
isActive Boolean @default(true)
|
|
181
|
+
usedAt DateTime? // Last usage timestamp
|
|
182
|
+
usedBy String? // Last user who used it
|
|
183
|
+
createdAt DateTime @default(now())
|
|
184
|
+
updatedAt DateTime @updatedAt
|
|
185
|
+
|
|
186
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
187
|
+
creator User @relation("InviteCreator", fields: [createdBy], references: [id])
|
|
188
|
+
|
|
189
|
+
@@index([token])
|
|
190
|
+
@@index([organizationId])
|
|
191
|
+
@@index([isActive])
|
|
192
|
+
@@index([expiresAt])
|
|
193
|
+
}
|
|
194
|
+
|
|
160
195
|
enum MemberRole {
|
|
161
196
|
OWNER // Zakladateľ/vlastník, plný prístup k billing a settings
|
|
162
197
|
ADMIN // Administrátor, môže pridávať/odoberať členov
|
|
@@ -542,6 +577,40 @@ enum DocumentStatus {
|
|
|
542
577
|
ARCHIVED
|
|
543
578
|
}
|
|
544
579
|
|
|
580
|
+
// ============================================
|
|
581
|
+
// FOLDER SYSTEM ENUMS
|
|
582
|
+
// ============================================
|
|
583
|
+
|
|
584
|
+
// Folder item types (what can be stored in folders)
|
|
585
|
+
enum FolderItemType {
|
|
586
|
+
CONVERSATION
|
|
587
|
+
CANVAS_DOCUMENT
|
|
588
|
+
REFERENCE
|
|
589
|
+
ATTACHMENT
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// Folder activity types (for timeline)
|
|
593
|
+
enum FolderActivityType {
|
|
594
|
+
FOLDER_CREATED
|
|
595
|
+
FOLDER_UPDATED
|
|
596
|
+
FOLDER_MOVED
|
|
597
|
+
FOLDER_ARCHIVED
|
|
598
|
+
ITEM_ADDED
|
|
599
|
+
ITEM_REMOVED
|
|
600
|
+
ITEM_UPDATED
|
|
601
|
+
SHARE_ADDED
|
|
602
|
+
SHARE_REMOVED
|
|
603
|
+
USER_MESSAGE
|
|
604
|
+
USER_NOTE
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// Folder permission levels
|
|
608
|
+
enum FolderPermission {
|
|
609
|
+
VIEW
|
|
610
|
+
EDIT
|
|
611
|
+
ADMIN
|
|
612
|
+
}
|
|
613
|
+
|
|
545
614
|
// Nový model pre logovanie admin akcií
|
|
546
615
|
model AdminActionLog {
|
|
547
616
|
id String @id @default(cuid())
|
|
@@ -708,3 +777,145 @@ model CanvasDocumentVersion {
|
|
|
708
777
|
@@index([createdBy])
|
|
709
778
|
@@index([createdAt])
|
|
710
779
|
}
|
|
780
|
+
|
|
781
|
+
// ============================================
|
|
782
|
+
// FOLDER SYSTEM MODELS
|
|
783
|
+
// ============================================
|
|
784
|
+
|
|
785
|
+
// Main folder entity with hierarchy support via parentId
|
|
786
|
+
// Uses materialized path pattern for efficient hierarchy queries
|
|
787
|
+
model Folder {
|
|
788
|
+
id String @id @default(cuid())
|
|
789
|
+
name String
|
|
790
|
+
description String?
|
|
791
|
+
color String? @default("#6366f1")
|
|
792
|
+
icon String? @default("folder")
|
|
793
|
+
|
|
794
|
+
// Ownership (always user-owned)
|
|
795
|
+
ownerId String
|
|
796
|
+
|
|
797
|
+
// Hierarchy
|
|
798
|
+
parentId String?
|
|
799
|
+
rootFolderId String? // NULL for root folders, points to top-level ancestor
|
|
800
|
+
path String @default("/") // Materialized path: "/parentId/grandparentId/..."
|
|
801
|
+
depth Int @default(0)
|
|
802
|
+
|
|
803
|
+
// Metadata
|
|
804
|
+
sortOrder Int @default(0)
|
|
805
|
+
isArchived Boolean @default(false)
|
|
806
|
+
createdAt DateTime @default(now())
|
|
807
|
+
updatedAt DateTime @updatedAt
|
|
808
|
+
|
|
809
|
+
// Relations
|
|
810
|
+
owner User @relation("FolderOwner", fields: [ownerId], references: [id], onDelete: Cascade)
|
|
811
|
+
parent Folder? @relation("FolderHierarchy", fields: [parentId], references: [id], onDelete: Cascade)
|
|
812
|
+
children Folder[] @relation("FolderHierarchy")
|
|
813
|
+
items FolderItem[]
|
|
814
|
+
activities FolderActivity[]
|
|
815
|
+
shares FolderShare[]
|
|
816
|
+
|
|
817
|
+
@@index([ownerId])
|
|
818
|
+
@@index([parentId])
|
|
819
|
+
@@index([rootFolderId])
|
|
820
|
+
@@index([path])
|
|
821
|
+
@@index([isArchived])
|
|
822
|
+
@@index([ownerId, isArchived])
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
// Links entities (conversations, documents, etc.) to folders
|
|
826
|
+
// Polymorphic: entityType + entityId point to any supported entity
|
|
827
|
+
model FolderItem {
|
|
828
|
+
id String @id @default(cuid())
|
|
829
|
+
folderId String
|
|
830
|
+
|
|
831
|
+
// Polymorphic reference
|
|
832
|
+
entityType FolderItemType
|
|
833
|
+
entityId String
|
|
834
|
+
|
|
835
|
+
// Optional metadata override
|
|
836
|
+
displayName String?
|
|
837
|
+
notes String?
|
|
838
|
+
|
|
839
|
+
// Denormalized for efficient hierarchy queries
|
|
840
|
+
rootFolderId String?
|
|
841
|
+
|
|
842
|
+
// Tracking
|
|
843
|
+
addedById String
|
|
844
|
+
sortOrder Int @default(0)
|
|
845
|
+
createdAt DateTime @default(now())
|
|
846
|
+
updatedAt DateTime @updatedAt
|
|
847
|
+
|
|
848
|
+
// Relations
|
|
849
|
+
folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)
|
|
850
|
+
addedBy User @relation("FolderItemAdder", fields: [addedById], references: [id], onDelete: Restrict)
|
|
851
|
+
|
|
852
|
+
@@unique([folderId, entityType, entityId])
|
|
853
|
+
@@index([folderId])
|
|
854
|
+
@@index([entityType, entityId])
|
|
855
|
+
@@index([rootFolderId])
|
|
856
|
+
@@index([addedById])
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Timeline entries for folders (system events + user messages)
|
|
860
|
+
// Opening ANY folder shows ALL activities from the entire folder tree
|
|
861
|
+
model FolderActivity {
|
|
862
|
+
id String @id @default(cuid())
|
|
863
|
+
folderId String
|
|
864
|
+
|
|
865
|
+
// Denormalized for cross-folder timeline queries
|
|
866
|
+
rootFolderId String?
|
|
867
|
+
|
|
868
|
+
// Activity details
|
|
869
|
+
activityType FolderActivityType
|
|
870
|
+
userId String
|
|
871
|
+
content String? // For USER_MESSAGE, USER_NOTE types
|
|
872
|
+
metadata Json? // For system event details
|
|
873
|
+
relatedItemId String? // Optional reference to FolderItem
|
|
874
|
+
|
|
875
|
+
// Timestamp
|
|
876
|
+
createdAt DateTime @default(now())
|
|
877
|
+
|
|
878
|
+
// Relations
|
|
879
|
+
folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)
|
|
880
|
+
user User @relation("FolderActivityUser", fields: [userId], references: [id], onDelete: Restrict)
|
|
881
|
+
|
|
882
|
+
@@index([folderId])
|
|
883
|
+
@@index([rootFolderId])
|
|
884
|
+
@@index([userId])
|
|
885
|
+
@@index([activityType])
|
|
886
|
+
@@index([createdAt])
|
|
887
|
+
@@index([rootFolderId, createdAt(sort: Desc)])
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
// Sharing permissions for folders
|
|
891
|
+
// Can share with individual user OR entire organization (not both)
|
|
892
|
+
model FolderShare {
|
|
893
|
+
id String @id @default(cuid())
|
|
894
|
+
folderId String
|
|
895
|
+
|
|
896
|
+
// Share target (either user OR organization, enforced by application logic)
|
|
897
|
+
userId String?
|
|
898
|
+
organizationId String?
|
|
899
|
+
|
|
900
|
+
// Permission level
|
|
901
|
+
permission FolderPermission @default(VIEW)
|
|
902
|
+
|
|
903
|
+
// Sharing metadata
|
|
904
|
+
sharedById String
|
|
905
|
+
sharedAt DateTime @default(now())
|
|
906
|
+
expiresAt DateTime?
|
|
907
|
+
|
|
908
|
+
// Relations
|
|
909
|
+
folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)
|
|
910
|
+
user User? @relation("FolderShareUser", fields: [userId], references: [id], onDelete: Cascade)
|
|
911
|
+
organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
912
|
+
sharedBy User @relation("FolderShareCreator", fields: [sharedById], references: [id], onDelete: Restrict)
|
|
913
|
+
|
|
914
|
+
// Partial unique indexes for nullable columns
|
|
915
|
+
@@unique([folderId, userId])
|
|
916
|
+
@@unique([folderId, organizationId])
|
|
917
|
+
@@index([folderId])
|
|
918
|
+
@@index([userId])
|
|
919
|
+
@@index([organizationId])
|
|
920
|
+
@@index([sharedById])
|
|
921
|
+
}
|