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 + }; + } +}