const fs = require('fs'); const path = require('path'); const sqlite3 = require('sqlite3').verbose(); const getDefaultDbPath = () => { return process.env.PLANT_DB_PATH || path.join(__dirname, '..', 'data', 'greenlns.sqlite'); }; const ensureDbDirectory = (dbPath) => { const directory = path.dirname(dbPath); fs.mkdirSync(directory, { recursive: true }); }; const openDatabase = (dbPath = getDefaultDbPath()) => { ensureDbDirectory(dbPath); return new Promise((resolve, reject) => { const db = new sqlite3.Database(dbPath, (error) => { if (error) { reject(error); return; } resolve(db); }); }); }; const closeDatabase = (db) => { return new Promise((resolve, reject) => { db.close((error) => { if (error) { reject(error); return; } resolve(); }); }); }; const run = (db, sql, params = []) => { return new Promise((resolve, reject) => { db.run(sql, params, function onRun(error) { if (error) { reject(error); return; } resolve({ lastId: this.lastID, changes: this.changes, }); }); }); }; const get = (db, sql, params = []) => { return new Promise((resolve, reject) => { db.get(sql, params, (error, row) => { if (error) { reject(error); return; } resolve(row || null); }); }); }; const all = (db, sql, params = []) => { return new Promise((resolve, reject) => { db.all(sql, params, (error, rows) => { if (error) { reject(error); return; } resolve(rows || []); }); }); }; module.exports = { all, closeDatabase, get, getDefaultDbPath, openDatabase, run, };