const path = require('path'); const fs = require('fs'); const Database = require('better-sqlite3'); const dataDir = path.join(__dirname, '..', 'data'); const dbPath = path.join(dataDir, 'candles.db'); const migrationsFolder = path.join(__dirname, '..', 'drizzle'); // Ensure data directory exists if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); } // Check for inconsistent DB state before migrating if (fs.existsSync(dbPath)) { try { const checkDb = new Database(dbPath); const hasDrizzleMigrations = checkDb.prepare( "SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'" ).get(); const hasAnyTables = checkDb.prepare( "SELECT name FROM sqlite_master WHERE type='table' AND name != '__drizzle_migrations'" ).get(); checkDb.close(); if (hasAnyTables && !hasDrizzleMigrations) { console.log('⚠️ Database has tables but no migration tracking. Recreating...'); fs.unlinkSync(dbPath); } } catch { console.log('⚠️ Database file is corrupted. Recreating...'); try { fs.unlinkSync(dbPath); } catch {} } } // Run migrations using better-sqlite3 directly const { drizzle } = require('drizzle-orm/better-sqlite3'); const { migrate } = require('drizzle-orm/better-sqlite3/migrator'); const sqlite = new Database(dbPath); const db = drizzle(sqlite); try { migrate(db, { migrationsFolder }); console.log('✅ Database migrations completed'); } catch (error) { console.error('❌ Migration failed:', error); process.exit(1); } finally { sqlite.close(); }