1. /**
  2. * Tracks execution of user data for a one-off script.
  3. * Handles edge cases such as missing or invalid data.
  4. */
  5. function trackUserData(userData) {
  6. try {
  7. // Validate input: Check if userData is an object.
  8. if (typeof userData !== 'object' || userData === null) {
  9. console.warn("Invalid userData: Must be an object.");
  10. return; // Exit if invalid
  11. }
  12. // Check for required fields. Return early if missing.
  13. if (!userData.userId || typeof userData.userId !== 'string' || userData.userId.trim() === "") {
  14. console.warn("Missing or invalid userId.");
  15. return;
  16. }
  17. if (!userData.timestamp || !Number.isFinite(userData.timestamp)) {
  18. console.warn("Missing or invalid timestamp.");
  19. return;
  20. }
  21. // Simulate data processing. Replace with actual logic.
  22. let processedData = processUserData(userData);
  23. // Log the processed data.
  24. console.log("Processed User Data:", processedData);
  25. } catch (error) {
  26. console.error("Error processing user data:", error);
  27. // Optionally, log the error to a more persistent storage (e.g., file, database).
  28. }
  29. }
  30. /**
  31. * Simulates processing user data. Replace with your actual logic.
  32. * @param {object} userData - User data object.
  33. * @returns {object} - Processed user data.
  34. */
  35. function processUserData(userData) {
  36. //Example: Adding a calculated field.
  37. const processed = {
  38. ...userData, // Copy original data
  39. processedAt: new Date(),
  40. calculatedValue: userData.userId.length * 2 //Example calculation
  41. };
  42. return processed;
  43. }
  44. // Example usage with different test cases:
  45. trackUserData({ userId: "user123", timestamp: Date.now() });
  46. trackUserData({ userId: "", timestamp: Date.now() }); // Test missing userId
  47. trackUserData({ userId: 123, timestamp: Date.now() }); // Test invalid userId
  48. trackUserData({timestamp: Date.now()}); // Test missing userId
  49. trackUserData(null); //Test null input
  50. trackUserData("string"); //Test invalid input
  51. trackUserData({userId: "user456", timestamp: "not a number"}); //Test invalid timestamp

Add your comment