From 4a562fc18cbf513ee7eabed5982d0294db64058b Mon Sep 17 00:00:00 2001 From: Mika Date: Thu, 22 Jan 2026 11:58:36 +0000 Subject: [PATCH] Add results_visualization/js/api.js --- results_visualization/js/api.js | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 results_visualization/js/api.js diff --git a/results_visualization/js/api.js b/results_visualization/js/api.js new file mode 100644 index 0000000..6f4711a --- /dev/null +++ b/results_visualization/js/api.js @@ -0,0 +1,55 @@ +/** + * @module api + * @description Kommunikationsmodul zur Backend-API für aggregierte Zeitmessungsdaten. + * Bietet Funktionen zum Laden der /results-Daten mit optionalen Filtern. + */ + +const API_BASE_URL = '/results'; + +/** + * Führt einen GET-Request an /results aus und gibt die JSON-Daten zurück. + * @async + * @function loadResults + * @param {Object} [filters={}] - Optionales Filterobjekt. + * @param {string} [filters.runType] - Typ der Messung (z.B. 'pinned' oder 'unpinned'). + * @param {string} [filters.metric] - Optionaler Metrikname. + * @returns {Promise} Promise mit Ergebnisobjekten. + */ +export async function loadResults(filters = {}) { + try { + const params = new URLSearchParams(); + + if (filters.runType) { + params.append('runType', filters.runType); + } + + if (filters.metric) { + params.append('metric', filters.metric); + } + + const url = params.toString() ? `${API_BASE_URL}?${params.toString()}` : API_BASE_URL; + + const response = await fetch(url, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + throw new Error(`Fehler beim Laden der Ergebnisse: ${response.status}`); + } + + const data = await response.json(); + + if (!Array.isArray(data)) { + throw new Error('Ungültiges Datenformat von /results. Erwartet wird ein Array.'); + } + + return data; + } catch (error) { + console.error('API Fehler:', error); + // Defensive: leeres Array zurückgeben, damit UI stabil bleibt + return []; + } +}