9router/src/lib/db/repos/disabledModelsRepo.js
decolua bee8dad946 feat(db): migrate from lowdb to SQLite with repos pattern
- Add modular DB layer (adapters, migrations, repos, helpers)
- Replace localDb/usageDb/requestDetailsDb monoliths with repos
- Add Tailscale tunnel integration & status check API
- Add /api/cli-tools/all-statuses aggregated endpoint
- Add settingsStore (Zustand) and mitm/dbReader
- Add DB unit tests (benchmark, concurrent, migration, vs-lowdb)
2026-05-09 17:48:20 +07:00

56 lines
2.2 KiB
JavaScript

import { getAdapter } from "../driver.js";
import { parseJson, stringifyJson } from "../helpers/jsonCol.js";
const SCOPE = "disabledModels";
export async function getDisabledModels() {
const db = await getAdapter();
const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [SCOPE]);
const out = {};
for (const r of rows) out[r.key] = parseJson(r.value, []);
return out;
}
export async function getDisabledByProvider(providerAlias) {
const db = await getAdapter();
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
return row ? (parseJson(row.value, []) || []) : [];
}
// Atomic read-merge-write inside a transaction (no JS yield mid-transaction).
export async function disableModels(providerAlias, ids) {
if (!providerAlias || !Array.isArray(ids)) return;
const db = await getAdapter();
db.transaction(() => {
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
const current = row ? (parseJson(row.value, []) || []) : [];
const merged = [...new Set([...current, ...ids])];
db.run(
`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,
[SCOPE, providerAlias, stringifyJson(merged)]
);
});
}
export async function enableModels(providerAlias, ids) {
if (!providerAlias) return;
const db = await getAdapter();
db.transaction(() => {
if (!Array.isArray(ids) || ids.length === 0) {
db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
return;
}
const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
const current = row ? (parseJson(row.value, []) || []) : [];
const removeSet = new Set(ids);
const next = current.filter((id) => !removeSet.has(id));
if (next.length === 0) {
db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [SCOPE, providerAlias]);
} else {
db.run(
`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`,
[SCOPE, providerAlias, stringifyJson(next)]
);
}
});
}