From 3dfa8d12084f5c0bae8779158186bfd6fb4aa006 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 18 Jan 2026 16:37:00 +0000 Subject: [PATCH] Add data_visualization/js/dataHandler.js --- data_visualization/js/dataHandler.js | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 data_visualization/js/dataHandler.js diff --git a/data_visualization/js/dataHandler.js b/data_visualization/js/dataHandler.js new file mode 100644 index 0000000..3dd14de --- /dev/null +++ b/data_visualization/js/dataHandler.js @@ -0,0 +1,66 @@ +/** + * Modul: dataHandler + * Rolle: data_processing + * Beschreibung: Transformiert rohe API-Daten und wendet Filter an. + */ + +/** + * Formatiert die rohen API-Daten in ein diagrammkompatibles Format. + * + * @param {Array} apiData - Array der Messdatensätze von der API + * @returns {Array} - Transformiertes Datenarray: [{ time, temperature, humidity, brightness }] + */ +export function processData(apiData = []) { + if (!Array.isArray(apiData)) return []; + + return apiData.map(entry => { + const { timestamp, temperature, humidity, brightness } = entry; + + // Sicherstellung der Typkonsistenz + const parsedTime = new Date(timestamp); + return { + time: isNaN(parsedTime.getTime()) ? null : parsedTime, + temperature: typeof temperature === 'number' ? temperature : null, + humidity: typeof humidity === 'number' ? humidity : null, + brightness: typeof brightness === 'number' ? brightness : null + }; + }).filter(item => item.time !== null); +} + +/** + * Filtert die prozessierten Daten anhand von Benutzerkriterien. + * + * @param {Array} data - Die zuvor verarbeiteten Daten (von processData) + * @param {Object} filters - Filterparameter, z.B. { startTime, endTime, iso, exposureTime } + * @returns {Array} - Gefilterte Daten + */ +export function applyFilters(data = [], filters = {}) { + if (!Array.isArray(data)) return []; + + const { startTime, endTime, iso, exposureTime } = filters; + + return data.filter(entry => { + let include = true; + + if (startTime && entry.time && entry.time < new Date(startTime)) { + include = false; + } + + if (endTime && entry.time && entry.time > new Date(endTime)) { + include = false; + } + + // Anmerkung: ISO und exposureTime liegen evtl. nicht im prozessierten Objekt vor, + // sollen aber ggf. im Originaldatensatz überprüft werden, falls Datenstruktur angepasst wird. + + if (iso && entry.iso && entry.iso !== iso) { + include = false; + } + + if (exposureTime && entry.exposureTime && entry.exposureTime !== exposureTime) { + include = false; + } + + return include; + }); +}