/** * Database Migrations Runner * Runs automatically on app startup */ import { drizzle } from 'drizzle-orm/mysql2' import { migrate } from 'drizzle-orm/mysql2/migrator' import mysql from 'mysql2/promise' export async function runMigrations() { console.log('🔄 Running database migrations...') const connection = await mysql.createConnection({ host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT || '3306'), user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, }) const db = drizzle(connection) try { await migrate(db, { migrationsFolder: './drizzle/migrations' }) console.log('✅ Migrations completed successfully') await connection.end() return true } catch (error: any) { // If table already exists, it's not a fatal error const errorMessage = error?.message || String(error) const errorCode = error?.code || error?.cause?.code const errorErrno = error?.errno || error?.cause?.errno if ( errorCode === 'ER_TABLE_EXISTS_ERROR' || errorErrno === 1050 || errorMessage.includes('already exists') ) { console.log('⚠️ Tables already exist, skipping migrations') await connection.end() return true } console.error('❌ Migration failed:', error) await connection.end() throw error } } // Run if executed directly if (import.meta.main) { await runMigrations() process.exit(0) }