feat: harden platform workflows and UI governance
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
-- Historical receipts created before channel-aware matching could be attached to
|
||||
-- the right message but retain the wrong channel when two channels shared the
|
||||
-- same supplier account. Only repair rows that have exactly one submit record
|
||||
-- for the same message, upstream message id and destination phone number.
|
||||
WITH unique_receipt_submit AS (
|
||||
SELECT
|
||||
receipt.id AS receipt_id,
|
||||
MIN(submit."channelId") AS correct_channel_id
|
||||
FROM "SmsReceiptRecord" receipt
|
||||
JOIN "SmsMessageRecord" message
|
||||
ON message.id = receipt."messageRecordId"
|
||||
JOIN "SmsSubmitRecord" submit
|
||||
ON submit."messageRecordId" = message.id
|
||||
AND submit."gatewayMessageId" = receipt."gatewayMessageId"
|
||||
WHERE receipt."receiptStatus" = 'delivered'
|
||||
AND receipt."phoneNumber" = message."phoneNumber"
|
||||
GROUP BY receipt.id
|
||||
HAVING COUNT(submit.id) = 1
|
||||
)
|
||||
UPDATE "SmsReceiptRecord" receipt
|
||||
SET "channelId" = matched.correct_channel_id
|
||||
FROM unique_receipt_submit matched
|
||||
WHERE receipt.id = matched.receipt_id
|
||||
AND receipt."channelId" IS DISTINCT FROM matched.correct_channel_id;
|
||||
|
||||
-- Aggregate the corrected successful receipt onto the message master record.
|
||||
-- DISTINCT ON chooses the first successful receipt for segmented messages while
|
||||
-- preserving the original submit/gateway identity of the current attempt.
|
||||
WITH delivered_match AS (
|
||||
SELECT DISTINCT ON (message.id)
|
||||
message.id AS message_record_id,
|
||||
submit."channelId" AS channel_id,
|
||||
receipt."gatewayMessageId" AS gateway_message_id,
|
||||
receipt."rawStatus" AS raw_status,
|
||||
receipt."errorCode" AS error_code,
|
||||
receipt."errorMessage" AS error_message,
|
||||
receipt."deliveredAt" AS delivered_at
|
||||
FROM "SmsMessageRecord" message
|
||||
JOIN "SmsReceiptRecord" receipt
|
||||
ON receipt."messageRecordId" = message.id
|
||||
AND receipt."receiptStatus" = 'delivered'
|
||||
AND receipt."phoneNumber" = message."phoneNumber"
|
||||
JOIN "SmsSubmitRecord" submit
|
||||
ON submit."messageRecordId" = message.id
|
||||
AND submit."gatewayMessageId" = receipt."gatewayMessageId"
|
||||
AND submit."channelId" = receipt."channelId"
|
||||
WHERE message."gatewayMessageId" = receipt."gatewayMessageId"
|
||||
ORDER BY message.id, receipt."deliveredAt" ASC, receipt.id ASC
|
||||
)
|
||||
UPDATE "SmsMessageRecord" message
|
||||
SET
|
||||
status = 'delivered',
|
||||
"receiptStatus" = 'delivered',
|
||||
"receiptRawStatus" = matched.raw_status,
|
||||
"channelId" = matched.channel_id,
|
||||
"gatewayMessageId" = matched.gateway_message_id,
|
||||
"errorCode" = matched.error_code,
|
||||
"errorMessage" = matched.error_message,
|
||||
"deliveredAt" = matched.delivered_at,
|
||||
"timeoutAt" = NULL,
|
||||
"updatedAt" = CURRENT_TIMESTAMP
|
||||
FROM delivered_match matched
|
||||
WHERE message.id = matched.message_record_id
|
||||
AND (
|
||||
message.status IS DISTINCT FROM 'delivered'
|
||||
OR message."receiptStatus" IS DISTINCT FROM 'delivered'
|
||||
OR message."deliveredAt" IS DISTINCT FROM matched.delivered_at
|
||||
OR message."channelId" IS DISTINCT FROM matched.channel_id
|
||||
);
|
||||
Reference in New Issue
Block a user