From af46187f3ae43cc7831943a53e9763d1d1d5e642 Mon Sep 17 00:00:00 2001 From: Ismail Ali Date: Wed, 12 Feb 2025 22:00:57 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Alle=20verf=C3=BCgbaren=20JSON-Objekte?= =?UTF-8?q?=20abrufen=20und=20filtern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implementierung einer Funktion zum Abrufen aller JSON-Objekte von `/0` bis kein 404-Fehler auftritt. - Parsing der Daten in ein einheitliches JSON-Format. - Filterung der Daten nach dem ausgewählten Datumsbereich. - Ausgabe der Daten in der Konsole zur besseren Debugging-Kontrolle. - Behebung von Fehlern bei der API-Kommunikation. --- .../kueModal/LoopTDRChartActionBar.tsx | 155 ++++++++---------- config/webVersion.ts | 2 +- 2 files changed, 72 insertions(+), 85 deletions(-) diff --git a/components/modales/kueModal/LoopTDRChartActionBar.tsx b/components/modales/kueModal/LoopTDRChartActionBar.tsx index 0ec31a4..ef12b11 100644 --- a/components/modales/kueModal/LoopTDRChartActionBar.tsx +++ b/components/modales/kueModal/LoopTDRChartActionBar.tsx @@ -1,102 +1,91 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import DateRangePicker from "./DateRangePicker"; const LoopTDRChartActionBar: React.FC = () => { - const BASE_URL = - process.env.NODE_ENV === "development" - ? process.env.NEXT_PUBLIC_MOCK_API || - "http://localhost:3002/kabelueberwachung" - : `${window.location.origin}/CPL`; + const BASE_URL = "http://localhost:3002"; - const [vonDatum, setVonDatum] = useState(new Date()); // Standard: Heute - const [bisDatum, setBisDatum] = useState(new Date()); // Standard: Heute + const [vonDatum, setVonDatum] = useState(new Date()); + const [bisDatum, setBisDatum] = useState(new Date()); + const [filteredData, setFilteredData] = useState([]); + const [errorMessage, setErrorMessage] = useState(null); - const [filteredData, setFilteredData] = useState([]); // Speichert die gefilterten Daten - const [errorMessage, setErrorMessage] = useState(null); // Fehlernachricht + useEffect(() => { + handleAktualisieren(); + }, []); - const handleAktualisieren = () => { - if (!vonDatum || !bisDatum) { - console.error("❌ Bitte wählen Sie ein gültiges Startdatum aus."); - return; + const fetchAllData = async () => { + let index = 0; + let allData: any[] = []; + + while (true) { + const url = `${BASE_URL}/${index}`; + try { + const response = await fetch(url); + + if (!response.ok) { + if (response.status === 404) { + console.log( + `📡 Kein weiteres Objekt gefunden bei Index ${index}, Stoppe Abruf.` + ); + break; + } + throw new Error(`Fehler beim Abrufen von ${url}: ${response.status}`); + } + + const jsonData = await response.json(); + allData.push(jsonData); + index++; // Nächste URL abrufen + } catch (error) { + console.error(`❌ Fehler bei ${url}:`, error); + break; // Falls ein Fehler auftritt, Abbruch der Schleife + } } - // Falls `bisDatum` nicht gesetzt ist, verwende `vonDatum` - const bisDatumValid = bisDatum ? bisDatum : vonDatum; + return allData; + }; - // Setze Fehlermeldung zurück, bevor eine neue Anfrage gestartet wird - setErrorMessage(null); - setFilteredData([]); + const handleAktualisieren = async () => { + try { + setErrorMessage(null); + setFilteredData([]); - // **Von- und Bis-Datum in Unix-Timestamp (nur Datum, ohne Uhrzeit)** - const vonTimestamp = new Date( - vonDatum.getFullYear(), - vonDatum.getMonth(), - vonDatum.getDate(), - 0, - 0, - 0, - 0 - ).getTime(); + console.log("📡 API Haupt-URL:", BASE_URL); - const bisTimestamp = new Date( - bisDatumValid.getFullYear(), - bisDatumValid.getMonth(), - bisDatumValid.getDate(), - 23, - 59, - 59, - 999 - ).getTime(); + // **Alle verfügbaren JSON-Objekte abrufen** + const allData = await fetchAllData(); - const apiUrl = `${BASE_URL}?seite.ACP&DIA1=${ - new Date(vonTimestamp).toISOString().split("T")[0] - };${new Date(bisTimestamp).toISOString().split("T")[0]};2;4`; + if (allData.length === 0) { + console.error("❌ Keine Daten gefunden!"); + setErrorMessage("❌ Keine Daten gefunden."); + return; + } - console.log("📡 API URL:", apiUrl); + console.log("📥 Alle abgerufenen JSON-Daten:"); + console.table(allData); - fetch(apiUrl) - .then((res) => { - if (!res.ok) { - throw new Error(`HTTP Fehler! Status: ${res.status}`); - } - return res.json(); - }) - .then((data) => { - console.log("📡 API URL:", apiUrl); - console.log("📥 Rohdaten (vor Filterung):", data); + // **Daten filtern nach Datum** + const vonTimestamp = new Date(vonDatum).setHours(0, 0, 0, 0); + const bisTimestamp = new Date(bisDatum).setHours(23, 59, 59, 999); - // **Filtere die Daten basierend auf Unix-Zeit** - const filtered = data.filter((item: any) => { - const itemDateParts = item.t.split(" ")[0].split("-"); // Trenne Datum von Uhrzeit - const itemTimestamp = new Date( - Number(itemDateParts[2]), // Jahr - Number(itemDateParts[1]) - 1, // Monat (JS zählt ab 0) - Number(itemDateParts[0]), // Tag - 0, - 0, - 0, - 0 - ).getTime(); + const filtered = allData.filter((item: any) => { + const itemDateParts = item.t.split(" ")[0].split("-"); + const itemTimestamp = new Date( + Number(itemDateParts[2]), // Jahr + Number(itemDateParts[1]) - 1, // Monat (JS zählt ab 0) + Number(itemDateParts[0]) // Tag + ).setHours(0, 0, 0, 0); - return itemTimestamp >= vonTimestamp && itemTimestamp <= bisTimestamp; - }); - - console.log("🔍 Gefilterte Daten:", filtered); - - if (filtered.length > 0) { - // Falls Daten vorhanden sind, zeige sie an und entferne die Fehlermeldung - setFilteredData(filtered); - setErrorMessage(null); - } else { - // Falls gar keine Daten für den Zeitraum existieren - setFilteredData([]); - setErrorMessage("❌ Kein Daten im gewählten Zeitraum gefunden."); - } - }) - .catch((err) => { - console.error("❌ Fehler beim Abrufen der Daten:", err); - setErrorMessage("❌ Fehler beim Laden der Daten."); + return itemTimestamp >= vonTimestamp && itemTimestamp <= bisTimestamp; }); + + console.log("🔍 Gefilterte Daten:"); + console.table(filtered); + + setFilteredData(filtered); + } catch (error) { + console.error("❌ Fehler beim Abrufen der Daten:", error); + setErrorMessage("❌ Fehler beim Laden der Daten."); + } }; return ( @@ -109,8 +98,6 @@ const LoopTDRChartActionBar: React.FC = () => { > Aktualisieren - - {errorMessage &&

{errorMessage}

} ); }; diff --git a/config/webVersion.ts b/config/webVersion.ts index 9f51b49..8e49607 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -5,5 +5,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.0.6.7"; +const webVersion = "1.0.6.8"; export default webVersion;