@danielcok17/prisma-db 1.8.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielcok17/prisma-db",
3
- "version": "1.8.0",
3
+ "version": "1.8.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
@@ -74,6 +74,12 @@ model User {
74
74
  passwordResetTokens PasswordResetToken[]
75
75
  canvasDocuments CanvasDocument[]
76
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")
77
83
  }
78
84
 
79
85
  // Nový model pre žiadosti o schválenie
@@ -131,6 +137,7 @@ model Organization {
131
137
  members OrganizationMember[]
132
138
  invites OrganizationInvite[]
133
139
  stripeCustomer StripeCustomer?
140
+ folderShares FolderShare[]
134
141
 
135
142
  createdAt DateTime @default(now())
136
143
  updatedAt DateTime @updatedAt
@@ -570,6 +577,40 @@ enum DocumentStatus {
570
577
  ARCHIVED
571
578
  }
572
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
+
573
614
  // Nový model pre logovanie admin akcií
574
615
  model AdminActionLog {
575
616
  id String @id @default(cuid())
@@ -736,3 +777,145 @@ model CanvasDocumentVersion {
736
777
  @@index([createdBy])
737
778
  @@index([createdAt])
738
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
+ }