feat: add suppression list (#192)

This commit is contained in:
KM Koushik
2025-07-27 23:51:59 +10:00
committed by GitHub
parent a28f132428
commit e6dd8673b4
20 changed files with 2026 additions and 58 deletions

View File

@@ -0,0 +1,25 @@
-- CreateEnum
CREATE TYPE "SuppressionReason" AS ENUM ('HARD_BOUNCE', 'COMPLAINT', 'MANUAL');
-- AlterEnum
ALTER TYPE "EmailStatus" ADD VALUE 'SUPPRESSED';
-- CreateTable
CREATE TABLE "SuppressionList" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"teamId" INTEGER NOT NULL,
"reason" "SuppressionReason" NOT NULL,
"source" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "SuppressionList_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "SuppressionList_teamId_email_key" ON "SuppressionList"("teamId", "email");
-- AddForeignKey
ALTER TABLE "SuppressionList" ADD CONSTRAINT "SuppressionList_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -116,6 +116,7 @@ model Team {
dailyEmailUsages DailyEmailUsage[]
subscription Subscription[]
invites TeamInvite[]
SuppressionList SuppressionList[]
}
model TeamInvite {
@@ -222,6 +223,7 @@ enum EmailStatus {
COMPLAINED
FAILED
CANCELLED
SUPPRESSED
}
model Email {
@@ -283,6 +285,12 @@ enum UnsubscribeReason {
UNSUBSCRIBED
}
enum SuppressionReason {
HARD_BOUNCE
COMPLAINT
MANUAL
}
model Contact {
id String @id @default(cuid())
firstName String?
@@ -387,3 +395,17 @@ model CumulatedMetrics {
@@id([teamId, domainId])
}
model SuppressionList {
id String @id @default(cuid())
email String // The suppressed email address
teamId Int // Team that owns this suppression
reason SuppressionReason // Why it was suppressed
source String? // Source email ID that triggered suppression
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
@@unique([teamId, email])
}