mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-15 19:52:54 -06:00

Adds support for MinIO and S3 for storing media files. Modified several files to implement this feature, including package.json, prisma/postgresql-schema.prisma, src/api/integrations/typebot/services/typebot.service.ts, src/api/routes/index.router.ts, src/api/services/channels/whatsapp.baileys.service.ts, and src/config/env.config.ts. Added untracked files for the new S3 integration. Also added a new S3Controller and S3Service for handling S3 related operations. This change allows for more flexible media storage options and enables the use of MinIO or S3 for storing media files.
328 lines
12 KiB
Plaintext
328 lines
12 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 {
|
|
open
|
|
closed
|
|
paused
|
|
}
|
|
|
|
enum TriggerType {
|
|
all
|
|
keyword
|
|
}
|
|
|
|
enum TriggerOperator {
|
|
contains
|
|
equals
|
|
startsWith
|
|
endsWith
|
|
regex
|
|
}
|
|
|
|
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? @unique @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[]
|
|
}
|
|
|
|
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?
|
|
}
|
|
|
|
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 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 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
|
|
}
|