Add data_visualization/js/dataHandler.js

This commit is contained in:
Mika 2026-01-18 16:37:00 +00:00
parent b99d16330e
commit 3dfa8d1208

View file

@ -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<Object>} apiData - Array der Messdatensätze von der API
* @returns {Array<Object>} - 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<Object>} data - Die zuvor verarbeiteten Daten (von processData)
* @param {Object} filters - Filterparameter, z.B. { startTime, endTime, iso, exposureTime }
* @returns {Array<Object>} - 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;
});
}