Files
SkyArtShop/backend/apply-migration.js
Local Server 017c6376fc updateweb
2025-12-24 00:13:23 -06:00

66 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
/**
* Database Migration Runner
* Applies SQL migration files to the database
*/
const fs = require("fs");
const path = require("path");
const { Pool } = require("pg");
require("dotenv").config();
const pool = new Pool({
host: process.env.DB_HOST || "localhost",
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || "skyartshop",
user: process.env.DB_USER || "skyartapp",
password: process.env.DB_PASSWORD,
});
async function applyMigration(filePath) {
const client = await pool.connect();
try {
console.log(`\n📁 Reading migration: ${path.basename(filePath)}`);
const sql = fs.readFileSync(filePath, "utf8");
console.log("🔄 Applying migration...");
await client.query("BEGIN");
await client.query(sql);
await client.query("COMMIT");
console.log("✅ Migration applied successfully!\n");
} catch (error) {
await client.query("ROLLBACK");
console.error("❌ Migration failed:", error.message);
console.error("\nError details:", error);
process.exit(1);
} finally {
client.release();
}
}
async function main() {
const migrationFile = process.argv[2];
if (!migrationFile) {
console.error("Usage: node apply-migration.js <migration-file.sql>");
process.exit(1);
}
const fullPath = path.resolve(migrationFile);
if (!fs.existsSync(fullPath)) {
console.error(`Migration file not found: ${fullPath}`);
process.exit(1);
}
await applyMigration(fullPath);
await pool.end();
}
main().catch((error) => {
console.error("Fatal error:", error);
process.exit(1);
});