Files
test_dashboard/server/db.js
T

65 lines
2.3 KiB
JavaScript
Raw Normal View History

2026-05-20 11:52:18 -04:00
'use strict';
/**
* In-memory test store + JSON-file config persistence.
* No native modules required.
*/
const fs = require('fs');
const path = require('path');
const CONFIG_PATH = path.join(__dirname, 'config.json');
// ── Config ───────────────────────────────────────────────────────────────────
let _config = {};
try {
if (fs.existsSync(CONFIG_PATH)) {
_config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'));
}
} catch { _config = {}; }
function _saveConfig() {
fs.writeFileSync(CONFIG_PATH, JSON.stringify(_config, null, 2));
}
function getConfig(key) { return _config[key] ?? null; }
function setConfig(key, value) { _config[key] = value; _saveConfig(); }
function delConfig(key) { delete _config[key]; _saveConfig(); }
// ── Tests (keyed by full derived ID) ─────────────────────────────────────────
/** @type {Map<string, object>} */
const _tests = new Map();
function upsertTest(test) {
const existing = _tests.get(test.id);
_tests.set(test.id, {
...test,
// Preserve completion state when re-inserting from a target scan
completed: existing ? existing.completed : 0,
completed_at: existing ? existing.completed_at : null,
duration_seconds: existing ? existing.duration_seconds : null,
});
}
function markCompleted(file_id, device, completed_at, duration_seconds) {
for (const [id, test] of _tests) {
if (test.file_id === file_id && (!device || test.device === device)) {
_tests.set(id, { ...test, completed: 1, completed_at, duration_seconds });
}
}
}
function resetByFileIdAndDevice(file_id, device) {
for (const [id, test] of _tests) {
if (test.file_id === file_id && (!device || test.device === device)) {
_tests.set(id, { ...test, completed: 0, completed_at: null, duration_seconds: null });
}
}
}
function clearTests() { _tests.clear(); }
function getAllTests() { return Array.from(_tests.values()); }
module.exports = {
getConfig, setConfig, delConfig,
upsertTest, markCompleted, resetByFileIdAndDevice, clearTests, getAllTests,
};