/**
* Validates API payload data against a schema.
*
* @param {object} payload The API payload to validate.
* @param {object} schema The schema to validate against.
* @returns {object} An object containing validation errors. Returns an empty object if valid.
*/
function validatePayload(payload, schema) {
const errors = {};
for (const key in schema) {
if (schema.hasOwnProperty(key)) {
const expectedType = schema[key].type;
const required = schema[key].required || false; // Default to not required
if (payload[key] === undefined && required) {
errors[key] = "Required field is missing.";
} else if (payload[key] === undefined && !required) {
continue; // Field is optional and missing, so skip validation
}
if (payload[key] !== undefined) {
if (expectedType === 'string' && typeof payload[key] !== 'string') {
errors[key] = "Expected string";
} else if (expectedType === 'number' && typeof payload[key] !== 'number') {
errors[key] = "Expected number";
} else if (expectedType === 'boolean' && typeof payload[key] !== 'boolean') {
errors[key] = "Expected boolean";
} else if (expectedType === 'array' && !Array.isArray(payload[key])) {
errors[key] = "Expected array";
} else if (expectedType === 'object' && typeof payload[key] !== 'object' || payload[key] === null) {
errors[key] = "Expected object";
} else if (expectedType === 'null' && payload[key] !== null) {
errors[key] = "Expected null";
}
}
}
}
return errors;
}
Add your comment