// Database schema, one company = one org, linked to users and CSV config generator client { provider = "prisma-client-js" previewFeatures = ["driverAdapters"] } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model Company { id String @id @default(uuid()) name String csvUrl String // where to fetch CSV csvUsername String? // for basic auth csvPassword String? sentimentAlert Float? // e.g. alert threshold for negative chats dashboardOpts String? // JSON blob for per-company dashboard preferences users User[] sessions Session[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model User { id String @id @default(uuid()) email String @unique password String // hashed, use bcrypt company Company @relation(fields: [companyId], references: [id]) companyId String role String // 'admin' | 'user' | 'auditor' resetToken String? resetTokenExpiry DateTime? // NextAuth fields accounts Account[] sessions UserSession[] emailVerified DateTime? image String? } // NextAuth models model Account { id String @id @default(cuid()) userId String type String provider String providerAccountId String refresh_token String? access_token String? expires_at Int? token_type String? scope String? id_token String? session_state String? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) } model UserSession { id String @id @default(cuid()) sessionToken String @unique userId String expires DateTime user User @relation(fields: [userId], references: [id], onDelete: Cascade) } model VerificationToken { identifier String token String @unique expires DateTime @@unique([identifier, token]) } model Session { id String @id company Company @relation(fields: [companyId], references: [id]) companyId String startTime DateTime endTime DateTime ipAddress String? country String? language String? messagesSent Int? sentiment Float? escalated Boolean? forwardedHr Boolean? fullTranscriptUrl String? transcriptContent String? // Added to store the fetched transcript avgResponseTime Float? tokens Int? tokensEur Float? category String? initialMsg String? createdAt DateTime @default(now()) }