import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import mysql from 'mysql2/promise'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export function isUmsDatabaseConfigured() { return Boolean( process.env.UMS_DATABASE_URL || (process.env.UMS_MYSQL_HOST && process.env.UMS_MYSQL_DATABASE), ); } function poolOptions() { return { waitForConnections: true, connectionLimit: Math.max(1, Number(process.env.UMS_MYSQL_POOL_SIZE ?? 10)), queueLimit: 0, timezone: 'Z', }; } export function createUmsPool() { if (!isUmsDatabaseConfigured()) { throw new Error('UMS MySQL 未配置,请设置 UMS_DATABASE_URL 或 UMS_MYSQL_*'); } if (process.env.UMS_DATABASE_URL) { return mysql.createPool({ uri: process.env.UMS_DATABASE_URL, ...poolOptions() }); } return mysql.createPool({ host: process.env.UMS_MYSQL_HOST ?? 'localhost', port: Number(process.env.UMS_MYSQL_PORT ?? 3306), user: process.env.UMS_MYSQL_USER ?? 'boot', password: process.env.UMS_MYSQL_PASSWORD ?? '', database: process.env.UMS_MYSQL_DATABASE ?? 'memind_user_model', ...poolOptions(), }); } export async function runUmsSchema(pool) { const schemaPath = path.join(__dirname, '..', 'schemas', 'memind_user_model-v0.sql'); const sql = fs.readFileSync(schemaPath, 'utf8'); const statements = sql .split(';') .map((statement) => statement .split('\n') .filter((line) => !line.trim().startsWith('--')) .join('\n') .trim(), ) .filter(Boolean); for (const statement of statements) { await pool.query(statement); } }