1. /**
  2. * Cleans data from HTTP requests for scheduled runs.
  3. * Performs defensive checks to ensure data integrity.
  4. *
  5. * @param {object} requestData - The raw data received from the HTTP request.
  6. * @returns {object|null} - The cleaned data, or null if cleaning fails due to invalid data.
  7. */
  8. function cleanRequestData(requestData) {
  9. if (!requestData) {
  10. console.warn("Request data is null or undefined.");
  11. return null;
  12. }
  13. try {
  14. // Defensive check: Ensure requestData is an object.
  15. if (typeof requestData !== 'object' || requestData === null) {
  16. console.warn("Request data is not a valid object.");
  17. return null;
  18. }
  19. // Defensive check: Check for required fields.
  20. if (!requestData.timestamp || typeof requestData.timestamp !== 'number') {
  21. console.warn("Missing or invalid timestamp.");
  22. return null;
  23. }
  24. if (!requestData.userId || typeof requestData.userId !== 'string') {
  25. console.warn("Missing or invalid userId.");
  26. return null;
  27. }
  28. if (!requestData.data || !Array.isArray(requestData.data)) {
  29. console.warn("Missing or invalid data array.");
  30. return null;
  31. }
  32. //Data Cleaning & Validation
  33. const cleanedData = requestData.data.map(item => {
  34. if (typeof item !== 'object' || item === null) {
  35. console.warn("Invalid item in data array, skipping.");
  36. return null;
  37. }
  38. if (typeof item.value !== 'string') {
  39. console.warn("Invalid value type, skipping item.");
  40. return null;
  41. }
  42. if(typeof item.category !== 'string'){
  43. console.warn("Invalid category type, skipping item.");
  44. return null;
  45. }
  46. return {
  47. id: item.id || Math.random().toString(36).substring(7), //Generate ID if missing
  48. value: item.value.trim(), //Remove leading/trailing spaces
  49. category: item.category.trim() //Remove leading/trailing spaces
  50. };
  51. }).filter(item => item !== null); //Remove invalid items
  52. return {
  53. timestamp: requestData.timestamp,
  54. userId: requestData.userId,
  55. data: cleanedData
  56. };
  57. } catch (error) {
  58. console.error("Error cleaning request data:", error);
  59. return null;
  60. }
  61. }

Add your comment