72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
const Database = require('better-sqlite3');
|
|
const schema = require('./schema');
|
|
const {getEnv, SQLITE, logger } = require('@nexusai/shared');
|
|
|
|
let db; // Declare db variable in a scope accessible to all functions
|
|
|
|
function getDB() {
|
|
if (!db) {
|
|
const path = getEnv('SQLITE_PATH', SQLITE.DEFAULT_PATH);
|
|
db = new Database(path);
|
|
|
|
db.pragma('journal_mode = WAL');
|
|
db.pragma('foreign_keys = ON');
|
|
|
|
db.exec(schema);
|
|
|
|
try{
|
|
db.exec(`ALTER TABLE sessions ADD COLUMN name TEXT`)
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE sessions ADD COLUMN project_id INTEGER REFERENCES projects(id)`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_id)`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE projects ADD COLUMN isolated INTEGER NOT NULL DEFAULT 0`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE projects ADD COLUMN notes TEXT`); // ← add this
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE projects ADD COLUMN system_prompt TEXT`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE summaries ADD COLUMN project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`ALTER TABLE summaries ADD COLUMN token_count INTEGER`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_summaries_project ON summaries(project_id)`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_summaries_session ON summaries(session_id)`);
|
|
} catch {}
|
|
|
|
try {
|
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_summaries_project ON summaries(project_id)`);
|
|
} catch {}
|
|
|
|
// Sync FTS index with any existing episodes data
|
|
db.exec(`INSERT OR REPLACE INTO episodes_fts(rowid, user_message, ai_response)
|
|
SELECT id, user_message, ai_response FROM episodes`);
|
|
|
|
logger.info(`Connected to SQLite database at ${path}`);
|
|
}
|
|
return db;
|
|
}
|
|
|
|
module.exports = {
|
|
getDB
|
|
}; |