/**
* Tracks execution of user data for a one-off script.
* Handles edge cases such as missing or invalid data.
*/
function trackUserData(userData) {
try {
// Validate input: Check if userData is an object.
if (typeof userData !== 'object' || userData === null) {
console.warn("Invalid userData: Must be an object.");
return; // Exit if invalid
}
// Check for required fields. Return early if missing.
if (!userData.userId || typeof userData.userId !== 'string' || userData.userId.trim() === "") {
console.warn("Missing or invalid userId.");
return;
}
if (!userData.timestamp || !Number.isFinite(userData.timestamp)) {
console.warn("Missing or invalid timestamp.");
return;
}
// Simulate data processing. Replace with actual logic.
let processedData = processUserData(userData);
// Log the processed data.
console.log("Processed User Data:", processedData);
} catch (error) {
console.error("Error processing user data:", error);
// Optionally, log the error to a more persistent storage (e.g., file, database).
}
}
/**
* Simulates processing user data. Replace with your actual logic.
* @param {object} userData - User data object.
* @returns {object} - Processed user data.
*/
function processUserData(userData) {
//Example: Adding a calculated field.
const processed = {
...userData, // Copy original data
processedAt: new Date(),
calculatedValue: userData.userId.length * 2 //Example calculation
};
return processed;
}
// Example usage with different test cases:
trackUserData({ userId: "user123", timestamp: Date.now() });
trackUserData({ userId: "", timestamp: Date.now() }); // Test missing userId
trackUserData({ userId: 123, timestamp: Date.now() }); // Test invalid userId
trackUserData({timestamp: Date.now()}); // Test missing userId
trackUserData(null); //Test null input
trackUserData("string"); //Test invalid input
trackUserData({userId: "user456", timestamp: "not a number"}); //Test invalid timestamp
Add your comment