63 lines
1.4 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
}
|