/**
* Cleans data from HTTP requests for scheduled runs.
* Performs defensive checks to ensure data integrity.
*
* @param {object} requestData - The raw data received from the HTTP request.
* @returns {object|null} - The cleaned data, or null if cleaning fails due to invalid data.
*/
function cleanRequestData(requestData) {
if (!requestData) {
console.warn("Request data is null or undefined.");
return null;
}
try {
// Defensive check: Ensure requestData is an object.
if (typeof requestData !== 'object' || requestData === null) {
console.warn("Request data is not a valid object.");
return null;
}
// Defensive check: Check for required fields.
if (!requestData.timestamp || typeof requestData.timestamp !== 'number') {
console.warn("Missing or invalid timestamp.");
return null;
}
if (!requestData.userId || typeof requestData.userId !== 'string') {
console.warn("Missing or invalid userId.");
return null;
}
if (!requestData.data || !Array.isArray(requestData.data)) {
console.warn("Missing or invalid data array.");
return null;
}
//Data Cleaning & Validation
const cleanedData = requestData.data.map(item => {
if (typeof item !== 'object' || item === null) {
console.warn("Invalid item in data array, skipping.");
return null;
}
if (typeof item.value !== 'string') {
console.warn("Invalid value type, skipping item.");
return null;
}
if(typeof item.category !== 'string'){
console.warn("Invalid category type, skipping item.");
return null;
}
return {
id: item.id || Math.random().toString(36).substring(7), //Generate ID if missing
value: item.value.trim(), //Remove leading/trailing spaces
category: item.category.trim() //Remove leading/trailing spaces
};
}).filter(item => item !== null); //Remove invalid items
return {
timestamp: requestData.timestamp,
userId: requestData.userId,
data: cleanedData
};
} catch (error) {
console.error("Error cleaning request data:", error);
return null;
}
}
Add your comment