Files
HiveGrid-Wireframes/hivegrid-cloud/prisma/schema/email.prisma
T

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)
}