| import { v4 as uuidv4 } from "uuid"; |
| import { getAdapter } from "../driver.js"; |
| import { parseJson, stringifyJson } from "../helpers/jsonCol.js"; |
|
|
| function rowToCombo(row) { |
| if (!row) return null; |
| return { |
| id: row.id, |
| name: row.name, |
| kind: row.kind, |
| models: parseJson(row.models, []), |
| createdAt: row.createdAt, |
| updatedAt: row.updatedAt, |
| }; |
| } |
|
|
| export async function getCombos() { |
| const db = await getAdapter(); |
| const rows = db.all(`SELECT * FROM combos ORDER BY createdAt ASC`); |
| return rows.map(rowToCombo); |
| } |
|
|
| export async function getComboById(id) { |
| const db = await getAdapter(); |
| const row = db.get(`SELECT * FROM combos WHERE id = ?`, [id]); |
| return rowToCombo(row); |
| } |
|
|
| export async function getComboByName(name) { |
| const db = await getAdapter(); |
| const row = db.get(`SELECT * FROM combos WHERE name = ?`, [name]); |
| return rowToCombo(row); |
| } |
|
|
| export async function createCombo(data) { |
| const db = await getAdapter(); |
| const now = new Date().toISOString(); |
| const combo = { |
| id: uuidv4(), |
| name: data.name, |
| kind: data.kind || null, |
| models: data.models || [], |
| createdAt: now, |
| updatedAt: now, |
| }; |
| db.run( |
| `INSERT INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)`, |
| [combo.id, combo.name, combo.kind, stringifyJson(combo.models), combo.createdAt, combo.updatedAt] |
| ); |
| return combo; |
| } |
|
|
| export async function updateCombo(id, data) { |
| const db = await getAdapter(); |
| let result = null; |
| db.transaction(() => { |
| const row = db.get(`SELECT * FROM combos WHERE id = ?`, [id]); |
| if (!row) return; |
| const merged = { ...rowToCombo(row), ...data, updatedAt: new Date().toISOString() }; |
| db.run( |
| `UPDATE combos SET name = ?, kind = ?, models = ?, updatedAt = ? WHERE id = ?`, |
| [merged.name, merged.kind, stringifyJson(merged.models || []), merged.updatedAt, id] |
| ); |
| result = merged; |
| }); |
| return result; |
| } |
|
|
| export async function deleteCombo(id) { |
| const db = await getAdapter(); |
| const res = db.run(`DELETE FROM combos WHERE id = ?`, [id]); |
| return (res?.changes ?? 0) > 0; |
| } |
|
|