feat: gleichzeitige Aktualisierung von TDR-Werten über optimierten API-Handler
- API `/updateTdrSettingsDataAPIHandler` überarbeitet, um mehrere Werte in einem POST zu empfangen - TDR-Dämpfung, Geschwindigkeit und Trigger werden nun in einem Schritt verarbeitet - atomare Dateibearbeitung mit Bereinigung fehlerhafter Endzeilen (z. B. „12h)“) - UI-Komponente `TdrEinstellung.tsx` angepasst auf POST mit Updates-Array
This commit is contained in:
@@ -1,16 +1,13 @@
|
||||
// /pages/api/cpl/updateTdrSettingsDataAPIHandler.ts
|
||||
// pages/api/cpl/updateTdrSettingsDataAPIHandler.ts
|
||||
|
||||
import path from "path";
|
||||
import fs from "fs/promises";
|
||||
|
||||
export default async function handler(req, res) {
|
||||
const { slot, value, key } = req.query;
|
||||
if (slot === undefined || value === undefined) {
|
||||
return res.status(400).json({ error: "Missing slot or value" });
|
||||
}
|
||||
const updates = req.body?.updates;
|
||||
|
||||
if (!slot || !value || !key) {
|
||||
return res.status(400).json({ error: "Missing slot, value, or key" });
|
||||
if (!Array.isArray(updates) || updates.length === 0) {
|
||||
return res.status(400).json({ error: "Missing or invalid updates array" });
|
||||
}
|
||||
|
||||
const filePath = path.join(
|
||||
@@ -19,28 +16,39 @@ export default async function handler(req, res) {
|
||||
);
|
||||
|
||||
try {
|
||||
const fileContent = await fs.readFile(filePath, "utf-8");
|
||||
const regex = new RegExp(`(var\\s+${key}\\s*=\\s*\\[)([^\\]]*)(\\])`);
|
||||
const match = fileContent.match(regex);
|
||||
let fileContent = await fs.readFile(filePath, "utf-8");
|
||||
|
||||
if (!match) {
|
||||
return res
|
||||
.status(404)
|
||||
.json({ error: `Key "${key}" not found in mock data.` });
|
||||
for (const { key, slot, value } of updates) {
|
||||
const regex = new RegExp(`var\\s+${key}\\s*=\\s*\\[[^\\]]*\\]\\s*;`, "m");
|
||||
const match = fileContent.match(regex);
|
||||
|
||||
if (!match) {
|
||||
console.warn(`Key "${key}" not found in file.`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const arrayRaw = match[0].match(/\[(.*)\]/s)?.[1] || "";
|
||||
let values = arrayRaw
|
||||
.split(",")
|
||||
.map((v) => v.trim())
|
||||
.map((v) => (v === "" ? "0" : v))
|
||||
.slice(0, 32);
|
||||
|
||||
values[Number(slot)] = Number(value);
|
||||
|
||||
const newLine = `var ${key} = [\n ${values.join(", ")}\n];`;
|
||||
fileContent = fileContent.replace(regex, newLine);
|
||||
}
|
||||
|
||||
const values = match[2].split(",").map((v) => v.trim());
|
||||
values[Number(slot)] = value;
|
||||
// Bereinige kaputte Endzeilen wie ")"
|
||||
fileContent = fileContent.replace(
|
||||
/^\s*[\)\(a-zA-Z0-9\/\:\. ]{2,40}\s*$/gm,
|
||||
""
|
||||
);
|
||||
|
||||
// Optional: Entferne leere Einträge
|
||||
while (values.length > 0 && !values[values.length - 1]) values.pop();
|
||||
await fs.writeFile(filePath, fileContent, "utf-8");
|
||||
|
||||
const newArray = `var ${key} = [\n ${values.join(", ")}\n];`;
|
||||
const updated = fileContent.replace(regex, newArray);
|
||||
|
||||
await fs.writeFile(filePath, updated, "utf-8");
|
||||
|
||||
return res.status(200).json({ success: true, slot, value });
|
||||
return res.status(200).json({ success: true, updated: updates.length });
|
||||
} catch (err) {
|
||||
console.error("API error:", err);
|
||||
return res.status(500).json({ error: "Internal server error." });
|
||||
|
||||
Reference in New Issue
Block a user