first commit
CI / lint-and-test (push) Canceled after 0s

This commit is contained in:
Alberto-Audrix committed 2026-07-28 08:55:05 +07:00
commit 32a36cceff
444 files changed
+67186

No files matched your search

+77
View File
@@ -0,0 +1,77 @@
const fs = require('fs');
const path = require('path');
const { query } = require('./db');
async function runMigrations() {
try {
await query(`
CREATE TABLE IF NOT EXISTS schema_migrations (
id SERIAL PRIMARY KEY,
filename VARCHAR(255) UNIQUE NOT NULL,
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`);
await query(`
CREATE INDEX IF NOT EXISTS idx_schema_migrations_filename
ON schema_migrations(filename)
`);
// Get all migration files
const migrationsDir = path.join(__dirname, 'migrations');
if (!fs.existsSync(migrationsDir)) {
return;
}
const files = fs
.readdirSync(migrationsDir)
.filter((f) => f.endsWith('.sql'))
.sort(); // Run in alphabetical order (001_, 002_, etc.)
if (files.length === 0) {
return;
}
let appliedCount = 0;
let skippedCount = 0;
// Process each migration file
for (const file of files) {
// Check if migration has already been applied
const checkResult = await query('SELECT * FROM schema_migrations WHERE filename = $1', [
file,
]);
if (checkResult.rows.length > 0) {
skippedCount++;
continue;
}
// Apply new migration
try {
const filePath = path.join(migrationsDir, file);
const sql = fs.readFileSync(filePath, 'utf8');
// Execute migration SQL
await query(sql);
// Record migration as applied
await query('INSERT INTO schema_migrations (filename) VALUES ($1)', [file]);
appliedCount++;
} catch (error) {
console.error(` ❌ ${file} - FAILED`);
console.error(` Error: ${error.message}`);
throw error; // Stop on first error
}
}
} catch (error) {
console.error('\n' + '='.repeat(50));
console.error('❌ Migration failed!');
console.error('='.repeat(50));
console.error(error);
console.error('\n⚠️ Server startup aborted due to migration failure\n');
throw error; // Re-throw to prevent server from starting
}
}
module.exports = { runMigrations };