/** * sys schema 迁移执行器 —— drizzle-kit 生成 SQL,本文件应用(ADR-002:迁移随系统版本)。 */ import { Pool } from 'pg'; import { drizzle } from 'drizzle-orm/node-postgres'; import { migrate } from 'drizzle-orm/node-postgres/migrator'; import { existsSync } from 'node:fs'; import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { loadConfig } from './config.ts'; /** 从本文件位置向上找 db/migrations —— 源码跑与 dist 跑同一套逻辑 */ function findMigrationsFolder(): string { let dir = dirname(fileURLToPath(import.meta.url)); for (let i = 0; i < 8; i += 1) { const candidate = join(dir, 'db', 'migrations'); if (existsSync(candidate)) return candidate; const parent = resolve(dir, '..'); if (parent === dir) break; dir = parent; } throw new Error('找不到 db/migrations —— 先跑 pnpm db:generate'); } export async function runMigrations(): Promise { const config = loadConfig(); const pool = new Pool({ connectionString: config.databaseUrl, max: 2 }); try { const db = drizzle(pool); await migrate(db, { migrationsFolder: findMigrationsFolder(), migrationsSchema: 'sys' }); process.stdout.write('sys schema 迁移完成\n'); } finally { await pool.end(); } } if (import.meta.url === `file://${process.argv[1]}`) { await runMigrations(); }