Files
whale-town-end-v2/scripts/run_migrations.ts

42 lines
1.2 KiB
TypeScript

import { readFile } from 'fs/promises';
import { resolve } from 'path';
import { createConnection } from 'mysql2/promise';
const MIGRATIONS = [
'src/core/db/user_wallets/add-adventure-state.sql',
'src/business/invitation/migrations/create-invitation-codes.sql',
];
function requiredEnv(name: string): string {
const value = String(process.env[name] || '').trim();
if (!value) throw new Error(`Missing required environment variable: ${name}`);
return value;
}
async function main(): Promise<void> {
const connection = await createConnection({
host: requiredEnv('DB_HOST'),
port: Number(process.env.DB_PORT || 3306),
user: requiredEnv('DB_USERNAME'),
password: requiredEnv('DB_PASSWORD'),
database: requiredEnv('DB_NAME'),
multipleStatements: true,
charset: 'utf8mb4',
});
try {
for (const migration of MIGRATIONS) {
const sql = await readFile(resolve(process.cwd(), migration), 'utf8');
await connection.query(sql);
console.log(`Applied migration: ${migration}`);
}
} finally {
await connection.end();
}
}
main().catch((error) => {
console.error(error instanceof Error ? error.message : error);
process.exitCode = 1;
});