Files
AtreidesAssetsFree/server/data/bus.js
T
2026-10-29 11:57:29 +01:00

39 lines
1.6 KiB
JavaScript

// Generated, do not edit. sha256:8bd40013f30173c4395fe482f251f8d822b2781e68ecf02d880e6748f3e5817a
import * as db from '../db.js';
import { CONFIG } from '../../shared/config.js';
import { nowIso } from './_shared.js';
import { takeChanges } from './_events.js';
export function flushChanges() {
const namen = takeChanges();
if (!namen.length) return [];
const at = nowIso();
for (const naam of namen) {
db.run(`INSERT INTO BusSignal (name, occurredAt) VALUES (?,?)`, [naam, at]);
}
pruneChanges();
return namen;
}
export function pruneChanges(uren = CONFIG.BUS.RETENTION_HOURS) {
const grens = new Date(Date.now() - Math.max(1, Number(uren) || CONFIG.BUS.RETENTION_HOURS) * 3600_000)
.toISOString();
const r = db.one(`SELECT COUNT(*) AS n FROM BusSignal WHERE occurredAt < ?`, [grens]);
const aantal = r ? r.n : 0;
if (aantal) db.run(`DELETE FROM BusSignal WHERE occurredAt < ?`, [grens]);
return aantal;
}
export function changesSince(cursor) {
const vanaf = Number.isInteger(cursor) && cursor >= 0 ? cursor : null;
const grens = db.one(`SELECT MIN(id) AS eerste, MAX(id) AS laatste FROM BusSignal`);
const laatste = grens && grens.laatste != null ? grens.laatste : (vanaf ?? 0);
if (vanaf === null) return { cursor: laatste, names: [], reset: false };
const eerste = grens ? grens.eerste : null;
if (eerste != null && vanaf < eerste - 1) return { cursor: laatste, names: [], reset: true };
const rijen = db.all(`SELECT DISTINCT name FROM BusSignal WHERE id > ? ORDER BY name`, [vanaf]);
return { cursor: laatste, names: rijen.map(r => r.name), reset: false };
}