forked from xiangwang25/whale-town-end-v2
feat: integrate invitation access, world NPCs, and deployment
This commit is contained in:
40
scripts/run_migrations.ts
Normal file
40
scripts/run_migrations.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { readFile } from 'fs/promises';
|
||||
import { resolve } from 'path';
|
||||
import { createConnection } from 'mysql2/promise';
|
||||
|
||||
const MIGRATIONS = [
|
||||
'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;
|
||||
});
|
||||
Reference in New Issue
Block a user