From 160c6db0dc87f843bd12f5dff69adeb8ec6ab588 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 22 Mar 2026 03:08:28 +0000 Subject: [PATCH] Add data_visualization/js/api.js --- data_visualization/js/api.js | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 data_visualization/js/api.js diff --git a/data_visualization/js/api.js b/data_visualization/js/api.js new file mode 100644 index 0000000..cfb0a0f --- /dev/null +++ b/data_visualization/js/api.js @@ -0,0 +1,67 @@ +/** + * js/api.js + * Data Layer für Donau2Space Experimente + * Kommunikation mit den API-Routen /data und /images + */ + +/** + * Hilfsfunktion zum Erstellen der URL mit optionalen Query-Parametern + * @param {string} baseUrl - Basisroute der API (z.B. '/data') + * @param {Object} [params] - Optionale Parameter für Querystring + * @returns {string} Komplette URL mit Querystring + */ +function buildUrl(baseUrl, params = {}) { + const url = new URL(baseUrl, window.location.origin); + Object.entries(params).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + url.searchParams.append(key, value); + } + }); + return url.toString(); +} + +/** + * Holt Umweltdaten von der API /data. + * @param {Object} [options] - Optional: Filter (time_range, sensor_id) + * @returns {Promise>>} + */ +export async function getData(options = {}) { + const endpoint = buildUrl('/data', options); + try { + const response = await fetch(endpoint, { method: 'GET' }); + if (!response.ok) { + throw new Error(`Fehler beim Laden von /data: ${response.status}`); + } + const data = await response.json(); + if (!Array.isArray(data)) { + throw new Error('Antwortformat von /data ist ungültig. Erwartet: Array.'); + } + return data; + } catch (error) { + console.error('getData() Fehler:', error); + return []; + } +} + +/** + * Holt Bild-URLs von der API /images. + * @param {Object} [options] - Optional: Filter (start_time, end_time) + * @returns {Promise>>} + */ +export async function getImages(options = {}) { + const endpoint = buildUrl('/images', options); + try { + const response = await fetch(endpoint, { method: 'GET' }); + if (!response.ok) { + throw new Error(`Fehler beim Laden von /images: ${response.status}`); + } + const data = await response.json(); + if (!Array.isArray(data)) { + throw new Error('Antwortformat von /images ist ungültig. Erwartet: Array.'); + } + return data; + } catch (error) { + console.error('getImages() Fehler:', error); + return []; + } +}