/** * 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; }); }