Files
CPLv4.0/pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts
2025-06-19 12:27:00 +02:00

89 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// /pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method !== "POST") {
return res.status(405).json({ error: "Method not allowed" });
}
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"analogInputsMockData.js"
);
try {
const { updates } = req.body;
if (!Array.isArray(updates)) {
return res.status(400).json({ error: "Ungültige Datenstruktur" });
}
const raw = await fs.readFile(filePath, "utf-8");
// Teile den Inhalt in:
// 1. Vor dem ersten var
// 2. Die var-Zuweisungen (Arrays)
// 3. Nach dem letzten var (z.B. Block-Kommentare)
const varRegex = /var\s+(\w+)\s*=\s*\[([\s\S]*?)\];/g;
let match;
const updateMap: Record<string, string[]> = {};
const variableLines: string[] = [];
let matchStartIndexes: number[] = [];
while ((match = varRegex.exec(raw)) !== null) {
const [fullMatch, key, valuesBlock] = match;
const values = valuesBlock
.split(",")
.map((v) => v.trim())
.filter((v) => v.length > 0);
updateMap[key] = values;
variableLines.push(fullMatch);
matchStartIndexes.push(match.index);
}
// Kommentare vor und nach den Variablen extrahieren
const firstVarIndex = matchStartIndexes[0] ?? 0;
const lastVarMatch = variableLines[variableLines.length - 1] ?? "";
const lastVarIndex = raw.lastIndexOf(lastVarMatch);
const commentsBefore = raw.slice(0, firstVarIndex).trim();
const commentsAfter = raw.slice(lastVarIndex + lastVarMatch.length).trim();
// Updates anwenden
for (const { key, index, value } of updates) {
if (!updateMap[key]) {
console.warn(`⚠️ Schlüssel '${key}' fehlt wird übersprungen`);
continue;
}
updateMap[key][index] =
typeof value === "string" ? `"${value}"` : value.toString();
}
// Arrays immer einzeilig schreiben
const variablesBlock = Object.entries(updateMap)
.map(([key, values]) => `var ${key} = [${values.join(", ")}];`)
.join("\n");
const finalContent =
[commentsBefore, variablesBlock, commentsAfter]
.filter(Boolean)
.join("\n\n") + "\n";
await fs.writeFile(filePath, finalContent, "utf-8");
res.status(200).json({ message: "Mockdaten gespeichert." });
} catch (err) {
console.error("❌ Fehler beim Schreiben:", err);
res.status(500).json({ error: "Interner Serverfehler" });
}
}