← back to Jill Website
src/migrations/migrate.ts
58 lines
import * as fs from 'fs';
import * as path from 'path';
import { getPool, testConnection, closePool } from '../config/database';
async function runMigrations(): Promise<void> {
console.log('Starting database migrations...');
try {
// Test connection first
await testConnection();
const pool = getPool();
const migrationsDir = path.join(__dirname);
const migrationFiles = fs
.readdirSync(migrationsDir)
.filter(file => file.endsWith('.sql'))
.sort();
console.log(`Found ${migrationFiles.length} migration files`);
for (const file of migrationFiles) {
console.log(`Running migration: ${file}`);
const filePath = path.join(migrationsDir, file);
const sql = fs.readFileSync(filePath, 'utf-8');
try {
await pool.query(sql);
console.log(`✓ Successfully ran migration: ${file}`);
} catch (error) {
console.error(`✗ Failed to run migration ${file}:`, error);
throw error;
}
}
console.log('All migrations completed successfully!');
} catch (error) {
console.error('Migration failed:', error);
throw error;
} finally {
await closePool();
}
}
// Run migrations if executed directly
if (require.main === module) {
runMigrations()
.then(() => {
console.log('Migration process completed');
process.exit(0);
})
.catch((error) => {
console.error('Migration process failed:', error);
process.exit(1);
});
}
export { runMigrations };