generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) clerkId String @unique email String @unique firstName String? lastName String? imageUrl String? contracts Contract[] notifications Notification[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([clerkId]) @@index([email]) } model Contract { id String @id @default(cuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) // File info (user uploads) fileName String fileUrl String fileSize Int mimeType String // AI-determined fields (filled automatically) title String? type ContractType? provider String? policyNumber String? startDate DateTime? endDate DateTime? premium Decimal? @db.Decimal(10, 2) // Processing pipeline status ContractStatus @default(UPLOADED) // AI results extractedText String? @db.Text summary String? @db.Text keyPoints Json? // Blockchain (later) documentHash String? txHash String? ipfsUrl String? // Notifications for this contract notifications Notification[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([userId]) @@index([status]) @@index([type]) @@index([endDate]) } model Notification { id String @id @default(cuid()) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) contractId String? contract Contract? @relation(fields: [contractId], references: [id], onDelete: SetNull) // Notification metadata type NotificationType title String message String icon String? // Icon type for UI // Action metadata actionType String? // e.g., "RENEWAL_REMINDER", "UPLOAD_SUCCESS", "ANALYSIS_COMPLETE" actionData Json? // Additional data for the action // Status tracking read Boolean @default(false) createdAt DateTime @default(now()) expiresAt DateTime? // Notification expiration time @@index([userId]) @@index([contractId]) @@index([type]) @@index([read]) @@index([createdAt]) } enum NotificationType { SUCCESS // Successful action WARNING // Warning/Alert ERROR // Error INFO // Informational DEADLINE // Deadline approaching } enum ContractType { INSURANCE_AUTO INSURANCE_HOME INSURANCE_HEALTH INSURANCE_LIFE LOAN CREDIT_CARD INVESTMENT OTHER } enum ContractStatus { UPLOADED // Just uploaded, waiting for processing PROCESSING // AI is analyzing COMPLETED // Everything done FAILED // Processing failed }