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");