Files
memind/user-model-service/db.mjs
T
john 212ff3ff80 Add User Model Service and Temporal Recall for MeMind V0.1.
Introduce UMS ingest/snapshot pipeline, Context Planner with multi-source recall, runtime context injection, canonical user mapping, and session snapshot loading on auth/me.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 23:25:18 +08:00

58 lines
1.6 KiB
JavaScript

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);
}
}