@danielcok17/prisma-db 1.8.1 → 1.9.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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "prisma-client-c80e84371733a4c818495b6a5d58458265bd3195b70df580c32f80acc27417c7",
2
+ "name": "prisma-client-8acd5116cf48af2fbc8c8e0ba3e9214dd6af5138f84f7ad22cbc665777e1fb4f",
3
3
  "main": "index.js",
4
4
  "types": "index.d.ts",
5
5
  "browser": "default.js",
@@ -57,6 +57,16 @@ model User {
57
57
  messageCount Int @default(10) // ✅ OPRAVENÉ z 100 na 10
58
58
  messageCountResetAt DateTime? // Kedy sa má resetovať message count
59
59
  adminGrantExpiresAt DateTime? // Kedy admin grant expiruje
60
+ // ✨ COMPANY FIELDS (pre SZČO - samostatne zárobkovo činná osoba)
61
+ customerType CustomerType @default(INDIVIDUAL) // Typ zákazníka: fyzická osoba alebo SZČO
62
+ companyName String? // Obchodné meno (pre SZČO)
63
+ companyNumber String? // IČO (povinné pre SZČO, 8 číslic)
64
+ vatNumber String? // IČ DPH (SK + 10 číslic, nepovinné)
65
+ taxNumber String? // DIČ (10 číslic, nepovinné)
66
+ companyStreet String? // Ulica a číslo (pre SZČO)
67
+ companyCity String? // Mesto (pre SZČO)
68
+ companyPostalCode String? // PSČ (pre SZČO, formát: XXX XX)
69
+ companyCountry String? @default("SK") // Krajina (ISO kód, default SK)
60
70
  // Relations
61
71
  approvalRequest UserApprovalRequest?
62
72
  stripeCustomer StripeCustomer? // ✨ B2C Stripe customer
@@ -80,6 +90,10 @@ model User {
80
90
  folderActivities FolderActivity[] @relation("FolderActivityUser")
81
91
  folderSharesReceived FolderShare[] @relation("FolderShareUser")
82
92
  createdFolderShares FolderShare[] @relation("FolderShareCreator")
93
+
94
+ @@index([customerType])
95
+ @@index([companyNumber])
96
+ @@index([email, customerType])
83
97
  }
84
98
 
85
99
  // Nový model pre žiadosti o schválenie
@@ -555,6 +569,12 @@ enum SubscriptionStatus {
555
569
  PAUSED // Predplatné pozastavené (Stripe feature)
556
570
  }
557
571
 
572
+ // Customer type: Individuálny vs SZČO
573
+ enum CustomerType {
574
+ INDIVIDUAL // Fyzická osoba (bez IČO)
575
+ SELF_EMPLOYED // SZČO - Samostatne zárobkovo činná osoba (s IČO)
576
+ }
577
+
558
578
  // Stripe: Tier predplatného
559
579
  enum SubscriptionTier {
560
580
  FREE // Free tier (10 messages/month)
@@ -131,7 +131,16 @@ exports.Prisma.UserScalarFieldEnum = {
131
131
  subscriptionTier: 'subscriptionTier',
132
132
  messageCount: 'messageCount',
133
133
  messageCountResetAt: 'messageCountResetAt',
134
- adminGrantExpiresAt: 'adminGrantExpiresAt'
134
+ adminGrantExpiresAt: 'adminGrantExpiresAt',
135
+ customerType: 'customerType',
136
+ companyName: 'companyName',
137
+ companyNumber: 'companyNumber',
138
+ vatNumber: 'vatNumber',
139
+ taxNumber: 'taxNumber',
140
+ companyStreet: 'companyStreet',
141
+ companyCity: 'companyCity',
142
+ companyPostalCode: 'companyPostalCode',
143
+ companyCountry: 'companyCountry'
135
144
  };
136
145
 
137
146
  exports.Prisma.UserApprovalRequestScalarFieldEnum = {
@@ -575,6 +584,11 @@ exports.SubscriptionStatus = exports.$Enums.SubscriptionStatus = {
575
584
  PAUSED: 'PAUSED'
576
585
  };
577
586
 
587
+ exports.CustomerType = exports.$Enums.CustomerType = {
588
+ INDIVIDUAL: 'INDIVIDUAL',
589
+ SELF_EMPLOYED: 'SELF_EMPLOYED'
590
+ };
591
+
578
592
  exports.SubscriptionTier = exports.$Enums.SubscriptionTier = {
579
593
  FREE: 'FREE',
580
594
  LAWYER: 'LAWYER',
@@ -727,13 +741,13 @@ const config = {
727
741
  }
728
742
  }
729
743
  },
730
- "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"./generated/app\"\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"POSTGRES_PRISMA_URL\")\n directUrl = env(\"POSTGRES_URL_NON_POOLING\")\n}\n\nmodel Account {\n id String @id @default(cuid())\n userId String\n type String\n provider String\n providerAccountId String\n refresh_token String?\n access_token String?\n expires_at Int?\n token_type String?\n scope String?\n id_token String?\n session_state String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String? @unique\n emailVerified DateTime?\n image String?\n // Credentials authentication fields\n password String? // Hashed password pre credentials login\n createdAt DateTime @default(now())\n agreedToTerms Boolean @default(false)\n practiceArea String[]\n lawFirm String?\n yearsOfExperience Int?\n // Nové polia pre schvalovanie používateľov\n isApproved Boolean @default(false) // Či je používateľ schválený\n isRejected Boolean @default(false) // Či je používateľ zamietnutý\n approvedAt DateTime? // Kedy bol schválený\n rejectedAt DateTime? // Kedy bol zamietnutý\n approvedBy String? // ID admina, ktorý schválil\n rejectedBy String? // ID admina, ktorý zamietol\n rejectionReason String? // Dôvod zamietnutia\n // Nové polia pre tracking a žiadosť\n referralSource String? // Odkiaľ sa o nás dozvedel (Google, Facebook, LinkedIn, etc.)\n applicationText String? // Text žiadosti o prihlásenie\n // ✨ STRIPE FIELDS (B2C - len pre individuálnych používateľov)\n subscriptionTier SubscriptionTier @default(FREE) // Aktuálny subscription tier (cache)\n messageCount Int @default(10) // ✅ OPRAVENÉ z 100 na 10\n messageCountResetAt DateTime? // Kedy sa má resetovať message count\n adminGrantExpiresAt DateTime? // Kedy admin grant expiruje\n // Relations\n approvalRequest UserApprovalRequest?\n stripeCustomer StripeCustomer? // ✨ B2C Stripe customer\n ownedOrganizations Organization[] @relation(\"OrganizationOwner\")\n organizationMembers OrganizationMember[]\n createdInvites OrganizationInvite[] @relation(\"InviteCreator\")\n accounts Account[]\n answers Answer[]\n conversations Conversation[]\n feedbacks Feedback[]\n pageViews PageView[]\n sessions Session[]\n workflowLogs WorkflowLog[]\n verificationTokens VerificationToken[]\n passwordResetTokens PasswordResetToken[]\n canvasDocuments CanvasDocument[]\n canvasDocumentVersions CanvasDocumentVersion[]\n // Folder system relations\n ownedFolders Folder[] @relation(\"FolderOwner\")\n addedFolderItems FolderItem[] @relation(\"FolderItemAdder\")\n folderActivities FolderActivity[] @relation(\"FolderActivityUser\")\n folderSharesReceived FolderShare[] @relation(\"FolderShareUser\")\n createdFolderShares FolderShare[] @relation(\"FolderShareCreator\")\n}\n\n// Nový model pre žiadosti o schválenie\nmodel UserApprovalRequest {\n id String @id @default(cuid())\n userId String @unique\n status ApprovalStatus @default(PENDING)\n submittedAt DateTime @default(now())\n reviewedAt DateTime?\n reviewedBy String? // ID admina, ktorý preskúmal žiadosť\n notes String? // Poznámky admina\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([status])\n @@index([submittedAt])\n @@index([reviewedAt])\n}\n\n// ============================================\n// ORGANIZATION MODELS (B2B)\n// ============================================\n\n// Organization = Právna kancelária / Firma\nmodel Organization {\n id String @id @default(cuid())\n name String // \"Advokátska kancelária XYZ s.r.o.\"\n\n // Billing & Legal Information\n companyNumber String? // IČO (Identifikačné číslo organizácie)\n vatNumber String? // IČ DPH (VAT Number)\n taxNumber String? // DIČ (Daňové identifikačné číslo)\n legalForm String? // \"s.r.o.\", \"a.s.\", \"v.o.s.\", \"k.s.\", \"SZČO\"\n billingEmail String\n\n // Address\n street String?\n city String?\n postalCode String?\n country String @default(\"SK\")\n\n // Subscription (B2B)\n subscriptionTier SubscriptionTier @default(FREE) // Tier organizácie (cache)\n messageCount Int @default(0) // Spoločný pool správ pre všetkých členov\n messageLimit Int @default(100) // Limit správ podľa tieru\n messageCountResetAt DateTime? // Kedy sa má resetovať pool\n adminGrantExpiresAt DateTime? // Kedy admin grant expiruje\n\n // Settings\n isActive Boolean @default(true)\n maxMembers Int @default(5) // Max počet členov podľa tieru\n\n // Relations\n owner User @relation(\"OrganizationOwner\", fields: [ownerId], references: [id])\n ownerId String\n members OrganizationMember[]\n invites OrganizationInvite[]\n stripeCustomer StripeCustomer?\n folderShares FolderShare[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([ownerId])\n @@index([vatNumber])\n @@index([companyNumber])\n @@index([subscriptionTier])\n @@index([billingEmail])\n}\n\n// Many-to-Many: User ↔ Organization\nmodel OrganizationMember {\n id String @id @default(cuid())\n organizationId String\n userId String\n role MemberRole @default(MEMBER)\n joinedAt DateTime @default(now())\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([organizationId, userId])\n @@index([organizationId])\n @@index([userId])\n @@index([role])\n}\n\n// Organization Invite System\nmodel OrganizationInvite {\n id String @id @default(cuid())\n organizationId String\n token String @unique\n email String? // Optional: specific email invite\n role MemberRole @default(MEMBER)\n createdBy String\n expiresAt DateTime\n maxUses Int @default(1) // For multi-use invites\n currentUses Int @default(0)\n isActive Boolean @default(true)\n usedAt DateTime? // Last usage timestamp\n usedBy String? // Last user who used it\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n creator User @relation(\"InviteCreator\", fields: [createdBy], references: [id])\n\n @@index([token])\n @@index([organizationId])\n @@index([isActive])\n @@index([expiresAt])\n}\n\nenum MemberRole {\n OWNER // Zakladateľ/vlastník, plný prístup k billing a settings\n ADMIN // Administrátor, môže pridávať/odoberať členov\n MEMBER // Bežný člen, len používa systém\n}\n\n// ZJEDNODUŠENÝ Conversation - len metadata, bez duplikátov\nmodel Conversation {\n id String @id @default(cuid())\n name String\n userId String\n isShareable Boolean @default(false)\n shareUrl String? @unique\n sharedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n summary String?\n messagesSinceLastSummary Int? @default(0)\n // Relácie\n answers Answer[]\n user User @relation(fields: [userId], references: [id])\n workflowLogs WorkflowLog[]\n canvasDocuments CanvasDocument[]\n\n @@index([userId])\n @@index([createdAt])\n}\n\n// Hlavný model - všetky správy, bez duplikátov\nmodel Answer {\n id String @id @default(cuid())\n conversationId String\n messageId String @unique\n role Role\n content String\n question String?\n answer String?\n evaluation String?\n isWelcome Boolean @default(false)\n processingTime Int?\n model String?\n userId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n // Relácie\n conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n user User? @relation(fields: [userId], references: [id])\n feedback Feedback?\n references Reference[]\n metrics AnswerMetrics?\n WorkflowLog WorkflowLog[]\n files MessageFile[]\n canvasDocumentId String? // No FK constraint - flexible document management\n\n @@index([conversationId])\n @@index([messageId])\n @@index([role])\n @@index([userId])\n @@index([createdAt])\n}\n\nmodel MessageFile {\n id String @id @default(cuid())\n answerId String\n fileName String\n fileType String\n base64Data String\n uploadedAt DateTime @default(now())\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([fileType])\n @@index([uploadedAt])\n}\n\n// Nová tabuľka pre metriky odpovedí\nmodel AnswerMetrics {\n id String @id @default(cuid())\n answerId String @unique\n // Náklady\n apiCost Float? // Celkové náklady (ai_cost + rag_cost)\n aiCost Float? // Náklady len na AI provider volania\n ragCost Float? // Náklady na RAG operácie\n // Volania\n apiCalls Int? // Celkový počet volaní\n aiCalls Int? // Počet AI provider volaní\n ragCalls Int? // Počet RAG operácií\n // Čas a výkon\n apiDuration Int? // Doba spracovania v ms\n // AI Provider a Model\n aiProvider String? // Hlavný AI provider\n aiModel String? // Hlavný AI model\n aiProvidersUsed String[] // Všetky použité AI providery\n aiModelsUsed String[] // Všetky použité AI modely\n // Timestamps\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n // Relations\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([apiCost])\n @@index([apiDuration])\n @@index([aiProvider])\n @@index([createdAt])\n}\n\nmodel Feedback {\n id String @id @default(cuid())\n answerId String @unique\n rating FeedbackRating\n feedbackTypes String[]\n customFeedback String?\n userId String\n messageContent String?\n createdAt DateTime @default(now())\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id])\n\n @@index([rating])\n @@index([userId])\n @@index([answerId])\n}\n\n// ZJEDNODUŠENÝ Reference - len na Answer, bez duplikátov\nmodel Reference {\n id String @id @default(cuid())\n answerId String // Len answerId - konzistentné\n type ReferenceType\n title String\n reference String\n summary String?\n url String?\n uuid String?\n relevance Float?\n citationNumber Int?\n metadata Json?\n userId String?\n createdAt DateTime @default(now())\n // Relácie\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([type])\n @@index([reference])\n @@index([userId])\n @@index([createdAt])\n}\n\nmodel PageView {\n id String @id @default(cuid())\n userId String?\n sessionId String?\n page String\n path String\n referrer String?\n userAgent String?\n ipAddress String?\n country String?\n city String?\n deviceType String?\n browser String?\n os String?\n screenSize String?\n language String?\n timeOnPage Int?\n isBounce Boolean @default(true)\n createdAt DateTime @default(now())\n session Session? @relation(fields: [sessionId], references: [sessionId], onDelete: SetNull)\n user User? @relation(fields: [userId], references: [id])\n\n @@index([userId])\n @@index([sessionId])\n @@index([page])\n @@index([createdAt])\n @@index([country])\n @@index([deviceType])\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionId String @unique\n userId String?\n startedAt DateTime @default(now())\n endedAt DateTime?\n duration Int?\n pageViews PageView[]\n user User? @relation(fields: [userId], references: [id])\n workflowLogs WorkflowLog[]\n\n @@index([userId])\n @@index([startedAt])\n}\n\n// ============================================\n// STRIPE INTEGRATION MODELS\n// ============================================\n\n// Stripe Customer - polymorphic relation (User OR Organization)\nmodel StripeCustomer {\n id String @id @default(cuid())\n\n // ✅ Polymorphic relation - buď User (B2C) alebo Organization (B2B)\n userId String? @unique // B2C: Individuálny používateľ\n organizationId String? @unique // B2B: Organizácia\n\n stripeCustomerId String @unique\n email String\n name String?\n\n // Billing details (Stripe Address & Tax IDs)\n billingAddress Json? // Stripe Address object\n taxIds Json? // Stripe Tax IDs array (VAT, etc.)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n user User? @relation(fields: [userId], references: [id], onDelete: Cascade)\n organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n subscriptions StripeSubscription[]\n payments StripePayment[]\n\n @@index([stripeCustomerId])\n @@index([userId])\n @@index([organizationId])\n @@index([email])\n}\n\n// Stripe Subscription - sledovanie predplatného (User alebo Organization)\nmodel StripeSubscription {\n id String @id @default(cuid())\n\n // ✅ FIX: customerId = FK na StripeCustomer.id (nie stripeCustomerId!)\n customerId String // FK na StripeCustomer.id\n stripeCustomerId String // Stripe ID (pre logging/redundancia)\n stripeSubscriptionId String @unique\n stripePriceId String\n stripeProductId String\n\n status SubscriptionStatus\n tier SubscriptionTier @default(FREE)\n billingInterval BillingInterval @default(MONTHLY) // Monthly or Yearly billing\n\n currentPeriodStart DateTime\n currentPeriodEnd DateTime\n cancelAtPeriodEnd Boolean @default(false)\n canceledAt DateTime?\n\n trialStart DateTime?\n trialEnd DateTime?\n\n // Additional fields\n quantity Int @default(1) // Počet seats (pre LAW_FIRM/ENTERPRISE tier)\n defaultPaymentMethodId String? // Stripe payment method ID\n\n metadata Json? // Dodatočné Stripe metadata\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // ✅ FIX: Relácia na customerId (interné ID), nie stripeCustomerId (Stripe ID)\n customer StripeCustomer @relation(fields: [customerId], references: [id], onDelete: Cascade)\n\n @@index([stripeSubscriptionId])\n @@index([customerId])\n @@index([stripeCustomerId])\n @@index([status])\n @@index([tier])\n @@index([billingInterval])\n @@index([currentPeriodEnd])\n}\n\n// Stripe Event - prevencia duplicitného spracovania webhookov (idempotencia)\nmodel StripeEvent {\n id String @id @default(cuid())\n eventId String @unique // Stripe event ID\n type String // Typ eventu (napr. 'checkout.session.completed')\n data Json // Úplné event data pre debugging\n processed Boolean @default(false)\n processedAt DateTime?\n error String? // Uloženie chýb pri spracovaní\n createdAt DateTime @default(now())\n\n @@index([eventId])\n @@index([processed])\n @@index([type])\n @@index([createdAt])\n}\n\n// Stripe Payment - sledovanie jednotlivých platieb (voliteľné, pre detailnú analytiku)\nmodel StripePayment {\n id String @id @default(cuid())\n\n // ✅ FIX: Pridaná relácia na StripeCustomer\n customerId String\n stripePaymentId String @unique\n stripeCustomerId String // Redundantné, ale OK pre logging\n\n amount Int // Suma v centoch\n currency String @default(\"eur\")\n status String // succeeded, failed, pending\n paymentMethod String? // card, sepa_debit, atď.\n description String?\n\n // Invoice info\n invoiceId String? // Stripe Invoice ID\n invoiceUrl String? // URL na faktúru\n\n metadata Json?\n createdAt DateTime @default(now())\n\n // ✅ Relácia na StripeCustomer\n customer StripeCustomer @relation(fields: [customerId], references: [id], onDelete: Cascade)\n\n @@index([stripePaymentId])\n @@index([customerId])\n @@index([stripeCustomerId])\n @@index([status])\n @@index([createdAt])\n}\n\n// ============================================\n// ENUMS\n// ============================================\n\nenum Role {\n USER\n ASSISTANT\n SYSTEM\n}\n\nenum FeedbackRating {\n LIKE\n DISLIKE\n NEUTRAL\n}\n\nenum ReferenceType {\n LAW\n CASE\n REGULATION\n DOCUMENT\n OTHER\n}\n\nenum ApprovalStatus {\n PENDING\n APPROVED\n REJECTED\n}\n\n// Stripe: Status predplatného\nenum SubscriptionStatus {\n ACTIVE // Predplatné je aktívne\n CANCELED // Predplatné zrušené\n INCOMPLETE // Iniciálna platba zlyhala\n INCOMPLETE_EXPIRED // Neúplné predplatné expirované\n PAST_DUE // Platba zlyhala, retry prebieha\n TRIALING // V skúšobnom období\n UNPAID // Platba zlyhala, žiadny retry\n PAUSED // Predplatné pozastavené (Stripe feature)\n}\n\n// Stripe: Tier predplatného\nenum SubscriptionTier {\n FREE // Free tier (10 messages/month)\n LAWYER // Lawyer tier (1000 messages/month, €29/month, 1 user)\n LAWYER_PRO // Lawyer Pro tier (3000 messages/month, €49/month, 1 user) - RECOMMENDED\n LAW_FIRM // Law Firm tier (10000 messages/month, €129/month, up to 5 users)\n ENTERPRISE // Enterprise tier (unlimited messages, unlimited users, custom pricing)\n}\n\n// Stripe: Billing interval\nenum BillingInterval {\n MONTHLY // Monthly billing\n YEARLY // Yearly billing (17% discount)\n}\n\n// Canvas Document Status\nenum DocumentStatus {\n DRAFT\n SAVED\n ARCHIVED\n}\n\n// ============================================\n// FOLDER SYSTEM ENUMS\n// ============================================\n\n// Folder item types (what can be stored in folders)\nenum FolderItemType {\n CONVERSATION\n CANVAS_DOCUMENT\n REFERENCE\n ATTACHMENT\n}\n\n// Folder activity types (for timeline)\nenum FolderActivityType {\n FOLDER_CREATED\n FOLDER_UPDATED\n FOLDER_MOVED\n FOLDER_ARCHIVED\n ITEM_ADDED\n ITEM_REMOVED\n ITEM_UPDATED\n SHARE_ADDED\n SHARE_REMOVED\n USER_MESSAGE\n USER_NOTE\n}\n\n// Folder permission levels\nenum FolderPermission {\n VIEW\n EDIT\n ADMIN\n}\n\n// Nový model pre logovanie admin akcií\nmodel AdminActionLog {\n id String @id @default(cuid())\n action String // APPROVE_USER, REJECT_USER, etc.\n targetUserId String // ID používateľa, na ktorého sa akcia vzťahuje\n adminEmail String // E-mail admina, ktorý vykonal akciu\n details Json? // Ďalšie detaily akcie (reason, notes, etc.)\n createdAt DateTime @default(now())\n\n @@index([action])\n @@index([targetUserId])\n @@index([adminEmail])\n @@index([createdAt])\n}\n\nmodel WorkflowLog {\n id String @id @default(cuid()) // Added @default(cuid())\n conversationId String\n messageId String?\n userId String? // Made optional to preserve logs when users are deleted\n sessionId String? // Removed @unique to allow multiple workflows per session\n startedAt DateTime @default(now())\n completedAt DateTime?\n status WorkflowStatus @default(IN_PROGRESS)\n totalDuration Int? // milliseconds\n error String?\n metadata Json?\n steps WorkflowStep[] // Renamed from WorkflowStep to steps (lowerCamel, plural)\n conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n user User? @relation(fields: [userId], references: [id], onDelete: SetNull)\n session Session? @relation(fields: [sessionId], references: [sessionId], onDelete: SetNull)\n answer Answer? @relation(fields: [messageId], references: [messageId])\n\n @@index([conversationId])\n @@index([userId])\n @@index([sessionId])\n @@index([startedAt])\n @@index([status])\n @@index([conversationId, startedAt]) // Composite index for timeline queries\n @@index([messageId])\n}\n\nmodel WorkflowStep {\n id String @id @default(cuid()) // Added @default(cuid())\n workflowId String\n stepName String // 'classify_question', 'rag_search', 'ai_processing', 'generate_response'\n stepType StepType\n startedAt DateTime @default(now())\n completedAt DateTime?\n duration Int? // milliseconds\n status StepStatus @default(IN_PROGRESS)\n inputData Json? // Sanitized input data\n outputData Json? // Sanitized output data\n error String?\n metadata Json? // Provider used, model used, tokens, costs, etc.\n workflow WorkflowLog @relation(fields: [workflowId], references: [id], onDelete: Cascade)\n\n @@index([workflowId])\n @@index([stepName])\n @@index([stepType])\n @@index([startedAt])\n @@index([status])\n @@index([workflowId, startedAt]) // Composite index for timeline queries\n}\n\nenum WorkflowStatus {\n IN_PROGRESS\n COMPLETED\n FAILED\n CANCELLED\n}\n\nenum StepStatus {\n IN_PROGRESS\n COMPLETED\n FAILED\n SKIPPED\n}\n\nenum StepType {\n CLASSIFICATION\n RAG_RETRIEVAL\n AI_PROCESSING\n RESPONSE_GENERATION\n DATA_PERSISTENCE\n ERROR_HANDLING\n}\n\n// Email verification tokens\nmodel VerificationToken {\n id String @id @default(cuid())\n userId String\n token String @unique\n expires DateTime\n createdAt DateTime @default(now())\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([token])\n @@index([userId])\n @@index([expires])\n}\n\n// Password reset tokens\nmodel PasswordResetToken {\n id String @id @default(cuid())\n userId String\n token String @unique\n expires DateTime\n createdAt DateTime @default(now())\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([token])\n @@index([userId])\n @@index([expires])\n}\n\n// ============================================\n// CANVAS DOCUMENT MODELS\n// ============================================\n\nmodel CanvasDocument {\n id String @id @default(cuid())\n userId String\n title String\n status DocumentStatus @default(DRAFT)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n originConversationId String?\n originAnswerId String? // No FK constraint - async save reference\n currentVersionId String? @unique\n\n // Relations\n user User @relation(fields: [userId], references: [id], onDelete: Restrict)\n originConversation Conversation? @relation(fields: [originConversationId], references: [id], onDelete: SetNull)\n currentVersion CanvasDocumentVersion? @relation(\"CurrentVersion\", fields: [currentVersionId], references: [id], onDelete: SetNull)\n versions CanvasDocumentVersion[] @relation(\"DocumentVersions\")\n\n @@index([userId])\n @@index([originConversationId])\n @@index([status])\n @@index([createdAt])\n}\n\nmodel CanvasDocumentVersion {\n id String @id @default(cuid())\n documentId String\n versionNumber Int\n title String\n markdownContent String\n createdAt DateTime @default(now())\n createdBy String\n regenerationPrompt String?\n parentVersionId String?\n\n // Relations\n document CanvasDocument @relation(\"DocumentVersions\", fields: [documentId], references: [id], onDelete: Cascade)\n creator User @relation(fields: [createdBy], references: [id], onDelete: Restrict)\n parentVersion CanvasDocumentVersion? @relation(\"VersionHistory\", fields: [parentVersionId], references: [id], onDelete: SetNull)\n childVersions CanvasDocumentVersion[] @relation(\"VersionHistory\")\n currentForDocument CanvasDocument? @relation(\"CurrentVersion\")\n\n @@unique([documentId, versionNumber])\n @@index([documentId])\n @@index([createdBy])\n @@index([createdAt])\n}\n\n// ============================================\n// FOLDER SYSTEM MODELS\n// ============================================\n\n// Main folder entity with hierarchy support via parentId\n// Uses materialized path pattern for efficient hierarchy queries\nmodel Folder {\n id String @id @default(cuid())\n name String\n description String?\n color String? @default(\"#6366f1\")\n icon String? @default(\"folder\")\n\n // Ownership (always user-owned)\n ownerId String\n\n // Hierarchy\n parentId String?\n rootFolderId String? // NULL for root folders, points to top-level ancestor\n path String @default(\"/\") // Materialized path: \"/parentId/grandparentId/...\"\n depth Int @default(0)\n\n // Metadata\n sortOrder Int @default(0)\n isArchived Boolean @default(false)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n owner User @relation(\"FolderOwner\", fields: [ownerId], references: [id], onDelete: Cascade)\n parent Folder? @relation(\"FolderHierarchy\", fields: [parentId], references: [id], onDelete: Cascade)\n children Folder[] @relation(\"FolderHierarchy\")\n items FolderItem[]\n activities FolderActivity[]\n shares FolderShare[]\n\n @@index([ownerId])\n @@index([parentId])\n @@index([rootFolderId])\n @@index([path])\n @@index([isArchived])\n @@index([ownerId, isArchived])\n}\n\n// Links entities (conversations, documents, etc.) to folders\n// Polymorphic: entityType + entityId point to any supported entity\nmodel FolderItem {\n id String @id @default(cuid())\n folderId String\n\n // Polymorphic reference\n entityType FolderItemType\n entityId String\n\n // Optional metadata override\n displayName String?\n notes String?\n\n // Denormalized for efficient hierarchy queries\n rootFolderId String?\n\n // Tracking\n addedById String\n sortOrder Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n addedBy User @relation(\"FolderItemAdder\", fields: [addedById], references: [id], onDelete: Restrict)\n\n @@unique([folderId, entityType, entityId])\n @@index([folderId])\n @@index([entityType, entityId])\n @@index([rootFolderId])\n @@index([addedById])\n}\n\n// Timeline entries for folders (system events + user messages)\n// Opening ANY folder shows ALL activities from the entire folder tree\nmodel FolderActivity {\n id String @id @default(cuid())\n folderId String\n\n // Denormalized for cross-folder timeline queries\n rootFolderId String?\n\n // Activity details\n activityType FolderActivityType\n userId String\n content String? // For USER_MESSAGE, USER_NOTE types\n metadata Json? // For system event details\n relatedItemId String? // Optional reference to FolderItem\n\n // Timestamp\n createdAt DateTime @default(now())\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n user User @relation(\"FolderActivityUser\", fields: [userId], references: [id], onDelete: Restrict)\n\n @@index([folderId])\n @@index([rootFolderId])\n @@index([userId])\n @@index([activityType])\n @@index([createdAt])\n @@index([rootFolderId, createdAt(sort: Desc)])\n}\n\n// Sharing permissions for folders\n// Can share with individual user OR entire organization (not both)\nmodel FolderShare {\n id String @id @default(cuid())\n folderId String\n\n // Share target (either user OR organization, enforced by application logic)\n userId String?\n organizationId String?\n\n // Permission level\n permission FolderPermission @default(VIEW)\n\n // Sharing metadata\n sharedById String\n sharedAt DateTime @default(now())\n expiresAt DateTime?\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n user User? @relation(\"FolderShareUser\", fields: [userId], references: [id], onDelete: Cascade)\n organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n sharedBy User @relation(\"FolderShareCreator\", fields: [sharedById], references: [id], onDelete: Restrict)\n\n // Partial unique indexes for nullable columns\n @@unique([folderId, userId])\n @@unique([folderId, organizationId])\n @@index([folderId])\n @@index([userId])\n @@index([organizationId])\n @@index([sharedById])\n}\n",
731
- "inlineSchemaHash": "3e8058080ff3b1c9316482b64e7052fb8c5d5f964291a76ff6399e0ed7b54dc1",
744
+ "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"./generated/app\"\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"POSTGRES_PRISMA_URL\")\n directUrl = env(\"POSTGRES_URL_NON_POOLING\")\n}\n\nmodel Account {\n id String @id @default(cuid())\n userId String\n type String\n provider String\n providerAccountId String\n refresh_token String?\n access_token String?\n expires_at Int?\n token_type String?\n scope String?\n id_token String?\n session_state String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n}\n\nmodel User {\n id String @id @default(cuid())\n name String?\n email String? @unique\n emailVerified DateTime?\n image String?\n // Credentials authentication fields\n password String? // Hashed password pre credentials login\n createdAt DateTime @default(now())\n agreedToTerms Boolean @default(false)\n practiceArea String[]\n lawFirm String?\n yearsOfExperience Int?\n // Nové polia pre schvalovanie používateľov\n isApproved Boolean @default(false) // Či je používateľ schválený\n isRejected Boolean @default(false) // Či je používateľ zamietnutý\n approvedAt DateTime? // Kedy bol schválený\n rejectedAt DateTime? // Kedy bol zamietnutý\n approvedBy String? // ID admina, ktorý schválil\n rejectedBy String? // ID admina, ktorý zamietol\n rejectionReason String? // Dôvod zamietnutia\n // Nové polia pre tracking a žiadosť\n referralSource String? // Odkiaľ sa o nás dozvedel (Google, Facebook, LinkedIn, etc.)\n applicationText String? // Text žiadosti o prihlásenie\n // ✨ STRIPE FIELDS (B2C - len pre individuálnych používateľov)\n subscriptionTier SubscriptionTier @default(FREE) // Aktuálny subscription tier (cache)\n messageCount Int @default(10) // ✅ OPRAVENÉ z 100 na 10\n messageCountResetAt DateTime? // Kedy sa má resetovať message count\n adminGrantExpiresAt DateTime? // Kedy admin grant expiruje\n // ✨ COMPANY FIELDS (pre SZČO - samostatne zárobkovo činná osoba)\n customerType CustomerType @default(INDIVIDUAL) // Typ zákazníka: fyzická osoba alebo SZČO\n companyName String? // Obchodné meno (pre SZČO)\n companyNumber String? // IČO (povinné pre SZČO, 8 číslic)\n vatNumber String? // IČ DPH (SK + 10 číslic, nepovinné)\n taxNumber String? // DIČ (10 číslic, nepovinné)\n companyStreet String? // Ulica a číslo (pre SZČO)\n companyCity String? // Mesto (pre SZČO)\n companyPostalCode String? // PSČ (pre SZČO, formát: XXX XX)\n companyCountry String? @default(\"SK\") // Krajina (ISO kód, default SK)\n // Relations\n approvalRequest UserApprovalRequest?\n stripeCustomer StripeCustomer? // ✨ B2C Stripe customer\n ownedOrganizations Organization[] @relation(\"OrganizationOwner\")\n organizationMembers OrganizationMember[]\n createdInvites OrganizationInvite[] @relation(\"InviteCreator\")\n accounts Account[]\n answers Answer[]\n conversations Conversation[]\n feedbacks Feedback[]\n pageViews PageView[]\n sessions Session[]\n workflowLogs WorkflowLog[]\n verificationTokens VerificationToken[]\n passwordResetTokens PasswordResetToken[]\n canvasDocuments CanvasDocument[]\n canvasDocumentVersions CanvasDocumentVersion[]\n // Folder system relations\n ownedFolders Folder[] @relation(\"FolderOwner\")\n addedFolderItems FolderItem[] @relation(\"FolderItemAdder\")\n folderActivities FolderActivity[] @relation(\"FolderActivityUser\")\n folderSharesReceived FolderShare[] @relation(\"FolderShareUser\")\n createdFolderShares FolderShare[] @relation(\"FolderShareCreator\")\n\n @@index([customerType])\n @@index([companyNumber])\n @@index([email, customerType])\n}\n\n// Nový model pre žiadosti o schválenie\nmodel UserApprovalRequest {\n id String @id @default(cuid())\n userId String @unique\n status ApprovalStatus @default(PENDING)\n submittedAt DateTime @default(now())\n reviewedAt DateTime?\n reviewedBy String? // ID admina, ktorý preskúmal žiadosť\n notes String? // Poznámky admina\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([status])\n @@index([submittedAt])\n @@index([reviewedAt])\n}\n\n// ============================================\n// ORGANIZATION MODELS (B2B)\n// ============================================\n\n// Organization = Právna kancelária / Firma\nmodel Organization {\n id String @id @default(cuid())\n name String // \"Advokátska kancelária XYZ s.r.o.\"\n\n // Billing & Legal Information\n companyNumber String? // IČO (Identifikačné číslo organizácie)\n vatNumber String? // IČ DPH (VAT Number)\n taxNumber String? // DIČ (Daňové identifikačné číslo)\n legalForm String? // \"s.r.o.\", \"a.s.\", \"v.o.s.\", \"k.s.\", \"SZČO\"\n billingEmail String\n\n // Address\n street String?\n city String?\n postalCode String?\n country String @default(\"SK\")\n\n // Subscription (B2B)\n subscriptionTier SubscriptionTier @default(FREE) // Tier organizácie (cache)\n messageCount Int @default(0) // Spoločný pool správ pre všetkých členov\n messageLimit Int @default(100) // Limit správ podľa tieru\n messageCountResetAt DateTime? // Kedy sa má resetovať pool\n adminGrantExpiresAt DateTime? // Kedy admin grant expiruje\n\n // Settings\n isActive Boolean @default(true)\n maxMembers Int @default(5) // Max počet členov podľa tieru\n\n // Relations\n owner User @relation(\"OrganizationOwner\", fields: [ownerId], references: [id])\n ownerId String\n members OrganizationMember[]\n invites OrganizationInvite[]\n stripeCustomer StripeCustomer?\n folderShares FolderShare[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([ownerId])\n @@index([vatNumber])\n @@index([companyNumber])\n @@index([subscriptionTier])\n @@index([billingEmail])\n}\n\n// Many-to-Many: User ↔ Organization\nmodel OrganizationMember {\n id String @id @default(cuid())\n organizationId String\n userId String\n role MemberRole @default(MEMBER)\n joinedAt DateTime @default(now())\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([organizationId, userId])\n @@index([organizationId])\n @@index([userId])\n @@index([role])\n}\n\n// Organization Invite System\nmodel OrganizationInvite {\n id String @id @default(cuid())\n organizationId String\n token String @unique\n email String? // Optional: specific email invite\n role MemberRole @default(MEMBER)\n createdBy String\n expiresAt DateTime\n maxUses Int @default(1) // For multi-use invites\n currentUses Int @default(0)\n isActive Boolean @default(true)\n usedAt DateTime? // Last usage timestamp\n usedBy String? // Last user who used it\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n creator User @relation(\"InviteCreator\", fields: [createdBy], references: [id])\n\n @@index([token])\n @@index([organizationId])\n @@index([isActive])\n @@index([expiresAt])\n}\n\nenum MemberRole {\n OWNER // Zakladateľ/vlastník, plný prístup k billing a settings\n ADMIN // Administrátor, môže pridávať/odoberať členov\n MEMBER // Bežný člen, len používa systém\n}\n\n// ZJEDNODUŠENÝ Conversation - len metadata, bez duplikátov\nmodel Conversation {\n id String @id @default(cuid())\n name String\n userId String\n isShareable Boolean @default(false)\n shareUrl String? @unique\n sharedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n summary String?\n messagesSinceLastSummary Int? @default(0)\n // Relácie\n answers Answer[]\n user User @relation(fields: [userId], references: [id])\n workflowLogs WorkflowLog[]\n canvasDocuments CanvasDocument[]\n\n @@index([userId])\n @@index([createdAt])\n}\n\n// Hlavný model - všetky správy, bez duplikátov\nmodel Answer {\n id String @id @default(cuid())\n conversationId String\n messageId String @unique\n role Role\n content String\n question String?\n answer String?\n evaluation String?\n isWelcome Boolean @default(false)\n processingTime Int?\n model String?\n userId String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n // Relácie\n conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n user User? @relation(fields: [userId], references: [id])\n feedback Feedback?\n references Reference[]\n metrics AnswerMetrics?\n WorkflowLog WorkflowLog[]\n files MessageFile[]\n canvasDocumentId String? // No FK constraint - flexible document management\n\n @@index([conversationId])\n @@index([messageId])\n @@index([role])\n @@index([userId])\n @@index([createdAt])\n}\n\nmodel MessageFile {\n id String @id @default(cuid())\n answerId String\n fileName String\n fileType String\n base64Data String\n uploadedAt DateTime @default(now())\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([fileType])\n @@index([uploadedAt])\n}\n\n// Nová tabuľka pre metriky odpovedí\nmodel AnswerMetrics {\n id String @id @default(cuid())\n answerId String @unique\n // Náklady\n apiCost Float? // Celkové náklady (ai_cost + rag_cost)\n aiCost Float? // Náklady len na AI provider volania\n ragCost Float? // Náklady na RAG operácie\n // Volania\n apiCalls Int? // Celkový počet volaní\n aiCalls Int? // Počet AI provider volaní\n ragCalls Int? // Počet RAG operácií\n // Čas a výkon\n apiDuration Int? // Doba spracovania v ms\n // AI Provider a Model\n aiProvider String? // Hlavný AI provider\n aiModel String? // Hlavný AI model\n aiProvidersUsed String[] // Všetky použité AI providery\n aiModelsUsed String[] // Všetky použité AI modely\n // Timestamps\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n // Relations\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([apiCost])\n @@index([apiDuration])\n @@index([aiProvider])\n @@index([createdAt])\n}\n\nmodel Feedback {\n id String @id @default(cuid())\n answerId String @unique\n rating FeedbackRating\n feedbackTypes String[]\n customFeedback String?\n userId String\n messageContent String?\n createdAt DateTime @default(now())\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id])\n\n @@index([rating])\n @@index([userId])\n @@index([answerId])\n}\n\n// ZJEDNODUŠENÝ Reference - len na Answer, bez duplikátov\nmodel Reference {\n id String @id @default(cuid())\n answerId String // Len answerId - konzistentné\n type ReferenceType\n title String\n reference String\n summary String?\n url String?\n uuid String?\n relevance Float?\n citationNumber Int?\n metadata Json?\n userId String?\n createdAt DateTime @default(now())\n // Relácie\n answer Answer @relation(fields: [answerId], references: [id], onDelete: Cascade)\n\n @@index([answerId])\n @@index([type])\n @@index([reference])\n @@index([userId])\n @@index([createdAt])\n}\n\nmodel PageView {\n id String @id @default(cuid())\n userId String?\n sessionId String?\n page String\n path String\n referrer String?\n userAgent String?\n ipAddress String?\n country String?\n city String?\n deviceType String?\n browser String?\n os String?\n screenSize String?\n language String?\n timeOnPage Int?\n isBounce Boolean @default(true)\n createdAt DateTime @default(now())\n session Session? @relation(fields: [sessionId], references: [sessionId], onDelete: SetNull)\n user User? @relation(fields: [userId], references: [id])\n\n @@index([userId])\n @@index([sessionId])\n @@index([page])\n @@index([createdAt])\n @@index([country])\n @@index([deviceType])\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionId String @unique\n userId String?\n startedAt DateTime @default(now())\n endedAt DateTime?\n duration Int?\n pageViews PageView[]\n user User? @relation(fields: [userId], references: [id])\n workflowLogs WorkflowLog[]\n\n @@index([userId])\n @@index([startedAt])\n}\n\n// ============================================\n// STRIPE INTEGRATION MODELS\n// ============================================\n\n// Stripe Customer - polymorphic relation (User OR Organization)\nmodel StripeCustomer {\n id String @id @default(cuid())\n\n // ✅ Polymorphic relation - buď User (B2C) alebo Organization (B2B)\n userId String? @unique // B2C: Individuálny používateľ\n organizationId String? @unique // B2B: Organizácia\n\n stripeCustomerId String @unique\n email String\n name String?\n\n // Billing details (Stripe Address & Tax IDs)\n billingAddress Json? // Stripe Address object\n taxIds Json? // Stripe Tax IDs array (VAT, etc.)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n user User? @relation(fields: [userId], references: [id], onDelete: Cascade)\n organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n subscriptions StripeSubscription[]\n payments StripePayment[]\n\n @@index([stripeCustomerId])\n @@index([userId])\n @@index([organizationId])\n @@index([email])\n}\n\n// Stripe Subscription - sledovanie predplatného (User alebo Organization)\nmodel StripeSubscription {\n id String @id @default(cuid())\n\n // ✅ FIX: customerId = FK na StripeCustomer.id (nie stripeCustomerId!)\n customerId String // FK na StripeCustomer.id\n stripeCustomerId String // Stripe ID (pre logging/redundancia)\n stripeSubscriptionId String @unique\n stripePriceId String\n stripeProductId String\n\n status SubscriptionStatus\n tier SubscriptionTier @default(FREE)\n billingInterval BillingInterval @default(MONTHLY) // Monthly or Yearly billing\n\n currentPeriodStart DateTime\n currentPeriodEnd DateTime\n cancelAtPeriodEnd Boolean @default(false)\n canceledAt DateTime?\n\n trialStart DateTime?\n trialEnd DateTime?\n\n // Additional fields\n quantity Int @default(1) // Počet seats (pre LAW_FIRM/ENTERPRISE tier)\n defaultPaymentMethodId String? // Stripe payment method ID\n\n metadata Json? // Dodatočné Stripe metadata\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // ✅ FIX: Relácia na customerId (interné ID), nie stripeCustomerId (Stripe ID)\n customer StripeCustomer @relation(fields: [customerId], references: [id], onDelete: Cascade)\n\n @@index([stripeSubscriptionId])\n @@index([customerId])\n @@index([stripeCustomerId])\n @@index([status])\n @@index([tier])\n @@index([billingInterval])\n @@index([currentPeriodEnd])\n}\n\n// Stripe Event - prevencia duplicitného spracovania webhookov (idempotencia)\nmodel StripeEvent {\n id String @id @default(cuid())\n eventId String @unique // Stripe event ID\n type String // Typ eventu (napr. 'checkout.session.completed')\n data Json // Úplné event data pre debugging\n processed Boolean @default(false)\n processedAt DateTime?\n error String? // Uloženie chýb pri spracovaní\n createdAt DateTime @default(now())\n\n @@index([eventId])\n @@index([processed])\n @@index([type])\n @@index([createdAt])\n}\n\n// Stripe Payment - sledovanie jednotlivých platieb (voliteľné, pre detailnú analytiku)\nmodel StripePayment {\n id String @id @default(cuid())\n\n // ✅ FIX: Pridaná relácia na StripeCustomer\n customerId String\n stripePaymentId String @unique\n stripeCustomerId String // Redundantné, ale OK pre logging\n\n amount Int // Suma v centoch\n currency String @default(\"eur\")\n status String // succeeded, failed, pending\n paymentMethod String? // card, sepa_debit, atď.\n description String?\n\n // Invoice info\n invoiceId String? // Stripe Invoice ID\n invoiceUrl String? // URL na faktúru\n\n metadata Json?\n createdAt DateTime @default(now())\n\n // ✅ Relácia na StripeCustomer\n customer StripeCustomer @relation(fields: [customerId], references: [id], onDelete: Cascade)\n\n @@index([stripePaymentId])\n @@index([customerId])\n @@index([stripeCustomerId])\n @@index([status])\n @@index([createdAt])\n}\n\n// ============================================\n// ENUMS\n// ============================================\n\nenum Role {\n USER\n ASSISTANT\n SYSTEM\n}\n\nenum FeedbackRating {\n LIKE\n DISLIKE\n NEUTRAL\n}\n\nenum ReferenceType {\n LAW\n CASE\n REGULATION\n DOCUMENT\n OTHER\n}\n\nenum ApprovalStatus {\n PENDING\n APPROVED\n REJECTED\n}\n\n// Stripe: Status predplatného\nenum SubscriptionStatus {\n ACTIVE // Predplatné je aktívne\n CANCELED // Predplatné zrušené\n INCOMPLETE // Iniciálna platba zlyhala\n INCOMPLETE_EXPIRED // Neúplné predplatné expirované\n PAST_DUE // Platba zlyhala, retry prebieha\n TRIALING // V skúšobnom období\n UNPAID // Platba zlyhala, žiadny retry\n PAUSED // Predplatné pozastavené (Stripe feature)\n}\n\n// Customer type: Individuálny vs SZČO\nenum CustomerType {\n INDIVIDUAL // Fyzická osoba (bez IČO)\n SELF_EMPLOYED // SZČO - Samostatne zárobkovo činná osoba (s IČO)\n}\n\n// Stripe: Tier predplatného\nenum SubscriptionTier {\n FREE // Free tier (10 messages/month)\n LAWYER // Lawyer tier (1000 messages/month, €29/month, 1 user)\n LAWYER_PRO // Lawyer Pro tier (3000 messages/month, €49/month, 1 user) - RECOMMENDED\n LAW_FIRM // Law Firm tier (10000 messages/month, €129/month, up to 5 users)\n ENTERPRISE // Enterprise tier (unlimited messages, unlimited users, custom pricing)\n}\n\n// Stripe: Billing interval\nenum BillingInterval {\n MONTHLY // Monthly billing\n YEARLY // Yearly billing (17% discount)\n}\n\n// Canvas Document Status\nenum DocumentStatus {\n DRAFT\n SAVED\n ARCHIVED\n}\n\n// ============================================\n// FOLDER SYSTEM ENUMS\n// ============================================\n\n// Folder item types (what can be stored in folders)\nenum FolderItemType {\n CONVERSATION\n CANVAS_DOCUMENT\n REFERENCE\n ATTACHMENT\n}\n\n// Folder activity types (for timeline)\nenum FolderActivityType {\n FOLDER_CREATED\n FOLDER_UPDATED\n FOLDER_MOVED\n FOLDER_ARCHIVED\n ITEM_ADDED\n ITEM_REMOVED\n ITEM_UPDATED\n SHARE_ADDED\n SHARE_REMOVED\n USER_MESSAGE\n USER_NOTE\n}\n\n// Folder permission levels\nenum FolderPermission {\n VIEW\n EDIT\n ADMIN\n}\n\n// Nový model pre logovanie admin akcií\nmodel AdminActionLog {\n id String @id @default(cuid())\n action String // APPROVE_USER, REJECT_USER, etc.\n targetUserId String // ID používateľa, na ktorého sa akcia vzťahuje\n adminEmail String // E-mail admina, ktorý vykonal akciu\n details Json? // Ďalšie detaily akcie (reason, notes, etc.)\n createdAt DateTime @default(now())\n\n @@index([action])\n @@index([targetUserId])\n @@index([adminEmail])\n @@index([createdAt])\n}\n\nmodel WorkflowLog {\n id String @id @default(cuid()) // Added @default(cuid())\n conversationId String\n messageId String?\n userId String? // Made optional to preserve logs when users are deleted\n sessionId String? // Removed @unique to allow multiple workflows per session\n startedAt DateTime @default(now())\n completedAt DateTime?\n status WorkflowStatus @default(IN_PROGRESS)\n totalDuration Int? // milliseconds\n error String?\n metadata Json?\n steps WorkflowStep[] // Renamed from WorkflowStep to steps (lowerCamel, plural)\n conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)\n user User? @relation(fields: [userId], references: [id], onDelete: SetNull)\n session Session? @relation(fields: [sessionId], references: [sessionId], onDelete: SetNull)\n answer Answer? @relation(fields: [messageId], references: [messageId])\n\n @@index([conversationId])\n @@index([userId])\n @@index([sessionId])\n @@index([startedAt])\n @@index([status])\n @@index([conversationId, startedAt]) // Composite index for timeline queries\n @@index([messageId])\n}\n\nmodel WorkflowStep {\n id String @id @default(cuid()) // Added @default(cuid())\n workflowId String\n stepName String // 'classify_question', 'rag_search', 'ai_processing', 'generate_response'\n stepType StepType\n startedAt DateTime @default(now())\n completedAt DateTime?\n duration Int? // milliseconds\n status StepStatus @default(IN_PROGRESS)\n inputData Json? // Sanitized input data\n outputData Json? // Sanitized output data\n error String?\n metadata Json? // Provider used, model used, tokens, costs, etc.\n workflow WorkflowLog @relation(fields: [workflowId], references: [id], onDelete: Cascade)\n\n @@index([workflowId])\n @@index([stepName])\n @@index([stepType])\n @@index([startedAt])\n @@index([status])\n @@index([workflowId, startedAt]) // Composite index for timeline queries\n}\n\nenum WorkflowStatus {\n IN_PROGRESS\n COMPLETED\n FAILED\n CANCELLED\n}\n\nenum StepStatus {\n IN_PROGRESS\n COMPLETED\n FAILED\n SKIPPED\n}\n\nenum StepType {\n CLASSIFICATION\n RAG_RETRIEVAL\n AI_PROCESSING\n RESPONSE_GENERATION\n DATA_PERSISTENCE\n ERROR_HANDLING\n}\n\n// Email verification tokens\nmodel VerificationToken {\n id String @id @default(cuid())\n userId String\n token String @unique\n expires DateTime\n createdAt DateTime @default(now())\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([token])\n @@index([userId])\n @@index([expires])\n}\n\n// Password reset tokens\nmodel PasswordResetToken {\n id String @id @default(cuid())\n userId String\n token String @unique\n expires DateTime\n createdAt DateTime @default(now())\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([token])\n @@index([userId])\n @@index([expires])\n}\n\n// ============================================\n// CANVAS DOCUMENT MODELS\n// ============================================\n\nmodel CanvasDocument {\n id String @id @default(cuid())\n userId String\n title String\n status DocumentStatus @default(DRAFT)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n originConversationId String?\n originAnswerId String? // No FK constraint - async save reference\n currentVersionId String? @unique\n\n // Relations\n user User @relation(fields: [userId], references: [id], onDelete: Restrict)\n originConversation Conversation? @relation(fields: [originConversationId], references: [id], onDelete: SetNull)\n currentVersion CanvasDocumentVersion? @relation(\"CurrentVersion\", fields: [currentVersionId], references: [id], onDelete: SetNull)\n versions CanvasDocumentVersion[] @relation(\"DocumentVersions\")\n\n @@index([userId])\n @@index([originConversationId])\n @@index([status])\n @@index([createdAt])\n}\n\nmodel CanvasDocumentVersion {\n id String @id @default(cuid())\n documentId String\n versionNumber Int\n title String\n markdownContent String\n createdAt DateTime @default(now())\n createdBy String\n regenerationPrompt String?\n parentVersionId String?\n\n // Relations\n document CanvasDocument @relation(\"DocumentVersions\", fields: [documentId], references: [id], onDelete: Cascade)\n creator User @relation(fields: [createdBy], references: [id], onDelete: Restrict)\n parentVersion CanvasDocumentVersion? @relation(\"VersionHistory\", fields: [parentVersionId], references: [id], onDelete: SetNull)\n childVersions CanvasDocumentVersion[] @relation(\"VersionHistory\")\n currentForDocument CanvasDocument? @relation(\"CurrentVersion\")\n\n @@unique([documentId, versionNumber])\n @@index([documentId])\n @@index([createdBy])\n @@index([createdAt])\n}\n\n// ============================================\n// FOLDER SYSTEM MODELS\n// ============================================\n\n// Main folder entity with hierarchy support via parentId\n// Uses materialized path pattern for efficient hierarchy queries\nmodel Folder {\n id String @id @default(cuid())\n name String\n description String?\n color String? @default(\"#6366f1\")\n icon String? @default(\"folder\")\n\n // Ownership (always user-owned)\n ownerId String\n\n // Hierarchy\n parentId String?\n rootFolderId String? // NULL for root folders, points to top-level ancestor\n path String @default(\"/\") // Materialized path: \"/parentId/grandparentId/...\"\n depth Int @default(0)\n\n // Metadata\n sortOrder Int @default(0)\n isArchived Boolean @default(false)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n owner User @relation(\"FolderOwner\", fields: [ownerId], references: [id], onDelete: Cascade)\n parent Folder? @relation(\"FolderHierarchy\", fields: [parentId], references: [id], onDelete: Cascade)\n children Folder[] @relation(\"FolderHierarchy\")\n items FolderItem[]\n activities FolderActivity[]\n shares FolderShare[]\n\n @@index([ownerId])\n @@index([parentId])\n @@index([rootFolderId])\n @@index([path])\n @@index([isArchived])\n @@index([ownerId, isArchived])\n}\n\n// Links entities (conversations, documents, etc.) to folders\n// Polymorphic: entityType + entityId point to any supported entity\nmodel FolderItem {\n id String @id @default(cuid())\n folderId String\n\n // Polymorphic reference\n entityType FolderItemType\n entityId String\n\n // Optional metadata override\n displayName String?\n notes String?\n\n // Denormalized for efficient hierarchy queries\n rootFolderId String?\n\n // Tracking\n addedById String\n sortOrder Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n addedBy User @relation(\"FolderItemAdder\", fields: [addedById], references: [id], onDelete: Restrict)\n\n @@unique([folderId, entityType, entityId])\n @@index([folderId])\n @@index([entityType, entityId])\n @@index([rootFolderId])\n @@index([addedById])\n}\n\n// Timeline entries for folders (system events + user messages)\n// Opening ANY folder shows ALL activities from the entire folder tree\nmodel FolderActivity {\n id String @id @default(cuid())\n folderId String\n\n // Denormalized for cross-folder timeline queries\n rootFolderId String?\n\n // Activity details\n activityType FolderActivityType\n userId String\n content String? // For USER_MESSAGE, USER_NOTE types\n metadata Json? // For system event details\n relatedItemId String? // Optional reference to FolderItem\n\n // Timestamp\n createdAt DateTime @default(now())\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n user User @relation(\"FolderActivityUser\", fields: [userId], references: [id], onDelete: Restrict)\n\n @@index([folderId])\n @@index([rootFolderId])\n @@index([userId])\n @@index([activityType])\n @@index([createdAt])\n @@index([rootFolderId, createdAt(sort: Desc)])\n}\n\n// Sharing permissions for folders\n// Can share with individual user OR entire organization (not both)\nmodel FolderShare {\n id String @id @default(cuid())\n folderId String\n\n // Share target (either user OR organization, enforced by application logic)\n userId String?\n organizationId String?\n\n // Permission level\n permission FolderPermission @default(VIEW)\n\n // Sharing metadata\n sharedById String\n sharedAt DateTime @default(now())\n expiresAt DateTime?\n\n // Relations\n folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)\n user User? @relation(\"FolderShareUser\", fields: [userId], references: [id], onDelete: Cascade)\n organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n sharedBy User @relation(\"FolderShareCreator\", fields: [sharedById], references: [id], onDelete: Restrict)\n\n // Partial unique indexes for nullable columns\n @@unique([folderId, userId])\n @@unique([folderId, organizationId])\n @@index([folderId])\n @@index([userId])\n @@index([organizationId])\n @@index([sharedById])\n}\n",
745
+ "inlineSchemaHash": "7615ad41e59633ebae77d90873b03da153a58d58395f9d165c99681bbc4f7d83",
732
746
  "copyEngine": true
733
747
  }
734
748
  config.dirname = '/'
735
749
 
736
- config.runtimeDataModel = JSON.parse("{\"models\":{\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"agreedToTerms\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"practiceArea\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lawFirm\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"yearsOfExperience\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isApproved\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isRejected\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"approvedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rejectedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"approvedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rejectedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rejectionReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referralSource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"applicationText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subscriptionTier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"messageCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageCountResetAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"adminGrantExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"approvalRequest\",\"kind\":\"object\",\"type\":\"UserApprovalRequest\",\"relationName\":\"UserToUserApprovalRequest\"},{\"name\":\"stripeCustomer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToUser\"},{\"name\":\"ownedOrganizations\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationOwner\"},{\"name\":\"organizationMembers\",\"kind\":\"object\",\"type\":\"OrganizationMember\",\"relationName\":\"OrganizationMemberToUser\"},{\"name\":\"createdInvites\",\"kind\":\"object\",\"type\":\"OrganizationInvite\",\"relationName\":\"InviteCreator\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"answers\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToUser\"},{\"name\":\"conversations\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"ConversationToUser\"},{\"name\":\"feedbacks\",\"kind\":\"object\",\"type\":\"Feedback\",\"relationName\":\"FeedbackToUser\"},{\"name\":\"pageViews\",\"kind\":\"object\",\"type\":\"PageView\",\"relationName\":\"PageViewToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"UserToWorkflowLog\"},{\"name\":\"verificationTokens\",\"kind\":\"object\",\"type\":\"VerificationToken\",\"relationName\":\"UserToVerificationToken\"},{\"name\":\"passwordResetTokens\",\"kind\":\"object\",\"type\":\"PasswordResetToken\",\"relationName\":\"PasswordResetTokenToUser\"},{\"name\":\"canvasDocuments\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CanvasDocumentToUser\"},{\"name\":\"canvasDocumentVersions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"CanvasDocumentVersionToUser\"},{\"name\":\"ownedFolders\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderOwner\"},{\"name\":\"addedFolderItems\",\"kind\":\"object\",\"type\":\"FolderItem\",\"relationName\":\"FolderItemAdder\"},{\"name\":\"folderActivities\",\"kind\":\"object\",\"type\":\"FolderActivity\",\"relationName\":\"FolderActivityUser\"},{\"name\":\"folderSharesReceived\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareUser\"},{\"name\":\"createdFolderShares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareCreator\"}],\"dbName\":null},\"UserApprovalRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ApprovalStatus\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserApprovalRequest\"}],\"dbName\":null},\"Organization\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"vatNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"taxNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legalForm\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"street\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postalCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subscriptionTier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"messageCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageLimit\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageCountResetAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"adminGrantExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"maxMembers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationOwner\"},{\"name\":\"ownerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"members\",\"kind\":\"object\",\"type\":\"OrganizationMember\",\"relationName\":\"OrganizationToOrganizationMember\"},{\"name\":\"invites\",\"kind\":\"object\",\"type\":\"OrganizationInvite\",\"relationName\":\"OrganizationToOrganizationInvite\"},{\"name\":\"stripeCustomer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"OrganizationToStripeCustomer\"},{\"name\":\"folderShares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareToOrganization\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OrganizationMember\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"MemberRole\"},{\"name\":\"joinedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationMember\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationMemberToUser\"}],\"dbName\":null},\"OrganizationInvite\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"MemberRole\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"usedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationInvite\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"InviteCreator\"}],\"dbName\":null},\"Conversation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isShareable\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"shareUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sharedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messagesSinceLastSummary\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"answers\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToConversation\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ConversationToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"ConversationToWorkflowLog\"},{\"name\":\"canvasDocuments\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CanvasDocumentToConversation\"}],\"dbName\":null},\"Answer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"conversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"question\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"evaluation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isWelcome\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"processingTime\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"conversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"AnswerToConversation\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AnswerToUser\"},{\"name\":\"feedback\",\"kind\":\"object\",\"type\":\"Feedback\",\"relationName\":\"AnswerToFeedback\"},{\"name\":\"references\",\"kind\":\"object\",\"type\":\"Reference\",\"relationName\":\"AnswerToReference\"},{\"name\":\"metrics\",\"kind\":\"object\",\"type\":\"AnswerMetrics\",\"relationName\":\"AnswerToAnswerMetrics\"},{\"name\":\"WorkflowLog\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"AnswerToWorkflowLog\"},{\"name\":\"files\",\"kind\":\"object\",\"type\":\"MessageFile\",\"relationName\":\"AnswerToMessageFile\"},{\"name\":\"canvasDocumentId\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"MessageFile\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"base64Data\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uploadedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToMessageFile\"}],\"dbName\":null},\"AnswerMetrics\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apiCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"aiCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ragCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"apiCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"aiCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ragCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"apiDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"aiProvider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiModel\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiProvidersUsed\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiModelsUsed\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToAnswerMetrics\"}],\"dbName\":null},\"Feedback\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"enum\",\"type\":\"FeedbackRating\"},{\"name\":\"feedbackTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customFeedback\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageContent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToFeedback\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FeedbackToUser\"}],\"dbName\":null},\"Reference\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"ReferenceType\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"relevance\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"citationNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToReference\"}],\"dbName\":null},\"PageView\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"page\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referrer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deviceType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"browser\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"os\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"screenSize\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"language\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timeOnPage\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isBounce\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"PageViewToSession\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PageViewToUser\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"pageViews\",\"kind\":\"object\",\"type\":\"PageView\",\"relationName\":\"PageViewToSession\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"SessionToWorkflowLog\"}],\"dbName\":null},\"StripeCustomer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingAddress\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"taxIds\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"StripeCustomerToUser\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToStripeCustomer\"},{\"name\":\"subscriptions\",\"kind\":\"object\",\"type\":\"StripeSubscription\",\"relationName\":\"StripeCustomerToStripeSubscription\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"StripePayment\",\"relationName\":\"StripeCustomerToStripePayment\"}],\"dbName\":null},\"StripeSubscription\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeSubscriptionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripePriceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeProductId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"SubscriptionStatus\"},{\"name\":\"tier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"billingInterval\",\"kind\":\"enum\",\"type\":\"BillingInterval\"},{\"name\":\"currentPeriodStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"currentPeriodEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"cancelAtPeriodEnd\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"canceledAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trialStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trialEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"defaultPaymentMethodId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"customer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToStripeSubscription\"}],\"dbName\":null},\"StripeEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"processed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"processedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"StripePayment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripePaymentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"invoiceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"invoiceUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"customer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToStripePayment\"}],\"dbName\":null},\"AdminActionLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"action\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetUserId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"adminEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"details\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"WorkflowLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"conversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"WorkflowStatus\"},{\"name\":\"totalDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"steps\",\"kind\":\"object\",\"type\":\"WorkflowStep\",\"relationName\":\"WorkflowLogToWorkflowStep\"},{\"name\":\"conversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"ConversationToWorkflowLog\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToWorkflowLog\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToWorkflowLog\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToWorkflowLog\"}],\"dbName\":null},\"WorkflowStep\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stepName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stepType\",\"kind\":\"enum\",\"type\":\"StepType\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"StepStatus\"},{\"name\":\"inputData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"outputData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"workflow\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"WorkflowLogToWorkflowStep\"}],\"dbName\":null},\"VerificationToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVerificationToken\"}],\"dbName\":null},\"PasswordResetToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PasswordResetTokenToUser\"}],\"dbName\":null},\"CanvasDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"DocumentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"originConversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originAnswerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currentVersionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CanvasDocumentToUser\"},{\"name\":\"originConversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"CanvasDocumentToConversation\"},{\"name\":\"currentVersion\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"CurrentVersion\"},{\"name\":\"versions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"DocumentVersions\"}],\"dbName\":null},\"CanvasDocumentVersion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"documentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"versionNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markdownContent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"regenerationPrompt\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parentVersionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"document\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"DocumentVersions\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CanvasDocumentVersionToUser\"},{\"name\":\"parentVersion\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"VersionHistory\"},{\"name\":\"childVersions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"VersionHistory\"},{\"name\":\"currentForDocument\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CurrentVersion\"}],\"dbName\":null},\"Folder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"color\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ownerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"depth\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sortOrder\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isArchived\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderOwner\"},{\"name\":\"parent\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderHierarchy\"},{\"name\":\"children\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderHierarchy\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"FolderItem\",\"relationName\":\"FolderToFolderItem\"},{\"name\":\"activities\",\"kind\":\"object\",\"type\":\"FolderActivity\",\"relationName\":\"FolderToFolderActivity\"},{\"name\":\"shares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderToFolderShare\"}],\"dbName\":null},\"FolderItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"entityType\",\"kind\":\"enum\",\"type\":\"FolderItemType\"},{\"name\":\"entityId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sortOrder\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderItem\"},{\"name\":\"addedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderItemAdder\"}],\"dbName\":null},\"FolderActivity\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"activityType\",\"kind\":\"enum\",\"type\":\"FolderActivityType\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"relatedItemId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderActivity\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderActivityUser\"}],\"dbName\":null},\"FolderShare\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permission\",\"kind\":\"enum\",\"type\":\"FolderPermission\"},{\"name\":\"sharedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sharedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderShare\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderShareUser\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"FolderShareToOrganization\"},{\"name\":\"sharedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderShareCreator\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
750
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"agreedToTerms\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"practiceArea\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lawFirm\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"yearsOfExperience\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isApproved\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isRejected\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"approvedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rejectedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"approvedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rejectedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rejectionReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referralSource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"applicationText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subscriptionTier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"messageCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageCountResetAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"adminGrantExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"customerType\",\"kind\":\"enum\",\"type\":\"CustomerType\"},{\"name\":\"companyName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"vatNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"taxNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyStreet\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyCity\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyPostalCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyCountry\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"approvalRequest\",\"kind\":\"object\",\"type\":\"UserApprovalRequest\",\"relationName\":\"UserToUserApprovalRequest\"},{\"name\":\"stripeCustomer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToUser\"},{\"name\":\"ownedOrganizations\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationOwner\"},{\"name\":\"organizationMembers\",\"kind\":\"object\",\"type\":\"OrganizationMember\",\"relationName\":\"OrganizationMemberToUser\"},{\"name\":\"createdInvites\",\"kind\":\"object\",\"type\":\"OrganizationInvite\",\"relationName\":\"InviteCreator\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"answers\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToUser\"},{\"name\":\"conversations\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"ConversationToUser\"},{\"name\":\"feedbacks\",\"kind\":\"object\",\"type\":\"Feedback\",\"relationName\":\"FeedbackToUser\"},{\"name\":\"pageViews\",\"kind\":\"object\",\"type\":\"PageView\",\"relationName\":\"PageViewToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"UserToWorkflowLog\"},{\"name\":\"verificationTokens\",\"kind\":\"object\",\"type\":\"VerificationToken\",\"relationName\":\"UserToVerificationToken\"},{\"name\":\"passwordResetTokens\",\"kind\":\"object\",\"type\":\"PasswordResetToken\",\"relationName\":\"PasswordResetTokenToUser\"},{\"name\":\"canvasDocuments\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CanvasDocumentToUser\"},{\"name\":\"canvasDocumentVersions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"CanvasDocumentVersionToUser\"},{\"name\":\"ownedFolders\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderOwner\"},{\"name\":\"addedFolderItems\",\"kind\":\"object\",\"type\":\"FolderItem\",\"relationName\":\"FolderItemAdder\"},{\"name\":\"folderActivities\",\"kind\":\"object\",\"type\":\"FolderActivity\",\"relationName\":\"FolderActivityUser\"},{\"name\":\"folderSharesReceived\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareUser\"},{\"name\":\"createdFolderShares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareCreator\"}],\"dbName\":null},\"UserApprovalRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ApprovalStatus\"},{\"name\":\"submittedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserApprovalRequest\"}],\"dbName\":null},\"Organization\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"companyNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"vatNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"taxNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legalForm\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"street\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postalCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subscriptionTier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"messageCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageLimit\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"messageCountResetAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"adminGrantExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"maxMembers\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationOwner\"},{\"name\":\"ownerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"members\",\"kind\":\"object\",\"type\":\"OrganizationMember\",\"relationName\":\"OrganizationToOrganizationMember\"},{\"name\":\"invites\",\"kind\":\"object\",\"type\":\"OrganizationInvite\",\"relationName\":\"OrganizationToOrganizationInvite\"},{\"name\":\"stripeCustomer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"OrganizationToStripeCustomer\"},{\"name\":\"folderShares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderShareToOrganization\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OrganizationMember\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"MemberRole\"},{\"name\":\"joinedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationMember\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationMemberToUser\"}],\"dbName\":null},\"OrganizationInvite\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"MemberRole\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"usedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationInvite\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"InviteCreator\"}],\"dbName\":null},\"Conversation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isShareable\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"shareUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sharedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messagesSinceLastSummary\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"answers\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToConversation\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ConversationToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"ConversationToWorkflowLog\"},{\"name\":\"canvasDocuments\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CanvasDocumentToConversation\"}],\"dbName\":null},\"Answer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"conversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"Role\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"question\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"evaluation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isWelcome\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"processingTime\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"conversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"AnswerToConversation\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AnswerToUser\"},{\"name\":\"feedback\",\"kind\":\"object\",\"type\":\"Feedback\",\"relationName\":\"AnswerToFeedback\"},{\"name\":\"references\",\"kind\":\"object\",\"type\":\"Reference\",\"relationName\":\"AnswerToReference\"},{\"name\":\"metrics\",\"kind\":\"object\",\"type\":\"AnswerMetrics\",\"relationName\":\"AnswerToAnswerMetrics\"},{\"name\":\"WorkflowLog\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"AnswerToWorkflowLog\"},{\"name\":\"files\",\"kind\":\"object\",\"type\":\"MessageFile\",\"relationName\":\"AnswerToMessageFile\"},{\"name\":\"canvasDocumentId\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"MessageFile\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"base64Data\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uploadedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToMessageFile\"}],\"dbName\":null},\"AnswerMetrics\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apiCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"aiCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ragCost\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"apiCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"aiCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"ragCalls\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"apiDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"aiProvider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiModel\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiProvidersUsed\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"aiModelsUsed\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToAnswerMetrics\"}],\"dbName\":null},\"Feedback\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"enum\",\"type\":\"FeedbackRating\"},{\"name\":\"feedbackTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customFeedback\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageContent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToFeedback\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FeedbackToUser\"}],\"dbName\":null},\"Reference\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"answerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"ReferenceType\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"relevance\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"citationNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToReference\"}],\"dbName\":null},\"PageView\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"page\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"referrer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deviceType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"browser\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"os\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"screenSize\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"language\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timeOnPage\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isBounce\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"PageViewToSession\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PageViewToUser\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"pageViews\",\"kind\":\"object\",\"type\":\"PageView\",\"relationName\":\"PageViewToSession\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"workflowLogs\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"SessionToWorkflowLog\"}],\"dbName\":null},\"StripeCustomer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingAddress\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"taxIds\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"StripeCustomerToUser\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToStripeCustomer\"},{\"name\":\"subscriptions\",\"kind\":\"object\",\"type\":\"StripeSubscription\",\"relationName\":\"StripeCustomerToStripeSubscription\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"StripePayment\",\"relationName\":\"StripeCustomerToStripePayment\"}],\"dbName\":null},\"StripeSubscription\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeSubscriptionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripePriceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeProductId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"SubscriptionStatus\"},{\"name\":\"tier\",\"kind\":\"enum\",\"type\":\"SubscriptionTier\"},{\"name\":\"billingInterval\",\"kind\":\"enum\",\"type\":\"BillingInterval\"},{\"name\":\"currentPeriodStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"currentPeriodEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"cancelAtPeriodEnd\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"canceledAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trialStart\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trialEnd\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"defaultPaymentMethodId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"customer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToStripeSubscription\"}],\"dbName\":null},\"StripeEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"processed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"processedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"StripePayment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"customerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripePaymentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stripeCustomerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"invoiceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"invoiceUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"customer\",\"kind\":\"object\",\"type\":\"StripeCustomer\",\"relationName\":\"StripeCustomerToStripePayment\"}],\"dbName\":null},\"AdminActionLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"action\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetUserId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"adminEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"details\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"WorkflowLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"conversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"WorkflowStatus\"},{\"name\":\"totalDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"steps\",\"kind\":\"object\",\"type\":\"WorkflowStep\",\"relationName\":\"WorkflowLogToWorkflowStep\"},{\"name\":\"conversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"ConversationToWorkflowLog\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToWorkflowLog\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToWorkflowLog\"},{\"name\":\"answer\",\"kind\":\"object\",\"type\":\"Answer\",\"relationName\":\"AnswerToWorkflowLog\"}],\"dbName\":null},\"WorkflowStep\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stepName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stepType\",\"kind\":\"enum\",\"type\":\"StepType\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"StepStatus\"},{\"name\":\"inputData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"outputData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"error\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"workflow\",\"kind\":\"object\",\"type\":\"WorkflowLog\",\"relationName\":\"WorkflowLogToWorkflowStep\"}],\"dbName\":null},\"VerificationToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVerificationToken\"}],\"dbName\":null},\"PasswordResetToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PasswordResetTokenToUser\"}],\"dbName\":null},\"CanvasDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"DocumentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"originConversationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originAnswerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currentVersionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CanvasDocumentToUser\"},{\"name\":\"originConversation\",\"kind\":\"object\",\"type\":\"Conversation\",\"relationName\":\"CanvasDocumentToConversation\"},{\"name\":\"currentVersion\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"CurrentVersion\"},{\"name\":\"versions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"DocumentVersions\"}],\"dbName\":null},\"CanvasDocumentVersion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"documentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"versionNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markdownContent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"regenerationPrompt\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parentVersionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"document\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"DocumentVersions\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CanvasDocumentVersionToUser\"},{\"name\":\"parentVersion\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"VersionHistory\"},{\"name\":\"childVersions\",\"kind\":\"object\",\"type\":\"CanvasDocumentVersion\",\"relationName\":\"VersionHistory\"},{\"name\":\"currentForDocument\",\"kind\":\"object\",\"type\":\"CanvasDocument\",\"relationName\":\"CurrentVersion\"}],\"dbName\":null},\"Folder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"color\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"icon\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ownerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"depth\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sortOrder\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isArchived\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderOwner\"},{\"name\":\"parent\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderHierarchy\"},{\"name\":\"children\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderHierarchy\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"FolderItem\",\"relationName\":\"FolderToFolderItem\"},{\"name\":\"activities\",\"kind\":\"object\",\"type\":\"FolderActivity\",\"relationName\":\"FolderToFolderActivity\"},{\"name\":\"shares\",\"kind\":\"object\",\"type\":\"FolderShare\",\"relationName\":\"FolderToFolderShare\"}],\"dbName\":null},\"FolderItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"entityType\",\"kind\":\"enum\",\"type\":\"FolderItemType\"},{\"name\":\"entityId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sortOrder\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderItem\"},{\"name\":\"addedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderItemAdder\"}],\"dbName\":null},\"FolderActivity\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rootFolderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"activityType\",\"kind\":\"enum\",\"type\":\"FolderActivityType\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"relatedItemId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderActivity\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderActivityUser\"}],\"dbName\":null},\"FolderShare\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"folderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizationId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permission\",\"kind\":\"enum\",\"type\":\"FolderPermission\"},{\"name\":\"sharedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sharedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"folder\",\"kind\":\"object\",\"type\":\"Folder\",\"relationName\":\"FolderToFolderShare\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderShareUser\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"FolderShareToOrganization\"},{\"name\":\"sharedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"FolderShareCreator\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
737
751
  defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
738
752
  config.engineWasm = {
739
753
  getRuntime: async () => require('./query_engine_bg.js'),
@@ -0,0 +1,22 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "CustomerType" AS ENUM ('INDIVIDUAL', 'SELF_EMPLOYED');
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "User" ADD COLUMN "companyCity" TEXT,
6
+ ADD COLUMN "companyCountry" TEXT DEFAULT 'SK',
7
+ ADD COLUMN "companyName" TEXT,
8
+ ADD COLUMN "companyNumber" TEXT,
9
+ ADD COLUMN "companyPostalCode" TEXT,
10
+ ADD COLUMN "companyStreet" TEXT,
11
+ ADD COLUMN "customerType" "CustomerType" NOT NULL DEFAULT 'INDIVIDUAL',
12
+ ADD COLUMN "taxNumber" TEXT,
13
+ ADD COLUMN "vatNumber" TEXT;
14
+
15
+ -- CreateIndex
16
+ CREATE INDEX "User_customerType_idx" ON "User"("customerType");
17
+
18
+ -- CreateIndex
19
+ CREATE INDEX "User_companyNumber_idx" ON "User"("companyNumber");
20
+
21
+ -- CreateIndex
22
+ CREATE INDEX "User_email_customerType_idx" ON "User"("email", "customerType");