-- Migration 008: Direct Message tables. -- Adds dm_participants and dm_open_state tables for DM channel support. -- The channels.type column is TEXT with no CHECK constraint, so 'dm' is -- already a valid value — no schema alteration needed. CREATE TABLE IF NOT EXISTS dm_participants ( channel_id INTEGER NOT NULL REFERENCES channels(id) ON DELETE CASCADE, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, PRIMARY KEY (channel_id, user_id) ); CREATE INDEX IF NOT EXISTS idx_dm_participants_user ON dm_participants(user_id); CREATE TABLE IF NOT EXISTS dm_open_state ( user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, channel_id INTEGER NOT NULL REFERENCES channels(id) ON DELETE CASCADE, opened_at TEXT NOT NULL DEFAULT (datetime('now')), PRIMARY KEY (user_id, channel_id) );