refactor: improve SQLite migration handling and update .gitignore

This commit is contained in:
cita
2026-03-07 00:29:56 +08:00
parent 1e12ec5211
commit 98a2936416
4 changed files with 63 additions and 14 deletions
+34 -9
View File
@@ -2,14 +2,39 @@ import Database from 'better-sqlite3';
import { drizzle } from 'drizzle-orm/better-sqlite3';
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
import { config } from '../config.js';
import { mkdirSync } from 'fs';
import { dirname } from 'path';
import { mkdirSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const dbPath = `${config.dataDir}/hub.db`;
mkdirSync(dirname(dbPath), { recursive: true });
function resolveSqliteDbPath(): string {
const raw = (config.dbUrl || '').trim();
if (!raw) return resolve(`${config.dataDir}/hub.db`);
if (raw === ':memory:') return raw;
if (raw.startsWith('file://')) {
const parsed = new URL(raw);
return decodeURIComponent(parsed.pathname);
}
if (raw.startsWith('sqlite://')) {
return resolve(raw.slice('sqlite://'.length).trim());
}
return resolve(raw);
}
const sqlite = new Database(dbPath);
const db = drizzle(sqlite);
migrate(db, { migrationsFolder: './drizzle' });
sqlite.close();
console.log('Migration complete.');
function resolveMigrationsFolder(): string {
return resolve(dirname(fileURLToPath(import.meta.url)), '../../../drizzle');
}
export function runSqliteMigrations(): void {
const dbPath = resolveSqliteDbPath();
if (dbPath !== ':memory:') {
mkdirSync(dirname(dbPath), { recursive: true });
}
const sqlite = new Database(dbPath);
const db = drizzle(sqlite);
migrate(db, { migrationsFolder: resolveMigrationsFolder() });
sqlite.close();
console.log('Migration complete.');
}
runSqliteMigrations();