/** * @module api * @description * Dieses Modul stellt Funktionen zum Abruf der Magnetometerdaten und Analysemetriken * über die API-Endpunkte /api/data und /api/analysis bereit. */ /** * Hilfsfunktion zum sicheren Aufbau einer Query-URL mit optionalen Parametern. * @param {string} baseURL - Basis der API-Route * @param {Object} [params={}] - optionale Parameter * @returns {string} zusammengesetzte URL */ function buildQueryURL(baseURL, params = {}) { const queryEntries = Object.entries(params) .filter(([_, value]) => value !== undefined && value !== null && value !== ''); if (queryEntries.length === 0) return baseURL; const queryString = new URLSearchParams(queryEntries).toString(); return `${baseURL}?${queryString}`; } /** * Holt Magnetometerdaten von /api/data. * @async * @param {Object} [filters={}] - optionale Filter, z.B. { time_range, sensor_id } * @returns {Promise>} */ export async function fetchData(filters = {}) { const url = buildQueryURL('/api/data', filters); try { const response = await fetch(url); if (!response.ok) { console.error(`Fehler beim Laden der Daten: ${response.status}`); return []; } const data = await response.json(); if (!Array.isArray(data)) { console.warn('Unerwartetes Datenformat von /api/data'); return []; } return data; } catch (error) { console.error('Netzwerk- oder Parsing-Fehler bei fetchData:', error); return []; } } /** * Holt Analyseergebnisse von /api/analysis. * @async * @returns {Promise<{mean:number, peaks:Array, noise:number, drift:number}>} */ export async function fetchAnalysis() { try { const response = await fetch('/api/analysis'); if (!response.ok) { console.error(`Fehler beim Laden der Analyseergebnisse: ${response.status}`); return { mean: 0, peaks: [], noise: 0, drift: 0 }; } const result = await response.json(); if (typeof result !== 'object' || result === null) { console.warn('Unerwartetes Datenformat von /api/analysis'); return { mean: 0, peaks: [], noise: 0, drift: 0 }; } const { mean = 0, peaks = [], noise = 0, drift = 0 } = result; return { mean, peaks, noise, drift }; } catch (error) { console.error('Netzwerk- oder Parsing-Fehler bei fetchAnalysis:', error); return { mean: 0, peaks: [], noise: 0, drift: 0 }; } }