39 lines
1.6 KiB
JavaScript
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 };
|
|
}
|