diff --git a/data_visualization/js/api.js b/data_visualization/js/api.js new file mode 100644 index 0000000..9916e93 --- /dev/null +++ b/data_visualization/js/api.js @@ -0,0 +1,43 @@ +/** + * @module api + * Stellt die API-Kommunikation für die Visualisierung bereit. + * Verantwortlich für den Abruf der Messdaten von /data. + */ + +/** + * Sendet eine GET-Anfrage an die /data-Route und gibt die Messdaten als JSON zurück. + * + * @async + * @function fetchData + * @param {Object} [filters={}] - Optionale Filter-Parameter (z. B. { from, to, exposure }) + * @returns {Promise>} Array von Messobjekten [{timestamp, temperature, humidity, iso, exposure_time, brightness}] + * @throws {Error} Wenn die Anfrage fehlschlägt oder ungültige Daten erhält + */ +export async function fetchData(filters = {}) { + try { + const queryParams = new URLSearchParams(filters); + const url = queryParams.toString() ? `/data?${queryParams}` : '/data'; + + const response = await fetch(url, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + throw new Error(`Fehler beim Laden der Messdaten: ${response.status}`); + } + + const data = await response.json(); + + if (!Array.isArray(data)) { + throw new Error('Unerwartetes Datenformat der API-Antwort'); + } + + return data; + } catch (error) { + console.error('fetchData():', error); + throw error; + } +}