127 lines
4.2 KiB
Plaintext
127 lines
4.2 KiB
Plaintext
model TenantInboundAddress {
|
|
id String @id @default(cuid())
|
|
tenantId String
|
|
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
address String @unique
|
|
email Email[]
|
|
}
|
|
|
|
model Email {
|
|
id String @id @default(cuid())
|
|
tenantInboundAddressId String?
|
|
tenantInboundAddress TenantInboundAddress? @relation(fields: [tenantInboundAddressId], references: [id], onDelete: Cascade)
|
|
messageId String @unique
|
|
type String // inbound, outbound
|
|
date DateTime
|
|
subject String
|
|
fromEmail String
|
|
fromName String?
|
|
toEmail String
|
|
toName String?
|
|
textBody String
|
|
htmlBody String
|
|
reads EmailRead[]
|
|
attachments EmailAttachment[]
|
|
cc EmailCc[]
|
|
}
|
|
|
|
model EmailRead {
|
|
id String @id @default(cuid())
|
|
createdAt DateTime @default(now())
|
|
emailId String
|
|
email Email @relation(fields: [emailId], references: [id], onDelete: Cascade)
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model EmailCc {
|
|
id String @id @default(cuid())
|
|
emailId String
|
|
toEmail String
|
|
toName String?
|
|
email Email @relation(fields: [emailId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model EmailAttachment {
|
|
id String @id @default(cuid())
|
|
emailId String
|
|
name String
|
|
type String
|
|
length Int
|
|
content String
|
|
publicUrl String?
|
|
storageBucket String?
|
|
storageProvider String?
|
|
email Email @relation(fields: [emailId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model EmailSender {
|
|
id String @id @default(cuid())
|
|
tenantId String?
|
|
provider String
|
|
stream String
|
|
apiKey String
|
|
apiSecret String?
|
|
fromEmail String
|
|
fromName String?
|
|
replyToEmail String?
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id])
|
|
campaigns Campaign[]
|
|
outboundEmails OutboundEmail[]
|
|
}
|
|
|
|
model Campaign {
|
|
id String @id @default(cuid())
|
|
tenantId String?
|
|
emailSenderId String
|
|
name String
|
|
subject String
|
|
htmlBody String
|
|
textBody String?
|
|
status String @default("draft")
|
|
track Boolean
|
|
sentAt DateTime?
|
|
emailSender EmailSender @relation(fields: [emailSenderId], references: [id])
|
|
recipients OutboundEmail[]
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model OutboundEmail {
|
|
id String @id @default(cuid())
|
|
createdAt DateTime @default(now())
|
|
tenantId String?
|
|
tenant Tenant? @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
campaignId String?
|
|
campaign Campaign? @relation(fields: [campaignId], references: [id], onDelete: Cascade)
|
|
contactRowId String?
|
|
contactRow Row? @relation(fields: [contactRowId], references: [id])
|
|
email String
|
|
fromSenderId String
|
|
isPreview Boolean?
|
|
error String?
|
|
sentAt DateTime?
|
|
deliveredAt DateTime?
|
|
bouncedAt DateTime?
|
|
spamComplainedAt DateTime?
|
|
unsubscribedAt DateTime?
|
|
fromSender EmailSender @relation(fields: [fromSenderId], references: [id])
|
|
opens OutboundEmailOpen[]
|
|
clicks OutboundEmailClick[]
|
|
}
|
|
|
|
model OutboundEmailOpen {
|
|
id String @id @default(cuid())
|
|
createdAt DateTime @default(now())
|
|
firstOpen Boolean
|
|
outboundEmailId String
|
|
outboundEmail OutboundEmail @relation(fields: [outboundEmailId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model OutboundEmailClick {
|
|
id String @id @default(cuid())
|
|
createdAt DateTime @default(now())
|
|
link String
|
|
outboundEmailId String
|
|
outboundEmail OutboundEmail @relation(fields: [outboundEmailId], references: [id], onDelete: Cascade)
|
|
}
|