feat: zentrale API für json und jsmock + Diagramm-Doku aktualisiert
- Neue API /api/cpl/getDigitalOutputsHandler.ts implementiert (vereint json + jsmock) - fetchDigitalOutputsService.ts auf zentrale API umgestellt (weniger Code, klarere Struktur) - Nur production-Modus lädt weiterhin Skript /CPL?/CPL/SERVICE/digitalOutputs.js - README_digitalOutputs.md überarbeitet: - Diagrammtyp („flowchart“, Datenflussdiagramm) explizit benannt - API-Endpunkte konsolidiert dargestellt - CHANGELOG.md um neue API-Struktur und Dokumentationsänderung ergänzt
This commit is contained in:
47
pages/api/cpl/getDigitalOutputsHandler.ts
Normal file
47
pages/api/cpl/getDigitalOutputsHandler.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
// /pages/api/cpl/getDigitalOutputsJsonHandler.ts
|
||||
|
||||
import { NextApiRequest, NextApiResponse } from "next";
|
||||
import path from "path";
|
||||
import fs from "fs/promises";
|
||||
|
||||
export default async function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse
|
||||
) {
|
||||
const mode = process.env.NEXT_PUBLIC_CPL_MODE ?? "json";
|
||||
|
||||
if (mode === "json") {
|
||||
// Lese JSON-Datei z. B. digitalOutputsMockData.json
|
||||
const filePath = path.join(
|
||||
process.cwd(),
|
||||
"mocks/api/SERVICE/digitalOutputsMockData.json"
|
||||
);
|
||||
const content = await fs.readFile(filePath, "utf-8");
|
||||
const data = JSON.parse(content);
|
||||
return res.status(200).json(data);
|
||||
}
|
||||
|
||||
if (mode === "jsmock") {
|
||||
// Lese Datei und extrahiere window-Variablen aus .js-Datei
|
||||
const filePath = path.join(
|
||||
process.cwd(),
|
||||
"mocks/device-cgi-simulator/SERVICE/digitalOutputsMockData.js"
|
||||
);
|
||||
const fileContent = await fs.readFile(filePath, "utf-8");
|
||||
|
||||
const stateMatch = fileContent.match(/win_da_state\s*=\s*\[([^\]]*)\]/);
|
||||
const labelMatch = fileContent.match(
|
||||
/win_da_bezeichnung\s*=\s*\[([^\]]*)\]/
|
||||
);
|
||||
|
||||
const win_da_state =
|
||||
stateMatch?.[1]?.split(",").map((x) => parseInt(x.trim())) || [];
|
||||
const win_da_bezeichnung =
|
||||
labelMatch?.[1]?.split(",").map((x) => x.trim().replace(/["']/g, "")) ||
|
||||
[];
|
||||
|
||||
return res.status(200).json({ win_da_state, win_da_bezeichnung });
|
||||
}
|
||||
|
||||
return res.status(400).json({ error: "Unsupported mode" });
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// /pages/api/cpl/getDigitalOutputsJsonHandler.ts
|
||||
|
||||
import { NextApiRequest, NextApiResponse } from "next";
|
||||
import path from "path";
|
||||
import fs from "fs/promises";
|
||||
|
||||
export default async function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse
|
||||
) {
|
||||
const filePath = path.join(
|
||||
process.cwd(),
|
||||
"mocks",
|
||||
"api",
|
||||
"SERVICE",
|
||||
"digitalOutputsMockData.json"
|
||||
);
|
||||
|
||||
try {
|
||||
const data = await fs.readFile(filePath, "utf-8");
|
||||
|
||||
res.setHeader("Content-Type", "text/javascript");
|
||||
res.status(200).send(data);
|
||||
} catch (error) {
|
||||
res.status(404).json({ error: "File not found" });
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
// /pages/api/fake-cpl/SERVICE/fetchDigitalOutputsAPIHandler.ts
|
||||
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
export default function handler(req, res) {
|
||||
const filePath = path.join(
|
||||
process.cwd(),
|
||||
"mocks",
|
||||
"device-cgi-simulator",
|
||||
"SERVICE",
|
||||
"digitalOutputsMockData.js"
|
||||
);
|
||||
|
||||
try {
|
||||
const content = fs.readFileSync(filePath, "utf-8");
|
||||
|
||||
const win_da_state = extractArray(content, "win_da_state");
|
||||
const win_da_bezeichnung = extractArray(content, "win_da_bezeichnung");
|
||||
|
||||
return res.status(200).json({
|
||||
win_da_state,
|
||||
win_da_bezeichnung,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("❌ Fehler beim Lesen der JS-Mock-Datei:", err);
|
||||
return res.status(500).json({ error: "Fehler beim Lesen der Mock-Datei" });
|
||||
}
|
||||
}
|
||||
|
||||
// 🔧 Hilfsfunktion: Extrahiert Array aus JS-Datei
|
||||
function extractArray(content: string, varName: string): any[] {
|
||||
const match = content.match(
|
||||
new RegExp(`${varName}\\s*=\\s*\\[(.*?)\\];`, "s")
|
||||
);
|
||||
if (!match) {
|
||||
console.warn(`⚠️ ${varName} nicht gefunden`);
|
||||
return [];
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(`[${match[1]}]`);
|
||||
} catch (e) {
|
||||
console.warn(`⚠️ Fehler beim Parsen von ${varName}:`, e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
// /pages/api/fake-cpl/SERVICE/updateDigitalOutputsHandler.ts
|
||||
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
export default function handler(req, res) {
|
||||
if (req.method !== "GET") {
|
||||
return res.status(405).json({ error: "Nur GET erlaubt" });
|
||||
}
|
||||
|
||||
const id = parseInt(req.query.id as string);
|
||||
const value = parseInt(req.query.value as string);
|
||||
|
||||
const filePath = path.join(
|
||||
process.cwd(),
|
||||
"mocks",
|
||||
"device-cgi-simulator",
|
||||
"SERVICE",
|
||||
"digitalOutputsMockData.js"
|
||||
);
|
||||
|
||||
try {
|
||||
let content = fs.readFileSync(filePath, "utf-8");
|
||||
|
||||
const match = content.match(/win_da_state\s*=\s*\[(.*?)\];/s);
|
||||
const currentState = match ? JSON.parse(`[${match[1]}]`) : [];
|
||||
|
||||
if (isNaN(id) || isNaN(value) || id < 1 || id > currentState.length) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ error: `Ungültige Parameter: id=${id}, value=${value}` });
|
||||
}
|
||||
|
||||
// Wert aktualisieren
|
||||
currentState[id - 1] = value;
|
||||
|
||||
const updatedContent =
|
||||
`win_da_state = [${currentState.join(", ")}];\n` +
|
||||
`win_da_bezeichnung = ["A1", "A2", "A3", "A4"]; // fest für Demo`;
|
||||
|
||||
fs.writeFileSync(filePath, updatedContent, "utf-8");
|
||||
|
||||
res.status(200).json({ success: true, win_da_state: currentState });
|
||||
} catch (err) {
|
||||
console.error("❌ Fehler beim Schreiben der Mock-Datei:", err);
|
||||
res.status(500).json({ error: "Fehler beim Schreiben der Mock-Datei" });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user