#!/usr/bin/env node /** * 只对确认为空的新库执行:按当前结构建表、建余额视图,并把现有 migration 记为已执行。 */ import { recreateBillingViews } from '@drama/billing' import { applyCurrentSchema, createDb } from '@drama/db' import { databaseUrlFromArgs } from './env-file.js' import { migrationTableName, vokoMigrationConfig } from './migration-config.js' import { vokoTargetTables } from './schema.js' const db = createDb({ url: databaseUrlFromArgs(process.argv.slice(2)), pool: { min: 1, max: 1 } }) try { const [rows] = await db.raw('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() LIMIT 1') if (rows.length > 0) throw new Error(`voko database is not empty: ${rows[0].TABLE_NAME}`) const createdTables = await applyCurrentSchema(db, vokoTargetTables) await recreateBillingViews(db) const [, pending] = await db.migrate.list(vokoMigrationConfig) const baselined = pending.map((migration) => migration.file) if (baselined.length > 0) { const now = new Date() await db(migrationTableName).insert(baselined.map((name) => ({ name, batch: 1, migration_time: now }))) } console.log(JSON.stringify({ ok: true, target: '@voko/server', mode: 'init-current-schema', created_tables: createdTables, baselined_migrations: baselined }, null, 2)) } finally { await db.destroy() }