87 lines
1.7 KiB
JavaScript
87 lines
1.7 KiB
JavaScript
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,
|
|
};
|