Added Health Ednpoint for Devices
Added Offline Sync for times
This commit is contained in:
58
backend/src/routes/devices/management.ts
Normal file
58
backend/src/routes/devices/management.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { FastifyInstance } from "fastify";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { db } from "../../../db"; // <--- PFAD ZUR DB INSTANZ ANPASSEN
|
||||
import { devices } from "../../../db/schema";
|
||||
|
||||
// Definition, was wir vom ESP32 erwarten
|
||||
interface HealthBody {
|
||||
terminal_id: string;
|
||||
ip_address?: string;
|
||||
wifi_rssi?: number;
|
||||
uptime_seconds?: number;
|
||||
heap_free?: number;
|
||||
[key: string]: any; // Erlaubt weitere Felder
|
||||
}
|
||||
|
||||
export default async function devicesManagementRoutes(server: FastifyInstance) {
|
||||
server.post<{ Body: HealthBody }>(
|
||||
"/health",
|
||||
async (req, reply) => {
|
||||
try {
|
||||
const data = req.body;
|
||||
|
||||
// 1. Validierung: Haben wir eine ID?
|
||||
if (!data.terminal_id) {
|
||||
console.warn("Health Check ohne terminal_id empfangen:", data);
|
||||
return reply.code(400).send({ error: "terminal_id missing" });
|
||||
}
|
||||
|
||||
console.log(`Health Ping von Device ${data.terminal_id}`, data);
|
||||
|
||||
// 2. Datenbank Update
|
||||
// Wir suchen das Gerät mit der passenden externalId
|
||||
const result = await db
|
||||
.update(devices)
|
||||
.set({
|
||||
lastSeen: new Date(), // Setzt Zeit auf JETZT
|
||||
lastDebugInfo: data // Speichert das ganze JSON
|
||||
})
|
||||
.where(eq(devices.externalId, data.terminal_id))
|
||||
.returning({ id: devices.id }); // Gibt ID zurück, falls gefunden
|
||||
|
||||
// 3. Checken ob Gerät gefunden wurde
|
||||
if (result.length === 0) {
|
||||
console.warn(`Unbekanntes Terminal versucht Health Check: ${data.terminal_id}`);
|
||||
// Optional: 404 senden oder ignorieren (Sicherheit)
|
||||
return reply.code(404).send({ error: "Device not found" });
|
||||
}
|
||||
|
||||
// Alles OK
|
||||
return reply.code(200).send({ status: "ok" });
|
||||
|
||||
} catch (err: any) {
|
||||
console.error("Health Check Error:", err);
|
||||
return reply.code(500).send({ error: err.message });
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user