42 lines
1.2 KiB
TypeScript
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;
|
|
});
|