H-337: restore Web widget reply visibility (#64)

* H-337: restore widget reply delivery

* H-337: harden widget conversation ownership

---------

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-20 22:22:27 +08:00
committed by GitHub
co-authored by rogee
parent abb1bed424
commit b31b1b9562
22 changed files with 847 additions and 83 deletions
@@ -0,0 +1,10 @@
UPDATE conversations
SET contact_inbox_id = NULL
WHERE EXISTS (
SELECT 1
FROM widget_conversation_contact_inbox_backfills AS backfills
WHERE backfills.conversation_id = conversations.id
AND backfills.contact_inbox_id = conversations.contact_inbox_id
);
DROP TABLE widget_conversation_contact_inbox_backfills;
@@ -0,0 +1,24 @@
CREATE TABLE widget_conversation_contact_inbox_backfills (
conversation_id BIGINT PRIMARY KEY,
contact_inbox_id BIGINT NOT NULL
);
INSERT INTO widget_conversation_contact_inbox_backfills (conversation_id, contact_inbox_id)
SELECT conversations.id, MIN(contact_inboxes.id)
FROM conversations
JOIN inboxes ON inboxes.id = conversations.inbox_id
JOIN contact_inboxes
ON contact_inboxes.contact_id = conversations.contact_id
AND contact_inboxes.inbox_id = conversations.inbox_id
WHERE conversations.contact_inbox_id IS NULL
AND inboxes.channel_type IN ('web_widget', 'Channel::WebWidget')
GROUP BY conversations.id
HAVING COUNT(contact_inboxes.id) = 1;
UPDATE conversations
SET contact_inbox_id = (
SELECT backfills.contact_inbox_id
FROM widget_conversation_contact_inbox_backfills AS backfills
WHERE backfills.conversation_id = conversations.id
)
WHERE id IN (SELECT conversation_id FROM widget_conversation_contact_inbox_backfills);