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:
@@ -47,7 +47,9 @@ var win_kueIso = [
|
|||||||
];
|
];
|
||||||
//Grenzwert (MOhm) für Isolationswiderstand
|
//Grenzwert (MOhm) für Isolationswiderstand
|
||||||
var win_kueLimit1 = [
|
var win_kueLimit1 = [
|
||||||
3, 9.9, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0
|
3, 9.9, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0,
|
||||||
|
10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0,
|
||||||
|
10.0, 10.0, 10.0, 10.0, 10.0, 10.0,
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -60,7 +62,9 @@ die Filterzeit startet beim nächsten Unterschreiten des Grenzwerts neu. Die Fil
|
|||||||
kurzfristige Schwankungen oder Störungen fälschlicherweise als Fehler gemeldet werden.
|
kurzfristige Schwankungen oder Störungen fälschlicherweise als Fehler gemeldet werden.
|
||||||
*/
|
*/
|
||||||
var win_kueDelay1 = [
|
var win_kueDelay1 = [
|
||||||
3, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420
|
3, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420,
|
||||||
|
420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420,
|
||||||
|
420,
|
||||||
];
|
];
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
//Schleifenwiderstand in Display (resDisplay) Einheit: KOhm
|
//Schleifenwiderstand in Display (resDisplay) Einheit: KOhm
|
||||||
@@ -71,15 +75,19 @@ var win_kueResidence = [
|
|||||||
];
|
];
|
||||||
//Schleifenmessung Unterer Grenzwert (KOhm)
|
//Schleifenmessung Unterer Grenzwert (KOhm)
|
||||||
var win_kueLimit2Low = [
|
var win_kueLimit2Low = [
|
||||||
3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1
|
3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
|
||||||
|
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
|
||||||
|
0.1,
|
||||||
];
|
];
|
||||||
var win_kueLimit2High = [
|
var win_kueLimit2High = [
|
||||||
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
|
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
];
|
];
|
||||||
|
|
||||||
//Schleifenintervall (h) für Schleifenmessung
|
//Schleifenintervall (h) für Schleifenmessung
|
||||||
var win_kueLoopInterval = [
|
var win_kueLoopInterval = [
|
||||||
3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
|
3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||||
|
6, 6, 6, 6, 6, 6,
|
||||||
];
|
];
|
||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
//KÜ Modul Version soll /100 und davor V angezeigt werden z.B. 4.19V
|
//KÜ Modul Version soll /100 und davor V angezeigt werden z.B. 4.19V
|
||||||
@@ -91,36 +99,69 @@ var win_kueVersion = [
|
|||||||
|
|
||||||
//Modulname in Komponente und auf der Anzeige
|
//Modulname in Komponente und auf der Anzeige
|
||||||
var win_kueID = [
|
var win_kueID = [
|
||||||
"Test3", "B23", "Kabel 3", "Kabel 4", "Kabel 5", "Kabel 6", "FTZ4562", "Kabel 8", "12344", "Kabel 10", "Kabel 11", "Kabel 12", "Kabel 13", "Kabel 14", "Kabel 15", "H56-77", "Kabel 17", "Kabel 18", "Kabel 19", "Kabel 20", "Kabel 21", "Kabel 22", "Kabel 23", "Kabel 24", "Kabel 25", "Kabel 26", "Kabel 27", "Kabel 28", "Kabel 29", "Kabel 30", "Kabel 31", "Kabel 32"
|
"Test3",
|
||||||
|
"B23",
|
||||||
|
"Kabel 3",
|
||||||
|
"Kabel 4",
|
||||||
|
"Kabel 5",
|
||||||
|
"Kabel 6",
|
||||||
|
"FTZ4562",
|
||||||
|
"Kabel 8",
|
||||||
|
"12344",
|
||||||
|
"Kabel 10",
|
||||||
|
"Kabel 11",
|
||||||
|
"Kabel 12",
|
||||||
|
"Kabel 13",
|
||||||
|
"Kabel 14",
|
||||||
|
"Kabel 15",
|
||||||
|
"H56-77",
|
||||||
|
"Kabel 17",
|
||||||
|
"Kabel 18",
|
||||||
|
"Kabel 19",
|
||||||
|
"Kabel 20",
|
||||||
|
"Kabel 21",
|
||||||
|
"Kabel 22",
|
||||||
|
"Kabel 23",
|
||||||
|
"Kabel 24",
|
||||||
|
"Kabel 25",
|
||||||
|
"Kabel 26",
|
||||||
|
"Kabel 27",
|
||||||
|
"Kabel 28",
|
||||||
|
"Kabel 29",
|
||||||
|
"Kabel 30",
|
||||||
|
"Kabel 31",
|
||||||
|
"Kabel 32",
|
||||||
];
|
];
|
||||||
|
|
||||||
//---------------------------------------------------
|
//-------------TDR---------------------------------------------------
|
||||||
|
var win_tdrActive = [
|
||||||
//TDR---------------------------------------------------
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1,
|
||||||
|
];
|
||||||
|
//----------------------------------------------------
|
||||||
var win_tdrAtten = [
|
var win_tdrAtten = [
|
||||||
1, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0
|
9, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0
|
||||||
];;
|
];
|
||||||
|
var win_tdrSpeed = [
|
||||||
|
109, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100
|
||||||
|
];
|
||||||
|
var win_tdrTrigger = [
|
||||||
|
89, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
|
||||||
|
];
|
||||||
|
//----------------------------------------------------
|
||||||
var win_tdrPulse = [
|
var win_tdrPulse = [
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
];
|
];
|
||||||
var win_tdrSpeed = [
|
|
||||||
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100
|
|
||||||
];;;;
|
|
||||||
var win_tdrAmp = [
|
var win_tdrAmp = [
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
];
|
];
|
||||||
var win_tdrTrigger = [
|
|
||||||
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
|
|
||||||
];;
|
|
||||||
var win_tdrLocation = [
|
var win_tdrLocation = [
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
];
|
];
|
||||||
var win_tdrActive = [
|
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
|
|
||||||
];;;
|
|
||||||
var win_tdrLast = [
|
var win_tdrLast = [
|
||||||
"2024-10-17 07:51:54:000",
|
"2024-10-17 07:51:54:000",
|
||||||
"2024-09-30 08:38:50:000",
|
"2024-09-30 08:38:50:000",
|
||||||
@@ -159,12 +200,7 @@ var win_tdrLast = [
|
|||||||
//---------------------------------------------------
|
//---------------------------------------------------
|
||||||
|
|
||||||
var win_memoryInterval = [
|
var win_memoryInterval = [
|
||||||
5, 0, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0
|
5, 0, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
|
||||||
|
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0,
|
||||||
];
|
];
|
||||||
//Speicherintervall (Kein, 1 MInute, 5 Minuten, 10 Minuten, 15 Minuten, 30 Minuten, 60 Minuten, 360 Minuten (6h), 720 Minuten (12h)
|
//Speicherintervall (Kein, 1 MInute, 5 Minuten, 10 Minuten, 15 Minuten, 30 Minuten, 60 Minuten, 360 Minuten (6h), 720 Minuten (12h)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,18 +11,36 @@ interface Props {
|
|||||||
export default function TdrEinstellung({ slot }: Props) {
|
export default function TdrEinstellung({ slot }: Props) {
|
||||||
const tdrSlice = useSelector((state: RootState) => state.kueDataSlice);
|
const tdrSlice = useSelector((state: RootState) => state.kueDataSlice);
|
||||||
|
|
||||||
const [tdrData, setTdrData] = useState({
|
const cacheKey = `slot_${slot}`;
|
||||||
daempfung: tdrSlice.tdrAtten?.[slot]?.toString() ?? "",
|
if (typeof window !== "undefined") {
|
||||||
geschwindigkeit: tdrSlice.tdrSpeed?.[slot]?.toString() ?? "",
|
window.__tdrCache = window.__tdrCache || {};
|
||||||
trigger: tdrSlice.tdrTrigger?.[slot]?.toString() ?? "",
|
}
|
||||||
});
|
const cachedTdr =
|
||||||
|
typeof window !== "undefined" ? window.__tdrCache[cacheKey] : null;
|
||||||
|
|
||||||
const [tdrActive, setTdrActive] = useState(false);
|
const [tdrData, setTdrData] = useState(
|
||||||
|
() =>
|
||||||
|
cachedTdr?.data || {
|
||||||
|
daempfung: tdrSlice.tdrAtten?.[slot]?.toString() ?? "",
|
||||||
|
geschwindigkeit: tdrSlice.tdrSpeed?.[slot]?.toString() ?? "",
|
||||||
|
trigger: tdrSlice.tdrTrigger?.[slot]?.toString() ?? "",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// Zustand beim Öffnen aus Redux übernehmen
|
const [tdrActive, setTdrActive] = useState(
|
||||||
useEffect(() => {
|
() => cachedTdr?.tdrActive ?? tdrSlice.tdrActive?.[slot] === 1
|
||||||
setTdrActive(tdrSlice.tdrActive?.[slot] === 1);
|
);
|
||||||
}, [slot, tdrSlice.tdrActive]);
|
|
||||||
|
// Updates in Redux nicht mehr automatisch übernehmen, solange Fenster offen
|
||||||
|
|
||||||
|
const updateCache = (data: typeof tdrData, active = tdrActive) => {
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
window.__tdrCache[cacheKey] = {
|
||||||
|
data,
|
||||||
|
tdrActive: active,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleSave = () => {
|
const handleSave = () => {
|
||||||
const { daempfung, geschwindigkeit, trigger } = tdrData;
|
const { daempfung, geschwindigkeit, trigger } = tdrData;
|
||||||
@@ -35,28 +53,24 @@ export default function TdrEinstellung({ slot }: Props) {
|
|||||||
const isDev = window.location.hostname === "localhost";
|
const isDev = window.location.hostname === "localhost";
|
||||||
|
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
const requests = [
|
const updates = [
|
||||||
{ key: "win_tdrAtten", value: daempfung.trim() },
|
{ key: "win_tdrAtten", slot, value: daempfung.trim() },
|
||||||
{ key: "win_tdrSpeed", value: geschwindigkeit.trim() },
|
{ key: "win_tdrSpeed", slot, value: geschwindigkeit.trim() },
|
||||||
{ key: "win_tdrTrigger", value: trigger.trim() },
|
{ key: "win_tdrTrigger", slot, value: trigger.trim() },
|
||||||
];
|
];
|
||||||
|
|
||||||
Promise.all(
|
fetch("/api/cpl/updateTdrSettingsDataAPIHandler", {
|
||||||
requests.map(({ key, value }) =>
|
method: "POST",
|
||||||
fetch(
|
headers: { "Content-Type": "application/json" },
|
||||||
`/api/cpl/updateTdrSettingsDataAPIHandler?key=${key}&slot=${slot}&value=${value}`
|
body: JSON.stringify({ updates }),
|
||||||
).then((res) => {
|
})
|
||||||
if (!res.ok) throw new Error(`Fehler bei ${key}`);
|
.then((res) => res.json())
|
||||||
return res.json();
|
|
||||||
})
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
alert("TDR-Mockdaten erfolgreich gespeichert.");
|
alert("TDR-Werte erfolgreich gespeichert.");
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error("Fehler beim Speichern der Mockdaten:", err);
|
console.error("Fehler beim Speichern:", err);
|
||||||
alert("Fehler beim Speichern der TDR-Einstellungen.");
|
alert("Speichern fehlgeschlagen.");
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const base = `${window.location.origin}/CPL?/kabelueberwachung.html`;
|
const base = `${window.location.origin}/CPL?/kabelueberwachung.html`;
|
||||||
@@ -83,11 +97,14 @@ export default function TdrEinstellung({ slot }: Props) {
|
|||||||
alert("Fehler beim Senden der TDR-Einstellungen.");
|
alert("Fehler beim Senden der TDR-Einstellungen.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateCache(tdrData, tdrActive);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleTdrToggle = () => {
|
const handleTdrToggle = () => {
|
||||||
const newState = !tdrActive;
|
const newState = !tdrActive;
|
||||||
setTdrActive(newState);
|
setTdrActive(newState);
|
||||||
|
updateCache(tdrData, newState);
|
||||||
|
|
||||||
const isDev = window.location.hostname === "localhost";
|
const isDev = window.location.hostname === "localhost";
|
||||||
const slotParam = `KTX${slot}=${newState ? 1 : 0}`;
|
const slotParam = `KTX${slot}=${newState ? 1 : 0}`;
|
||||||
@@ -154,9 +171,11 @@ export default function TdrEinstellung({ slot }: Props) {
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
value={tdrData.daempfung}
|
value={tdrData.daempfung}
|
||||||
onChange={(e) =>
|
onChange={(e) => {
|
||||||
setTdrData({ ...tdrData, daempfung: e.target.value })
|
const updated = { ...tdrData, daempfung: e.target.value };
|
||||||
}
|
setTdrData(updated);
|
||||||
|
updateCache(updated);
|
||||||
|
}}
|
||||||
className="border px-2 py-1 rounded w-full pr-10"
|
className="border px-2 py-1 rounded w-full pr-10"
|
||||||
/>
|
/>
|
||||||
<span className="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-500">
|
<span className="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-500">
|
||||||
@@ -173,9 +192,11 @@ export default function TdrEinstellung({ slot }: Props) {
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
value={tdrData.geschwindigkeit}
|
value={tdrData.geschwindigkeit}
|
||||||
onChange={(e) =>
|
onChange={(e) => {
|
||||||
setTdrData({ ...tdrData, geschwindigkeit: e.target.value })
|
const updated = { ...tdrData, geschwindigkeit: e.target.value };
|
||||||
}
|
setTdrData(updated);
|
||||||
|
updateCache(updated);
|
||||||
|
}}
|
||||||
className="border px-2 py-1 rounded w-full pr-14"
|
className="border px-2 py-1 rounded w-full pr-14"
|
||||||
/>
|
/>
|
||||||
<span className="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-500">
|
<span className="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-500">
|
||||||
@@ -189,9 +210,11 @@ export default function TdrEinstellung({ slot }: Props) {
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
value={tdrData.trigger}
|
value={tdrData.trigger}
|
||||||
onChange={(e) =>
|
onChange={(e) => {
|
||||||
setTdrData({ ...tdrData, trigger: e.target.value })
|
const updated = { ...tdrData, trigger: e.target.value };
|
||||||
}
|
setTdrData(updated);
|
||||||
|
updateCache(updated);
|
||||||
|
}}
|
||||||
className="border px-2 py-1 rounded w-full"
|
className="border px-2 py-1 rounded w-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
||||||
|
|
||||||
*/
|
*/
|
||||||
const webVersion = "1.6.322";
|
const webVersion = "1.6.323";
|
||||||
export default webVersion;
|
export default webVersion;
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
// /pages/api/cpl/updateTdrSettingsDataAPIHandler.ts
|
// pages/api/cpl/updateTdrSettingsDataAPIHandler.ts
|
||||||
|
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import fs from "fs/promises";
|
import fs from "fs/promises";
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
export default async function handler(req, res) {
|
||||||
const { slot, value, key } = req.query;
|
const updates = req.body?.updates;
|
||||||
if (slot === undefined || value === undefined) {
|
|
||||||
return res.status(400).json({ error: "Missing slot or value" });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!slot || !value || !key) {
|
if (!Array.isArray(updates) || updates.length === 0) {
|
||||||
return res.status(400).json({ error: "Missing slot, value, or key" });
|
return res.status(400).json({ error: "Missing or invalid updates array" });
|
||||||
}
|
}
|
||||||
|
|
||||||
const filePath = path.join(
|
const filePath = path.join(
|
||||||
@@ -19,28 +16,39 @@ export default async function handler(req, res) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const fileContent = await fs.readFile(filePath, "utf-8");
|
let fileContent = await fs.readFile(filePath, "utf-8");
|
||||||
const regex = new RegExp(`(var\\s+${key}\\s*=\\s*\\[)([^\\]]*)(\\])`);
|
|
||||||
const match = fileContent.match(regex);
|
|
||||||
|
|
||||||
if (!match) {
|
for (const { key, slot, value } of updates) {
|
||||||
return res
|
const regex = new RegExp(`var\\s+${key}\\s*=\\s*\\[[^\\]]*\\]\\s*;`, "m");
|
||||||
.status(404)
|
const match = fileContent.match(regex);
|
||||||
.json({ error: `Key "${key}" not found in mock data.` });
|
|
||||||
|
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());
|
// Bereinige kaputte Endzeilen wie ")"
|
||||||
values[Number(slot)] = value;
|
fileContent = fileContent.replace(
|
||||||
|
/^\s*[\)\(a-zA-Z0-9\/\:\. ]{2,40}\s*$/gm,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
|
||||||
// Optional: Entferne leere Einträge
|
await fs.writeFile(filePath, fileContent, "utf-8");
|
||||||
while (values.length > 0 && !values[values.length - 1]) values.pop();
|
|
||||||
|
|
||||||
const newArray = `var ${key} = [\n ${values.join(", ")}\n];`;
|
return res.status(200).json({ success: true, updated: updates.length });
|
||||||
const updated = fileContent.replace(regex, newArray);
|
|
||||||
|
|
||||||
await fs.writeFile(filePath, updated, "utf-8");
|
|
||||||
|
|
||||||
return res.status(200).json({ success: true, slot, value });
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("API error:", err);
|
console.error("API error:", err);
|
||||||
return res.status(500).json({ error: "Internal server error." });
|
return res.status(500).json({ error: "Internal server error." });
|
||||||
|
|||||||
Reference in New Issue
Block a user