fix: reassemble inbound CMPP long messages
This commit is contained in:
+61
@@ -0,0 +1,61 @@
|
||||
CREATE TABLE "CmppInboundLongMessage" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenantId" TEXT NOT NULL,
|
||||
"applicationId" TEXT NOT NULL,
|
||||
"groupKey" TEXT NOT NULL,
|
||||
"account" TEXT NOT NULL,
|
||||
"srcId" TEXT,
|
||||
"phoneNumbers" JSONB NOT NULL,
|
||||
"concatReference" INTEGER NOT NULL,
|
||||
"segmentTotal" INTEGER NOT NULL,
|
||||
"msgFmt" INTEGER NOT NULL,
|
||||
"messageId" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'collecting',
|
||||
"response" JSONB,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"completedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "CmppInboundLongMessage_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "CmppInboundLongMessageSegment" (
|
||||
"id" TEXT NOT NULL,
|
||||
"groupId" TEXT NOT NULL,
|
||||
"segmentIndex" INTEGER NOT NULL,
|
||||
"sequenceId" TEXT,
|
||||
"content" TEXT NOT NULL,
|
||||
"contentHash" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "CmppInboundLongMessageSegment_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "CmppInboundLongMessage_messageId_key"
|
||||
ON "CmppInboundLongMessage"("messageId");
|
||||
|
||||
CREATE INDEX "CmppInboundLongMessage_groupKey_status_createdAt_idx"
|
||||
ON "CmppInboundLongMessage"("groupKey", "status", "createdAt");
|
||||
|
||||
CREATE INDEX "CmppInboundLongMessage_applicationId_status_expiresAt_idx"
|
||||
ON "CmppInboundLongMessage"("applicationId", "status", "expiresAt");
|
||||
|
||||
CREATE UNIQUE INDEX "CmppInboundLongMessageSegment_groupId_segmentIndex_key"
|
||||
ON "CmppInboundLongMessageSegment"("groupId", "segmentIndex");
|
||||
|
||||
CREATE INDEX "CmppInboundLongMessageSegment_sequenceId_idx"
|
||||
ON "CmppInboundLongMessageSegment"("sequenceId");
|
||||
|
||||
ALTER TABLE "CmppInboundLongMessage"
|
||||
ADD CONSTRAINT "CmppInboundLongMessage_tenantId_fkey"
|
||||
FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "CmppInboundLongMessage"
|
||||
ADD CONSTRAINT "CmppInboundLongMessage_applicationId_fkey"
|
||||
FOREIGN KEY ("applicationId") REFERENCES "SmsApplication"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "CmppInboundLongMessageSegment"
|
||||
ADD CONSTRAINT "CmppInboundLongMessageSegment_groupId_fkey"
|
||||
FOREIGN KEY ("groupId") REFERENCES "CmppInboundLongMessage"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -47,6 +47,7 @@ model Tenant {
|
||||
gatewaySubmitDeadLetters GatewaySubmitDeadLetter[]
|
||||
openApiRequests OpenApiRequest[]
|
||||
httpWebhookEvents HttpWebhookEvent[]
|
||||
cmppInboundLongMessages CmppInboundLongMessage[]
|
||||
}
|
||||
|
||||
model EnterpriseCertification {
|
||||
@@ -400,6 +401,7 @@ model SmsApplication {
|
||||
httpWebhookEndpoints HttpWebhookEndpoint[]
|
||||
httpWebhookEvents HttpWebhookEvent[]
|
||||
dailyUsages SmsApplicationDailyUsage[]
|
||||
inboundLongMessages CmppInboundLongMessage[]
|
||||
|
||||
@@index([tenantId, status])
|
||||
}
|
||||
@@ -1541,6 +1543,49 @@ model SmsMessageSegmentAudit {
|
||||
@@index([submitStatus, receiptStatus])
|
||||
}
|
||||
|
||||
model CmppInboundLongMessage {
|
||||
id String @id @default(cuid())
|
||||
tenantId String
|
||||
applicationId String
|
||||
groupKey String
|
||||
account String
|
||||
srcId String?
|
||||
phoneNumbers Json
|
||||
concatReference Int
|
||||
segmentTotal Int
|
||||
msgFmt Int
|
||||
messageId String @unique
|
||||
status String @default("collecting")
|
||||
response Json?
|
||||
expiresAt DateTime
|
||||
completedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
tenant Tenant @relation(fields: [tenantId], references: [id])
|
||||
application SmsApplication @relation(fields: [applicationId], references: [id], onDelete: Cascade)
|
||||
segments CmppInboundLongMessageSegment[]
|
||||
|
||||
@@index([groupKey, status, createdAt])
|
||||
@@index([applicationId, status, expiresAt])
|
||||
}
|
||||
|
||||
model CmppInboundLongMessageSegment {
|
||||
id String @id @default(cuid())
|
||||
groupId String
|
||||
segmentIndex Int
|
||||
sequenceId String?
|
||||
content String
|
||||
contentHash String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
group CmppInboundLongMessage @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([groupId, segmentIndex])
|
||||
@@index([sequenceId])
|
||||
}
|
||||
|
||||
model SmsReceiptRecord {
|
||||
id String @id @default(cuid())
|
||||
tenantId String?
|
||||
|
||||
Reference in New Issue
Block a user