Files
CPLv4.0/pages/api/cpl/updateDigitalOutputsHandler.ts
ISA dbb38cc7d8 feat: Digitale Ausgänge vollständig implementiert (Lesen & Schreiben in allen Modi)
- Unterstützung für drei Modi implementiert: json, jsmock und production
- fetchDigitalOutputsService.ts erkennt NEXT_PUBLIC_CPL_MODE und lädt Daten je nach Umgebung
- API-Handler /api/cpl/updateDigitalOutputsHandler verarbeitet POST-Anfragen für json und jsmock
- In production wird Statusänderung per Redirect (window.location.href) an das CPL gesendet
- Redux-Slice für digitale Ausgänge vollständig angebunden
- UI (DigitalOutputsWidget.tsx) zeigt Status und ermöglicht das Umschalten
- Dokumentation als README_digitalOutputs_final.md mit UML-Diagrammen ergänzt
- CHANGELOG.md auf Version 1.6.417 aktualisiert
2025-06-19 09:01:49 +02:00

76 lines
2.1 KiB
TypeScript

// /pages/api/cpl/updateDigitalOutputshandler.ts
import fs from "fs";
import path from "path";
export default function handler(req, res) {
if (req.method !== "POST") {
return res.status(405).json({ message: "Nur POST erlaubt" });
}
const { outputs } = req.body;
if (!Array.isArray(outputs)) {
return res.status(400).json({ error: "Ungültige Datenstruktur" });
}
const mode = process.env.NEXT_PUBLIC_CPL_MODE;
const jsonData = {
win_da_state: outputs.map((o) => (o.status ? 1 : 0)),
win_da_bezeichnung: outputs.map((o) => o.label),
};
let filePath = "";
if (mode === "json") {
filePath = path.join(
process.cwd(),
"mocks",
"api",
"SERVICE",
"digitalOutputsMockData.json"
);
try {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, JSON.stringify(jsonData, null, 2), "utf-8");
console.log("✅ Datei (JSON) geschrieben:", filePath);
res.status(200).json({ success: true });
} catch (err) {
console.error("❌ Fehler beim Schreiben der JSON-Datei:", err);
res.status(500).json({ error: "Fehler beim Schreiben der Datei" });
}
} else if (mode === "jsmock") {
filePath = path.join(
process.cwd(),
"mocks",
"device-cgi-simulator",
"SERVICE",
"digitalOutputsMockData.js"
);
const jsContent =
`win_da_state = [${jsonData.win_da_state.join(", ")}];\n` +
`win_da_bezeichnung = [${jsonData.win_da_bezeichnung
.map((s) => `"${s}"`)
.join(", ")}];\n`;
try {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, jsContent, "utf-8");
console.log("✅ Datei (JS-Mock) geschrieben:", filePath);
res.status(200).json({ success: true });
} catch (err) {
console.error("❌ Fehler beim Schreiben der JS-Datei:", err);
res.status(500).json({ error: "Fehler beim Schreiben der JS-Datei" });
}
} else {
res
.status(403)
.json({ error: "In production ist Schreiben nicht erlaubt" });
}
}