new raceday and backup

This commit is contained in:
larssand
2026-09-01 07:07:23 +02:00
parent c2bfa97d30
commit f561dd8feb
21 changed files with 1042 additions and 60 deletions

View File

@@ -5,6 +5,7 @@ const { spawn } = require("child_process");
const express = require("express");
const Database = require("better-sqlite3");
const publicTrainingProfile = require("./server/public_training_profile");
const { createBackupService } = require("./server/backup_service");
const PORT = Number(process.env.PORT || 8081);
const HOST = process.env.HOST || "0.0.0.0";
@@ -30,6 +31,7 @@ db.pragma("journal_mode = WAL");
db.pragma("foreign_keys = ON");
initSchema();
const backupService = createBackupService({ db, dataDir: DB_DIR });
const appVersion = {
revision: 1,
updatedAt: new Date().toISOString(),
@@ -99,6 +101,28 @@ app.get("/api/app-version", (_req, res) => {
res.json(appVersion);
});
app.get("/api/backups", (_req, res) => {
try {
res.setHeader("Cache-Control", "no-store");
res.json({ backups: backupService.listBackups() });
} catch (error) {
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
}
});
app.post("/api/backups", async (req, res) => {
try {
const backup = await backupService.createBackup({
reason: req.body?.reason || "manual",
sessionId: req.body?.sessionId || "",
eventId: req.body?.eventId || "",
});
res.status(201).json({ ok: true, backup });
} catch (error) {
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
}
});
app.get("/api/ammc/config", (_req, res) => {
res.json({
config: ammcState.config,