feat(api): Zeitraum und Eingang als Pflichtparameter für AnalogInputs-API eingeführt

- API-Handler für /api/cpl/getAnalogInputsHistory überarbeitet
- `zeitraum` (DIA0, DIA1, DIA2) und `eingang` (1–8) sind jetzt Pflichtfelder
- Bei fehlenden oder ungültigen Parametern strukturierte Fehlerantwort mit Beispielen
- Daten werden nun gezielt pro Eingang und Zeitraum geladen (z. B. AE3 + DIA1)
- Bessere Fehlerbehandlung bei nicht vorhandenen Dateien
This commit is contained in:
ISA
2025-07-11 11:50:15 +02:00
parent 1f1e532233
commit 2d3e070830
8 changed files with 160 additions and 34 deletions

View File

@@ -1,43 +1,77 @@
// /pages/api/cpl/getAnalogInputsHistory.ts
import path from "path";
import fs from "fs/promises";
import type { NextApiRequest, NextApiResponse } from "next";
const erlaubteZeitraeume = ["DIA0", "DIA1", "DIA2"];
const erlaubteEingaenge = [1, 2, 3, 4, 5, 6, 7, 8];
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
res: NextApiResponse<unknown>
) {
const { zeitraum, eingang } = req.query;
const zeitraumKey =
typeof zeitraum === "string" && erlaubteZeitraeume.includes(zeitraum)
? zeitraum
: null;
const eingangId =
typeof eingang === "string" && !isNaN(Number(eingang))
? Number(eingang)
: null;
// ❌ Fehlerhafte Anfrage
if (!zeitraumKey || !eingangId || !erlaubteEingaenge.includes(eingangId)) {
return res.status(400).json({
error: "❌ Ungültige oder unvollständige Anfrage.",
erwartet: {
zeitraum: "Pflichtfeld. Erlaubt: DIA0 | DIA1 | DIA2",
eingang: "Pflichtfeld. Erlaubt: 1 bis 8 (entspricht AE1 bis AE8)",
},
beispiele: [
"/api/cpl/getAnalogInputsHistory?zeitraum=DIA1&eingang=3",
"/api/cpl/getAnalogInputsHistory?zeitraum=DIA2&eingang=7",
"http://localhost:3000/api/cpl/getAnalogInputsHistory?eingang=1&zeitraum=DIA0",
],
hinweis:
"Die Antwort enthält ein Array mit Messwertobjekten für den gewählten Eingang und Zeitraum.",
});
}
try {
const result: Record<number, unknown[]> = {};
const filePath = path.join(
process.cwd(),
"mocks",
"device-cgi-simulator",
"chartsData",
"analogInputs",
`${eingangId}`,
`${zeitraumKey}.json`
);
for (let i = 1; i <= 8; i++) {
const filePath = path.join(
process.cwd(),
"mocks",
"device-cgi-simulator",
"chartsData",
"analogInputs",
`${i}`,
`DIA0.json`
);
console.log(`Lade Mock-Daten für analogInput${i} von: ${filePath}`);
const fileContent = await fs.readFile(filePath, "utf-8");
const daten = JSON.parse(fileContent);
try {
const fileContent = await fs.readFile(filePath, "utf-8");
result[99 + i] = JSON.parse(fileContent); // z. B. 100 für AE1, 101 für AE2
} catch (error) {
console.warn(
`Mock-Datei für analogInput${i} nicht gefunden oder fehlerhaft.`,
error
);
result[99 + i] = [];
}
}
res.status(200).json(result);
res.status(200).json({
eingang: eingangId,
zeitraum: zeitraumKey,
beschreibung:
zeitraumKey === "DIA0"
? "Alle Messwerte"
: zeitraumKey === "DIA1"
? "Stündlich aggregierte Messwerte"
: "Täglich aggregierte Messwerte",
daten,
});
} catch (error) {
console.error("Fehler beim Laden der analogen Eingänge (Mock):", error);
res.status(500).json({ error: "Fehler beim Laden der Mock-Daten." });
console.error(
`❌ Datei nicht gefunden für Eingang ${eingangId} und Zeitraum ${zeitraumKey}:`,
error
);
res.status(404).json({
error: `Keine Daten gefunden für Eingang ${eingangId} mit Zeitraum ${zeitraumKey}.`,
});
}
}