generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model TwilioAccount { accountSid String @id createdAt DateTime @default(now()) @db.Timestamptz(6) updatedAt DateTime @updatedAt @db.Timestamptz(6) authToken String twimlAppSid String? apiKeySid String? apiKeySecret String? phoneNumbers PhoneNumber[] notificationSubscriptions NotificationSubscription[] sessions Session[] } model Session { id String @id @default(cuid()) createdAt DateTime @default(now()) @db.Timestamptz(6) updatedAt DateTime @updatedAt @db.Timestamptz(6) expiresAt DateTime? @db.Timestamptz(6) data String twilioAccountSid String? twilioAccount TwilioAccount? @relation(fields: [twilioAccountSid], references: [accountSid], onDelete: Cascade) } model Message { id String @id sentAt DateTime @db.Timestamptz(6) content String recipient String from String to String direction Direction status MessageStatus phoneNumberId String phoneNumber PhoneNumber @relation(fields: [phoneNumberId], references: [id], onDelete: Cascade) @@index([phoneNumberId, recipient]) } model PhoneCall { id String @id createdAt DateTime @default(now()) @db.Timestamptz(6) recipient String from String to String status CallStatus direction Direction duration String phoneNumberId String phoneNumber PhoneNumber @relation(fields: [phoneNumberId], references: [id], onDelete: Cascade) @@index([phoneNumberId, recipient]) } model PhoneNumber { id String @id createdAt DateTime @default(now()) @db.Timestamptz(6) number String isCurrent Boolean isFetchingMessages Boolean? isFetchingCalls Boolean? twilioAccountSid String twilioAccount TwilioAccount @relation(fields: [twilioAccountSid], references: [accountSid], onDelete: Cascade) messages Message[] phoneCalls PhoneCall[] @@unique([twilioAccountSid, isCurrent]) } model NotificationSubscription { id String @id @default(uuid()) createdAt DateTime @default(now()) @db.Timestamptz updatedAt DateTime @updatedAt @db.Timestamptz endpoint String @unique expirationTime Int? keys_p256dh String keys_auth String twilioAccount TwilioAccount @relation(fields: [twilioAccountSid], references: [accountSid], onDelete: Cascade) twilioAccountSid String } enum Direction { Inbound Outbound } enum MessageStatus { Queued Sending Sent Failed Delivered Undelivered Receiving Received Accepted Scheduled Read PartiallyDelivered Canceled Error } enum CallStatus { Queued Ringing InProgress Completed Busy Failed NoAnswer Canceled }