diff --git a/data_visualization_web_ui/js/api.js b/data_visualization_web_ui/js/api.js new file mode 100644 index 0000000..5b7ce6e --- /dev/null +++ b/data_visualization_web_ui/js/api.js @@ -0,0 +1,71 @@ +/** + * @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 }; + } +}