// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_CONNECTION_URI") } enum InstanceConnectionStatus { open close connecting } enum DeviceMessage { ios android web unknown desktop } enum TypebotSessionStatus { open closed paused } model Instance { id String @id @default(cuid()) name String @unique @db.VarChar(255) connectionStatus InstanceConnectionStatus @default(open) ownerJid String? @db.VarChar(100) profilePicUrl String? @db.VarChar(500) integration String? @db.VarChar(100) number String? @db.VarChar(100) token String? @unique @db.VarChar(255) createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime? @updatedAt @db.Timestamp Chat Chat[] Contact Contact[] Message Message[] Webhook Webhook? Chatwoot Chatwoot? Label Label[] Proxy Proxy? Setting Setting? Rabbitmq Rabbitmq? Sqs Sqs? Websocket Websocket? Typebot Typebot? Session Session? MessageUpdate MessageUpdate[] TypebotSession TypebotSession[] } model Session { id Int @id @unique @default(autoincrement()) sessionId String @unique creds String? @db.Text createdAt DateTime @default(now()) @db.Timestamp Instance Instance @relation(fields: [sessionId], references: [id], onDelete: Cascade) } model Chat { id Int @id @default(autoincrement()) remoteJid String @db.VarChar(100) labels Json? @db.JsonB createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime? @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String } model Contact { id Int @id @default(autoincrement()) remoteJid String @db.VarChar(100) pushName String? @db.VarChar(100) profilePicUrl String? @db.VarChar(500) createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime? @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String } model Message { id Int @id @default(autoincrement()) key Json @db.JsonB pushName String? @db.VarChar(100) participant String? @db.VarChar(100) messageType String @db.VarChar(100) message Json @db.JsonB contextInfo Json? @db.JsonB source DeviceMessage messageTimestamp Int @db.Integer chatwootMessageId Int? @db.Integer chatwootInboxId Int? @db.Integer chatwootConversationId Int? @db.Integer chatwootContactInboxSourceId String? @db.VarChar(100) chatwootIsRead Boolean? @db.Boolean Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String typebotSessionId Int? MessageUpdate MessageUpdate[] TypebotSession TypebotSession? @relation(fields: [typebotSessionId], references: [id]) } model MessageUpdate { id Int @id @default(autoincrement()) keyId String @db.VarChar(100) remoteJid String @db.VarChar(100) fromMe Boolean @db.Boolean participant String? @db.VarChar(100) pollUpdates Json? @db.JsonB status String @db.VarChar(30) Message Message @relation(fields: [messageId], references: [id], onDelete: Cascade) messageId Int Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String } model Webhook { id Int @id @default(autoincrement()) url String @db.VarChar(500) enabled Boolean? @default(true) @db.Boolean events Json? @db.JsonB webhookByEvents Boolean? @default(false) @db.Boolean webhookBase64 Boolean? @default(false) @db.Boolean createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Chatwoot { id Int @id @default(autoincrement()) enabled Boolean? @default(true) @db.Boolean accountId String? @db.VarChar(100) token String? @db.VarChar(100) url String? @db.VarChar(500) nameInbox String? @db.VarChar(100) signMsg Boolean? @default(false) @db.Boolean signDelimiter String? @db.VarChar(100) number String? @db.VarChar(100) reopenConversation Boolean? @default(false) @db.Boolean conversationPending Boolean? @default(false) @db.Boolean mergeBrazilContacts Boolean? @default(false) @db.Boolean importContacts Boolean? @default(false) @db.Boolean importMessages Boolean? @default(false) @db.Boolean daysLimitImportMessages Int? @db.Integer createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Label { id Int @id @default(autoincrement()) labelId String? @unique @db.VarChar(100) name String @db.VarChar(100) color String @db.VarChar(100) predefinedId String? @db.VarChar(100) createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String } model Proxy { id Int @id @default(autoincrement()) enabled Boolean @default(false) @db.Boolean host String @db.VarChar(100) port String @db.VarChar(100) protocol String @db.VarChar(100) username String @db.VarChar(100) password String @db.VarChar(100) createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Setting { id Int @id @default(autoincrement()) rejectCall Boolean @default(false) @db.Boolean msgCall String? @db.VarChar(100) groupsIgnore Boolean @default(false) @db.Boolean alwaysOnline Boolean @default(false) @db.Boolean readMessages Boolean @default(false) @db.Boolean readStatus Boolean @default(false) @db.Boolean syncFullHistory Boolean @default(false) @db.Boolean createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Rabbitmq { id Int @id @default(autoincrement()) enabled Boolean @default(false) @db.Boolean events Json @db.JsonB createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Sqs { id Int @id @default(autoincrement()) enabled Boolean @default(false) @db.Boolean events Json @db.JsonB createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Websocket { id Int @id @default(autoincrement()) enabled Boolean @default(false) @db.Boolean events Json @db.JsonB createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique } model Typebot { id Int @id @default(autoincrement()) enabled Boolean @default(true) @db.Boolean url String @db.VarChar(500) typebot String @db.VarChar(100) expire Int @default(0) @db.Integer keywordFinish String? @db.VarChar(100) delayMessage Int? @db.Integer unknownMessage String? @db.VarChar(100) listeningFromMe Boolean @default(false) @db.Boolean createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime? @updatedAt @db.Timestamp Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String @unique sessions TypebotSession[] } model TypebotSession { id Int @id @default(autoincrement()) remoteJid String @db.VarChar(100) pushName String? @db.VarChar(100) sessionId String @db.VarChar(100) status String @db.VarChar(100) prefilledVariables Json? @db.JsonB awaitUser Boolean @default(false) @db.Boolean createdAt DateTime? @default(now()) @db.Timestamp updatedAt DateTime @updatedAt @db.Timestamp Typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade) typebotId Int Message Message[] Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade) instanceId String }