66 lines
2.1 KiB
JavaScript
66 lines
2.1 KiB
JavaScript
/**
|
|
* 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;
|
|
});
|
|
}
|