feat: settings queries
This commit is contained in:
@@ -0,0 +1,33 @@
|
|||||||
|
import { getDb, resetDb } from '../../db';
|
||||||
|
import { getSetting, setSetting, getAllSettings } from '../../db/settings';
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
resetDb();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('settings', () => {
|
||||||
|
it('returns null for a missing key', () => {
|
||||||
|
const db = getDb();
|
||||||
|
expect(getSetting(db, 'missing')).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('sets and gets a value', () => {
|
||||||
|
const db = getDb();
|
||||||
|
setSetting(db, 'model', 'gpt-4o-mini');
|
||||||
|
expect(getSetting(db, 'model')).toBe('gpt-4o-mini');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('overwrites an existing value', () => {
|
||||||
|
const db = getDb();
|
||||||
|
setSetting(db, 'model', 'gpt-4o-mini');
|
||||||
|
setSetting(db, 'model', 'gemini-flash');
|
||||||
|
expect(getSetting(db, 'model')).toBe('gemini-flash');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns all settings as an object', () => {
|
||||||
|
const db = getDb();
|
||||||
|
setSetting(db, 'a', '1');
|
||||||
|
setSetting(db, 'b', '2');
|
||||||
|
expect(getAllSettings(db)).toEqual({ a: '1', b: '2' });
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import type { Database } from 'better-sqlite3';
|
||||||
|
|
||||||
|
export function getSetting(db: Database, key: string): string | null {
|
||||||
|
const row = db.prepare('SELECT value FROM settings WHERE key = ?').get(key) as { value: string } | undefined;
|
||||||
|
return row?.value ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setSetting(db: Database, key: string, value: string): void {
|
||||||
|
db.prepare('INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)').run(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllSettings(db: Database): Record<string, string> {
|
||||||
|
const rows = db.prepare('SELECT key, value FROM settings').all() as Array<{ key: string; value: string }>;
|
||||||
|
return Object.fromEntries(rows.map(r => [r.key, r.value]));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user