mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-14 01:41:24 -06:00

This commit introduces a new feature, dify tables, along with related migration scripts. The `prisma/migrations/20240730152156_create_dify_tables/migration.sql` file contains the migration for creating the dify tables, while the `prisma/postgresql-schema.prisma` file has been modified to include the necessary schema changes for these tables. This change improves data organization and simplifies data management for the project.
506 lines
20 KiB
Plaintext
506 lines
20 KiB
Plaintext
// 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 {
|
|
opened
|
|
closed
|
|
paused
|
|
}
|
|
|
|
enum TriggerType {
|
|
all
|
|
keyword
|
|
none
|
|
}
|
|
|
|
enum TriggerOperator {
|
|
contains
|
|
equals
|
|
startsWith
|
|
endsWith
|
|
regex
|
|
}
|
|
|
|
enum OpenaiBotType {
|
|
assistant
|
|
chatCompletion
|
|
}
|
|
|
|
enum DifyBotType {
|
|
chatBot
|
|
textGenerator
|
|
agent
|
|
workflow
|
|
}
|
|
|
|
model Instance {
|
|
id String @id @default(cuid())
|
|
name String @unique @db.VarChar(255)
|
|
connectionStatus InstanceConnectionStatus @default(open)
|
|
ownerJid String? @db.VarChar(100)
|
|
profileName String? @db.VarChar(100)
|
|
profilePicUrl String? @db.VarChar(500)
|
|
integration String? @db.VarChar(100)
|
|
number String? @db.VarChar(100)
|
|
businessId String? @db.VarChar(100)
|
|
token String? @db.VarChar(255)
|
|
clientName String? @db.VarChar(100)
|
|
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[]
|
|
TypebotSetting TypebotSetting?
|
|
Media Media[]
|
|
OpenaiCreds OpenaiCreds[]
|
|
OpenaiBot OpenaiBot[]
|
|
OpenaiSession OpenaiSession[]
|
|
OpenaiSetting OpenaiSetting?
|
|
Template Template[]
|
|
Dify Dify[]
|
|
DifySession DifySession[]
|
|
DifySetting DifySetting?
|
|
}
|
|
|
|
model Session {
|
|
id String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String?
|
|
MessageUpdate MessageUpdate[]
|
|
TypebotSession TypebotSession? @relation(fields: [typebotSessionId], references: [id])
|
|
Media Media?
|
|
OpenaiSession OpenaiSession? @relation(fields: [openaiSessionId], references: [id])
|
|
openaiSessionId String?
|
|
webhookUrl String? @db.VarChar(500)
|
|
DifySession DifySession? @relation(fields: [difySessionId], references: [id])
|
|
difySessionId String?
|
|
}
|
|
|
|
model MessageUpdate {
|
|
id String @id @default(cuid())
|
|
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 String
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
}
|
|
|
|
model Webhook {
|
|
id String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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
|
|
organization String? @db.VarChar(100)
|
|
logo 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 @unique
|
|
}
|
|
|
|
model Label {
|
|
id String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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 String @id @default(cuid())
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime? @updatedAt @db.Timestamp
|
|
ignoreJids Json?
|
|
triggerType TriggerType?
|
|
triggerOperator TriggerOperator?
|
|
triggerValue String?
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
sessions TypebotSession[]
|
|
TypebotSetting TypebotSetting[]
|
|
}
|
|
|
|
model TypebotSession {
|
|
id String @id @default(cuid())
|
|
remoteJid String @db.VarChar(100)
|
|
pushName String? @db.VarChar(100)
|
|
sessionId String @db.VarChar(100)
|
|
status TypebotSessionStatus
|
|
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 String
|
|
Message Message[]
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
}
|
|
|
|
model TypebotSetting {
|
|
id String @id @default(cuid())
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
typebotIdFallback String? @db.VarChar(100)
|
|
ignoreJids Json?
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
Fallback Typebot? @relation(fields: [typebotIdFallback], references: [id])
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String @unique
|
|
}
|
|
|
|
model Media {
|
|
id String @id @default(cuid())
|
|
fileName String @unique @db.VarChar(500)
|
|
type String @db.VarChar(100)
|
|
mimetype String @db.VarChar(100)
|
|
createdAt DateTime? @default(now()) @db.Date
|
|
Message Message @relation(fields: [messageId], references: [id], onDelete: Cascade)
|
|
messageId String @unique
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
}
|
|
|
|
model OpenaiCreds {
|
|
id String @id @default(cuid())
|
|
name String? @unique @db.VarChar(255)
|
|
apiKey String? @unique @db.VarChar(255)
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
OpenaiAssistant OpenaiBot[]
|
|
OpenaiSetting OpenaiSetting?
|
|
}
|
|
|
|
model OpenaiBot {
|
|
id String @id @default(cuid())
|
|
enabled Boolean @default(true) @db.Boolean
|
|
botType OpenaiBotType
|
|
assistantId String? @db.VarChar(255)
|
|
model String? @db.VarChar(100)
|
|
systemMessages Json? @db.JsonB
|
|
assistantMessages Json? @db.JsonB
|
|
userMessages Json? @db.JsonB
|
|
maxTokens Int? @db.Integer
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
ignoreJids Json?
|
|
triggerType TriggerType?
|
|
triggerOperator TriggerOperator?
|
|
triggerValue String?
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
OpenaiCreds OpenaiCreds @relation(fields: [openaiCredsId], references: [id], onDelete: Cascade)
|
|
openaiCredsId String
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
OpenaiSession OpenaiSession[]
|
|
OpenaiSetting OpenaiSetting[]
|
|
}
|
|
|
|
model OpenaiSession {
|
|
id String @id @default(cuid())
|
|
sessionId String @db.VarChar(255)
|
|
remoteJid String @db.VarChar(100)
|
|
status TypebotSessionStatus
|
|
awaitUser Boolean @default(false) @db.Boolean
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
OpenaiBot OpenaiBot @relation(fields: [openaiBotId], references: [id], onDelete: Cascade)
|
|
openaiBotId String
|
|
Message Message[]
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
}
|
|
|
|
model OpenaiSetting {
|
|
id String @id @default(cuid())
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
ignoreJids Json?
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
OpenaiCreds OpenaiCreds? @relation(fields: [openaiCredsId], references: [id])
|
|
openaiCredsId String @unique
|
|
Fallback OpenaiBot? @relation(fields: [openaiIdFallback], references: [id])
|
|
openaiIdFallback String? @db.VarChar(100)
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String @unique
|
|
}
|
|
|
|
model Template {
|
|
id String @id @default(cuid())
|
|
templateId String @unique @db.VarChar(255)
|
|
name String @unique @db.VarChar(255)
|
|
template Json @db.JsonB
|
|
webhookUrl 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 Dify {
|
|
id String @id @default(cuid())
|
|
enabled Boolean @default(true) @db.Boolean
|
|
botType DifyBotType
|
|
apiUrl String? @db.VarChar(255)
|
|
apiKey String? @db.VarChar(255)
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
ignoreJids Json?
|
|
triggerType TriggerType?
|
|
triggerOperator TriggerOperator?
|
|
triggerValue String?
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
DifySession DifySession[]
|
|
DifySetting DifySetting[]
|
|
}
|
|
|
|
model DifySession {
|
|
id String @id @default(cuid())
|
|
sessionId String @db.VarChar(255)
|
|
remoteJid String @db.VarChar(100)
|
|
status TypebotSessionStatus
|
|
awaitUser Boolean @default(false) @db.Boolean
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
Dify Dify @relation(fields: [difyId], references: [id], onDelete: Cascade)
|
|
difyId String
|
|
Message Message[]
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String
|
|
}
|
|
|
|
model DifySetting {
|
|
id String @id @default(cuid())
|
|
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
|
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
|
keepOpen Boolean? @default(false) @db.Boolean
|
|
debounceTime Int? @db.Integer
|
|
ignoreJids Json?
|
|
createdAt DateTime? @default(now()) @db.Timestamp
|
|
updatedAt DateTime @updatedAt @db.Timestamp
|
|
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
|
|
difyIdFallback String? @db.VarChar(100)
|
|
Instance Instance @relation(fields: [instanceId], references: [id], onDelete: Cascade)
|
|
instanceId String @unique
|
|
}
|