fix: harden upstream and downstream receipt delivery

This commit is contained in:
hectorzhao
2026-07-25 23:32:13 +08:00
parent 5018167696
commit 54617c927e
18 changed files with 1797 additions and 779 deletions
@@ -0,0 +1,86 @@
CREATE TABLE "CmppDownstreamDeliveryAttempt" (
"id" TEXT NOT NULL,
"deliveryId" TEXT NOT NULL,
"attemptKey" TEXT NOT NULL,
"attemptNo" INTEGER NOT NULL,
"connectionId" TEXT,
"sequenceId" TEXT,
"messageId" TEXT,
"status" TEXT NOT NULL,
"sentAt" TIMESTAMP(3),
"ackDeadlineAt" TIMESTAMP(3),
"acknowledgedAt" TIMESTAMP(3),
"ackResult" INTEGER,
"failureType" TEXT,
"errorMessage" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CmppDownstreamDeliveryAttempt_pkey" PRIMARY KEY ("id")
);
CREATE TABLE "UpstreamReceiptInbox" (
"id" TEXT NOT NULL,
"receiptKey" TEXT NOT NULL,
"incomingChannelId" TEXT NOT NULL,
"incomingConnectionId" TEXT,
"upstreamAccount" TEXT NOT NULL,
"upstreamHost" TEXT NOT NULL,
"upstreamPort" INTEGER NOT NULL,
"protocol" TEXT NOT NULL,
"protocolVersion" TEXT NOT NULL,
"provisionalMessageId" TEXT,
"sequenceId" INTEGER,
"gatewayMessageId" TEXT NOT NULL,
"phoneNumber" TEXT,
"receiptStatus" TEXT NOT NULL,
"rawStatus" TEXT NOT NULL,
"errorCode" TEXT,
"errorMessage" TEXT,
"deliveredAt" TIMESTAMP(3) NOT NULL,
"receivedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"status" TEXT NOT NULL DEFAULT 'pending',
"matchedMessageRecordId" TEXT,
"matchedSubmitRecordId" TEXT,
"matchedChannelId" TEXT,
"attemptCount" INTEGER NOT NULL DEFAULT 0,
"nextRetryAt" TIMESTAMP(3),
"lastError" TEXT,
"processedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "UpstreamReceiptInbox_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "CmppDownstreamDeliveryAttempt_attemptKey_key"
ON "CmppDownstreamDeliveryAttempt"("attemptKey");
CREATE INDEX "CmppDownstreamDeliveryAttempt_deliveryId_attemptNo_idx"
ON "CmppDownstreamDeliveryAttempt"("deliveryId", "attemptNo");
CREATE INDEX "CmppDownstreamDeliveryAttempt_status_ackDeadlineAt_idx"
ON "CmppDownstreamDeliveryAttempt"("status", "ackDeadlineAt");
CREATE INDEX "CmppDownstreamDeliveryAttempt_connectionId_sequenceId_idx"
ON "CmppDownstreamDeliveryAttempt"("connectionId", "sequenceId");
CREATE UNIQUE INDEX "UpstreamReceiptInbox_receiptKey_key"
ON "UpstreamReceiptInbox"("receiptKey");
CREATE INDEX "UpstreamReceiptInbox_status_nextRetryAt_receivedAt_idx"
ON "UpstreamReceiptInbox"("status", "nextRetryAt", "receivedAt");
CREATE INDEX "UpstreamReceiptInbox_gatewayMessageId_phoneNumber_idx"
ON "UpstreamReceiptInbox"("gatewayMessageId", "phoneNumber");
CREATE INDEX "UpstreamReceiptInbox_incomingChannelId_receivedAt_idx"
ON "UpstreamReceiptInbox"("incomingChannelId", "receivedAt");
CREATE INDEX "UpstreamReceiptInbox_matchedMessageRecordId_idx"
ON "UpstreamReceiptInbox"("matchedMessageRecordId");
ALTER TABLE "CmppDownstreamDeliveryAttempt"
ADD CONSTRAINT "CmppDownstreamDeliveryAttempt_deliveryId_fkey"
FOREIGN KEY ("deliveryId") REFERENCES "CmppDownstreamDelivery"("id")
ON DELETE CASCADE ON UPDATE CASCADE;