api9nin / src /lib /db /repos /nodesRepo.js
github-actions[bot]
deploy from github actions 2026-06-18
c8ae75d
Raw
History Blame Contribute Delete
2.59 kB
import { v4 as uuidv4 } from "uuid";
import { getAdapter } from "../driver.js";
import { parseJson, stringifyJson } from "../helpers/jsonCol.js";
function rowToNode(row) {
if (!row) return null;
const extra = parseJson(row.data, {});
return {
...extra,
id: row.id,
type: row.type,
name: row.name,
createdAt: row.createdAt,
updatedAt: row.updatedAt,
};
}
function nodeToRow(n) {
const { id, type, name, createdAt, updatedAt, ...rest } = n;
return {
id,
type: type ?? null,
name: name ?? null,
data: stringifyJson(rest),
createdAt,
updatedAt,
};
}
function upsert(db, n) {
const r = nodeToRow(n);
db.run(
`INSERT INTO providerNodes(id, type, name, data, createdAt, updatedAt)
VALUES(?, ?, ?, ?, ?, ?)
ON CONFLICT(id) DO UPDATE SET
type=excluded.type, name=excluded.name, data=excluded.data, updatedAt=excluded.updatedAt`,
[r.id, r.type, r.name, r.data, r.createdAt, r.updatedAt]
);
}
export async function getProviderNodes(filter = {}) {
const db = await getAdapter();
const where = [];
const params = [];
if (filter.type) { where.push("type = ?"); params.push(filter.type); }
const sql = `SELECT * FROM providerNodes${where.length ? ` WHERE ${where.join(" AND ")}` : ""}`;
return db.all(sql, params).map(rowToNode);
}
export async function getProviderNodeById(id) {
const db = await getAdapter();
return rowToNode(db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]));
}
export async function createProviderNode(data) {
const db = await getAdapter();
const now = new Date().toISOString();
const node = {
id: data.id || uuidv4(),
type: data.type,
name: data.name,
prefix: data.prefix,
apiType: data.apiType,
baseUrl: data.baseUrl,
createdAt: now,
updatedAt: now,
};
upsert(db, node);
return node;
}
export async function updateProviderNode(id, data) {
const db = await getAdapter();
let result = null;
db.transaction(() => {
const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]);
if (!row) return;
const merged = { ...rowToNode(row), ...data, updatedAt: new Date().toISOString() };
upsert(db, merged);
result = merged;
});
return result;
}
export async function deleteProviderNode(id) {
const db = await getAdapter();
let removed = null;
db.transaction(() => {
const row = db.get(`SELECT * FROM providerNodes WHERE id = ?`, [id]);
if (!row) return;
removed = rowToNode(row);
db.run(`DELETE FROM providerNodes WHERE id = ?`, [id]);
});
return removed;
}