From 7adc94759386c19488154a82c0b10bf56933a81c Mon Sep 17 00:00:00 2001 From: Mika Date: Wed, 18 Mar 2026 13:17:47 +0000 Subject: [PATCH] Add heatmap_visualization/js/api.js --- heatmap_visualization/js/api.js | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 heatmap_visualization/js/api.js diff --git a/heatmap_visualization/js/api.js b/heatmap_visualization/js/api.js new file mode 100644 index 0000000..348957b --- /dev/null +++ b/heatmap_visualization/js/api.js @@ -0,0 +1,55 @@ +/** + * @module api + * Kommunikation mit der /heatmap API. + * Enthält Funktionen zum Laden von Heatmap-Daten. + */ + +/** + * Sendet eine GET-Anfrage an die API-Ressource /heatmap. + * Verarbeitet die Antwort zu einem JSON-Objekt. + * + * @async + * @function loadHeatmapData + * @param {Object} [filters={}] - Optionales Objekt mit Filterparametern (cohort_id, time_window) + * @returns {Promise} Parsed Heatmap-Datenobjekt + */ +export async function loadHeatmapData(filters = {}) { + try { + const params = new URLSearchParams(); + if (filters.cohort_id) params.append('cohort_id', filters.cohort_id); + if (filters.time_window) params.append('time_window', filters.time_window); + + const url = `/heatmap${params.toString() ? '?' + params.toString() : ''}`; + const response = await fetch(url, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + console.error(`API Error: ${response.status} ${response.statusText}`); + throw new Error('Fehler beim Laden der Heatmap-Daten.'); + } + + const data = await response.json(); + + if (!data || typeof data !== 'object') { + throw new Error('Ungueltiges Datenformat von der Heatmap-API.'); + } + + return data; + } catch (error) { + console.error('loadHeatmapData Error:', error); + return { + matrix: [], + metadata: { + band_center: null, + band_width: null, + cluster_score: null + }, + error: true, + message: error.message + }; + } +}