1. /**
  2. * Validates API payload data against a schema.
  3. *
  4. * @param {object} payload The API payload to validate.
  5. * @param {object} schema The schema to validate against.
  6. * @returns {object} An object containing validation errors. Returns an empty object if valid.
  7. */
  8. function validatePayload(payload, schema) {
  9. const errors = {};
  10. for (const key in schema) {
  11. if (schema.hasOwnProperty(key)) {
  12. const expectedType = schema[key].type;
  13. const required = schema[key].required || false; // Default to not required
  14. if (payload[key] === undefined && required) {
  15. errors[key] = "Required field is missing.";
  16. } else if (payload[key] === undefined && !required) {
  17. continue; // Field is optional and missing, so skip validation
  18. }
  19. if (payload[key] !== undefined) {
  20. if (expectedType === 'string' && typeof payload[key] !== 'string') {
  21. errors[key] = "Expected string";
  22. } else if (expectedType === 'number' && typeof payload[key] !== 'number') {
  23. errors[key] = "Expected number";
  24. } else if (expectedType === 'boolean' && typeof payload[key] !== 'boolean') {
  25. errors[key] = "Expected boolean";
  26. } else if (expectedType === 'array' && !Array.isArray(payload[key])) {
  27. errors[key] = "Expected array";
  28. } else if (expectedType === 'object' && typeof payload[key] !== 'object' || payload[key] === null) {
  29. errors[key] = "Expected object";
  30. } else if (expectedType === 'null' && payload[key] !== null) {
  31. errors[key] = "Expected null";
  32. }
  33. }
  34. }
  35. }
  36. return errors;
  37. }

Add your comment