fix(chat): resolve merged-away user ids so DMs to merged contacts don't vanish
Root cause of 'messages to some contacts disappear (gone after reopen)': the #2 account merge deletes the merged-away user row. Any lingering reference to that old id — a cached contact, an in-flight DM — then saved against a dead recipient / 404'd on thread fetch, so messages silently vanished. - New user_aliases table records old_id -> survivor on every merge (mergeInto). - users.resolve(id) follows the redirect. - DM send (recipient), thread fetch (with), and read now resolve() the peer id, so a stale id transparently routes to the surviving account. Fixes future merges fully. Contacts merged BEFORE this (no alias recorded) may need a one-off data check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -225,6 +225,16 @@ try { db.exec("ALTER TABLE users ADD COLUMN status TEXT NOT NULL DEFAULT 'active
|
||||
// Provisioning matches on it to keep one Biz Connect account per person (#2 account merge).
|
||||
try { db.exec('ALTER TABLE users ADD COLUMN bizgaze_user_id TEXT'); } catch (e) { /* exists */ }
|
||||
try { db.exec('CREATE INDEX IF NOT EXISTS idx_users_bizgaze_user_id ON users(bizgaze_user_id)'); } catch (e) { /* exists */ }
|
||||
// When two accounts merge (#2), the merged-away row is deleted. This records old_id -> survivor so
|
||||
// any lingering reference to the old id (a cached contact, an in-flight DM) resolves to the survivor
|
||||
// instead of hitting a deleted user (which made messages to merged contacts silently vanish).
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS user_aliases (
|
||||
old_id TEXT PRIMARY KEY,
|
||||
user_id TEXT NOT NULL,
|
||||
team_id TEXT,
|
||||
created_at INTEGER NOT NULL
|
||||
)`);
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS polls (
|
||||
id TEXT PRIMARY KEY,
|
||||
|
||||
Reference in New Issue
Block a user