- API-Handler `updateDigitalOutputsHandler` überarbeitet:
- JSON-Dateien werden jetzt korrekt im gültigen Format gespeichert (`{ key: value }`)
- Schreibzugriff im production-Modus blockiert
- JS-Mock-Struktur vorbereitet (noch nicht aktiv getestet)
- Verzeichnisstruktur vereinheitlicht:
- JSON-Mocks unter `/mocks/api/SERVICE/`
- CGI-Platzhalter unter `/public/CPL/`
- JSMock-Ordner für CPL-Simulation vorbereitet (`/mocks/js-simulator/`)
- README.md um Betriebsmodi erweitert (`NEXT_PUBLIC_CPL_MODE` mit `json`, `jsmock`, `production`)
- `.env`-Dateien angepasst zur besseren Modussteuerung
76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
// /pages/api/cpl/updateDigitalOutputs.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",
|
|
"digitaleAusgaengeMockData.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",
|
|
"js-simulator",
|
|
"SERVICE",
|
|
"digitaleAusgaengeMockData.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" });
|
|
}
|
|
}
|