From 1fcf689e58db10520958504765a85bec7f59f3be Mon Sep 17 00:00:00 2001 From: Mika Date: Mon, 23 Mar 2026 11:13:26 +0000 Subject: [PATCH] Add data_visualization/js/api.js --- data_visualization/js/api.js | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 data_visualization/js/api.js diff --git a/data_visualization/js/api.js b/data_visualization/js/api.js new file mode 100644 index 0000000..893e60d --- /dev/null +++ b/data_visualization/js/api.js @@ -0,0 +1,48 @@ +/** + * Daten-Layer-Modul zur Kommunikation mit der API /results + * Verantwortlich für das Abrufen von Experimentergebnissen mit optionalen Filtern. + * + * @module api + */ + +/** + * Sendet GET-Anfrage an /results und gibt das JSON-Ergebnis zurück. + * @async + * @function fetchResults + * @param {Object} [filters={}] - Optionale Filterparameter (run_id, parallelism, Zeitraum etc.) + * @returns {Promise>} - Gibt ein Array von Testergebnisobjekten zurück + * @throws {Error} Falls die Anfrage fehlschlägt oder ungültige Daten empfängt + */ +export async function fetchResults(filters = {}) { + const url = new URL('/results', window.location.origin); + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + url.searchParams.append(key, value); + } + }); + + try { + const response = await fetch(url.toString(), { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + throw new Error(`API-Fehler: ${response.status} ${response.statusText}`); + } + + const data = await response.json(); + + if (!Array.isArray(data)) { + throw new Error('Unerwartetes API-Antwortformat: erwartet Array'); + } + + return data; + } catch (error) { + console.error('Fehler beim Laden der Ergebnisse:', error); + throw error; + } +}