feat: filter SMS routes by channel sensitive words
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
CREATE TABLE "ChannelSensitiveWord" (
|
||||
"id" TEXT PRIMARY KEY, "channelId" TEXT NOT NULL, "word" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'active', "remark" TEXT NOT NULL DEFAULT '',
|
||||
"version" INTEGER NOT NULL DEFAULT 1, "createdBy" TEXT NOT NULL, "updatedBy" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "ChannelSensitiveWord_channelId_fkey" FOREIGN KEY ("channelId") REFERENCES "SmsChannel"("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "ChannelSensitiveWord_status_check" CHECK ("status" IN ('active','inactive','deleted')),
|
||||
CONSTRAINT "ChannelSensitiveWord_word_check" CHECK (char_length("word") BETWEEN 1 AND 200)
|
||||
);
|
||||
CREATE UNIQUE INDEX "ChannelSensitiveWord_channelId_word_key" ON "ChannelSensitiveWord"("channelId","word");
|
||||
CREATE INDEX "ChannelSensitiveWord_channelId_status_idx" ON "ChannelSensitiveWord"("channelId","status");
|
||||
CREATE TABLE "SmsChannelSensitiveDecision" (
|
||||
"id" TEXT PRIMARY KEY, "messageRecordId" TEXT NOT NULL, "routeAttemptId" TEXT NOT NULL,
|
||||
"decidedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "snapshot" JSONB NOT NULL,
|
||||
CONSTRAINT "SmsChannelSensitiveDecision_messageRecordId_fkey" FOREIGN KEY ("messageRecordId") REFERENCES "SmsMessageRecord"("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
CREATE UNIQUE INDEX "SmsChannelSensitiveDecision_routeAttemptId_key" ON "SmsChannelSensitiveDecision"("routeAttemptId");
|
||||
CREATE INDEX "SmsChannelSensitiveDecision_messageRecordId_decidedAt_idx" ON "SmsChannelSensitiveDecision"("messageRecordId","decidedAt");
|
||||
ALTER TABLE "SmsMessageRecord" ADD COLUMN "channelWordFinalizationPending" BOOLEAN NOT NULL DEFAULT false;
|
||||
CREATE INDEX "SmsMessageRecord_channelWordFinalizationPending_idx" ON "SmsMessageRecord"("updatedAt") WHERE "channelWordFinalizationPending" = true;
|
||||
@@ -266,6 +266,32 @@ model PhoneCarrierRule {
|
||||
@@index([status, priority])
|
||||
}
|
||||
|
||||
model ChannelSensitiveWord {
|
||||
id String @id @default(cuid())
|
||||
channelId String
|
||||
channel SmsChannel @relation(fields: [channelId], references: [id])
|
||||
word String
|
||||
status String @default("active")
|
||||
remark String @default("")
|
||||
version Int @default(1)
|
||||
createdBy String
|
||||
updatedBy String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
@@unique([channelId, word])
|
||||
@@index([channelId, status])
|
||||
}
|
||||
|
||||
model SmsChannelSensitiveDecision {
|
||||
id String @id @default(cuid())
|
||||
messageRecordId String
|
||||
messageRecord SmsMessageRecord @relation(fields: [messageRecordId], references: [id])
|
||||
routeAttemptId String @unique
|
||||
decidedAt DateTime @default(now())
|
||||
snapshot Json
|
||||
@@index([messageRecordId, decidedAt])
|
||||
}
|
||||
|
||||
model SensitiveWord {
|
||||
id String @id @default(cuid())
|
||||
word String @unique
|
||||
@@ -881,6 +907,7 @@ model AuditRecord {
|
||||
}
|
||||
|
||||
model SmsChannel {
|
||||
sensitiveWords ChannelSensitiveWord[]
|
||||
id String @id @default(cuid())
|
||||
code String @unique
|
||||
name String
|
||||
@@ -1799,6 +1826,8 @@ model SmsDrainageDecision {
|
||||
}
|
||||
|
||||
model SmsMessageRecord {
|
||||
channelWordDecisions SmsChannelSensitiveDecision[]
|
||||
channelWordFinalizationPending Boolean @default(false)
|
||||
monitorFacts SendingMonitorFact[]
|
||||
id String @id @default(cuid())
|
||||
tenantId String?
|
||||
|
||||
Reference in New Issue
Block a user