Files
klangkiste/gui/backend/db/index.js
T
2026-01-13 19:44:02 +00:00

63 lines
1.4 KiB
JavaScript

import fs from 'fs';
import path from 'path';
import sqlite3 from 'sqlite3';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const dbPath = path.join(__dirname, 'klangkiste.sqlite');
const schemaPath = path.join(__dirname, 'schema.sql');
export const db = new sqlite3.Database(dbPath);
db.exec('PRAGMA foreign_keys = ON;');
export function run(query, params = []) {
return new Promise((resolve, reject) => {
db.run(query, params, function onRun(error) {
if (error) {
reject(error);
return;
}
resolve({ changes: this.changes, lastID: this.lastID });
});
});
}
export function get(query, params = []) {
return new Promise((resolve, reject) => {
db.get(query, params, (error, row) => {
if (error) {
reject(error);
return;
}
resolve(row || null);
});
});
}
export function all(query, params = []) {
return new Promise((resolve, reject) => {
db.all(query, params, (error, rows) => {
if (error) {
reject(error);
return;
}
resolve(rows || []);
});
});
}
export async function ensureSchema() {
const schema = fs.readFileSync(schemaPath, 'utf-8');
return new Promise((resolve, reject) => {
db.exec(schema, (error) => {
if (error) {
reject(error);
return;
}
resolve(true);
});
});
}