import Database from 'better-sqlite3'; export function runMigrations(db: Database.Database): void { console.log('Checking for database migrations...'); const tables = [ { name: 'messages', columns: [ { name: 'reply_to_id', type: 'TEXT REFERENCES messages(id) ON DELETE SET NULL' } ] }, { name: 'users', columns: [ { name: 'status', type: "TEXT DEFAULT 'offline'" }, { name: 'custom_status', type: 'TEXT' } ] }, { name: 'roles', columns: [ { name: 'permissions', type: 'TEXT' } ] }, { name: 'dm_messages', columns: [ { name: 'edited_at', type: 'INTEGER' }, { name: 'reply_to_id', type: 'TEXT' } ] }, { name: 'attachments', columns: [ { name: 'dm_message_id', type: 'TEXT' } ] }, { name: 'dm_members', columns: [ { name: 'closed', type: 'INTEGER DEFAULT 0' } ] }, { name: 'dm_channels', columns: [ { name: 'owner_id', type: 'TEXT' } ] } ]; for (const table of tables) { const tableInfo = db.pragma(`table_info(${table.name})`) as { name: string }[]; const existingColumns = new Set(tableInfo.map(c => c.name)); for (const column of table.columns) { if (!existingColumns.has(column.name)) { console.log(`Migrating: Adding column ${column.name} to ${table.name}`); try { db.exec(`ALTER TABLE ${table.name} ADD COLUMN ${column.name} ${column.type}`); } catch (error) { console.error(`Failed to add column ${column.name} to ${table.name}:`, error); } } } } console.log('Migrations complete.'); }