feat: harden sessions and track downstream acknowledgements

This commit is contained in:
hectorzhao
2026-07-14 14:18:43 +08:00
parent 3d37adcc9f
commit 8c03663f24
43 changed files with 1733 additions and 150 deletions
@@ -0,0 +1,32 @@
ALTER TABLE "SmsApplication"
ADD COLUMN "downstreamReceiptRetryEnabled" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "downstreamUplinkRetryEnabled" BOOLEAN NOT NULL DEFAULT true;
ALTER TABLE "CmppDownstreamDelivery"
ADD COLUMN "retryEnabled" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "sentAt" TIMESTAMP(3),
ADD COLUMN "acknowledgedAt" TIMESTAMP(3),
ADD COLUMN "ackDeadlineAt" TIMESTAMP(3),
ADD COLUMN "ackResult" INTEGER,
ADD COLUMN "ackSequenceId" TEXT,
ADD COLUMN "ackMessageId" TEXT,
ADD COLUMN "connectionId" TEXT;
UPDATE "CmppDownstreamDelivery"
SET
"status" = 'unconfirmed',
"sentAt" = "deliveredAt",
"deliveredAt" = NULL,
"lastError" = '历史记录仅确认 Gateway 已写出,未留存 CMPP_DELIVER_RESP'
WHERE "status" = 'delivered';
UPDATE "CmppDownstreamDelivery"
SET "retryEnabled" = CASE
WHEN "deliveryType" = 'uplink' THEN app."downstreamUplinkRetryEnabled"
ELSE app."downstreamReceiptRetryEnabled"
END
FROM "SmsApplication" app
WHERE app.id = "CmppDownstreamDelivery"."applicationId";
CREATE INDEX "CmppDownstreamDelivery_status_ackDeadlineAt_idx"
ON "CmppDownstreamDelivery"("status", "ackDeadlineAt");
+11
View File
@@ -360,6 +360,8 @@ model SmsApplication {
queuePriority String @default("normal")
maxPhonesPerTask Int @default(1000000)
templateMismatchMode String @default("reject")
downstreamReceiptRetryEnabled Boolean @default(true)
downstreamUplinkRetryEnabled Boolean @default(true)
status String @default("active")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -1188,8 +1190,16 @@ model CmppDownstreamDelivery {
deliveryType String
status String @default("pending")
payload Json
retryEnabled Boolean @default(true)
retryCount Int @default(0)
nextRetryAt DateTime?
sentAt DateTime?
acknowledgedAt DateTime?
ackDeadlineAt DateTime?
ackResult Int?
ackSequenceId String?
ackMessageId String?
connectionId String?
deliveredAt DateTime?
lastError String?
createdAt DateTime @default(now())
@@ -1204,6 +1214,7 @@ model CmppDownstreamDelivery {
@@index([messageId])
@@index([messageRecordId])
@@index([deliveryType, status])
@@index([status, ackDeadlineAt])
}
model GatewaySubmitDeadLetter {