/** * @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 []; } }