responseFormatter.js•3.12 kB
/**
* Response formatter utility
* Standardizes API responses throughout the application
*/
/**
* Format a successful response
* @param {Object} data - Response data
* @param {string} message - Success message
* @param {number} statusCode - HTTP status code
* @returns {Object} - Formatted response object
*/
const formatSuccess = (data = null, message = 'Success', statusCode = 200) => {
return {
status: 'success',
statusCode,
message,
data
};
};
/**
* Format an error response
* @param {string} message - Error message
* @param {number} statusCode - HTTP status code
* @param {Object} errors - Validation errors
* @returns {Object} - Formatted error response object
*/
const formatError = (message = 'Error', statusCode = 500, errors = null) => {
return {
status: 'error',
statusCode,
message,
errors
};
};
/**
* Format a paginated response
* @param {Array} data - Array of items
* @param {number} page - Current page
* @param {number} limit - Items per page
* @param {number} total - Total number of items
* @param {string} message - Success message
* @returns {Object} - Formatted paginated response
*/
const formatPaginated = (data, page, limit, total, message = 'Success') => {
const totalPages = Math.ceil(total / limit);
const hasNext = page < totalPages;
const hasPrev = page > 1;
return {
status: 'success',
statusCode: 200,
message,
data,
pagination: {
page,
limit,
total,
totalPages,
hasNext,
hasPrev,
nextPage: hasNext ? page + 1 : null,
prevPage: hasPrev ? page - 1 : null
}
};
};
/**
* Send a formatted success response
* @param {Object} res - Express response object
* @param {Object} data - Response data
* @param {string} message - Success message
* @param {number} statusCode - HTTP status code
*/
const sendSuccess = (res, data = null, message = 'Success', statusCode = 200) => {
const response = formatSuccess(data, message, statusCode);
return res.status(statusCode).json(response);
};
/**
* Send a formatted error response
* @param {Object} res - Express response object
* @param {string} message - Error message
* @param {number} statusCode - HTTP status code
* @param {Object} errors - Validation errors
*/
const sendError = (res, message = 'Error', statusCode = 500, errors = null) => {
const response = formatError(message, statusCode, errors);
return res.status(statusCode).json(response);
};
/**
* Send a formatted paginated response
* @param {Object} res - Express response object
* @param {Array} data - Array of items
* @param {number} page - Current page
* @param {number} limit - Items per page
* @param {number} total - Total number of items
* @param {string} message - Success message
*/
const sendPaginated = (res, data, page, limit, total, message = 'Success') => {
const response = formatPaginated(data, page, limit, total, message);
return res.status(200).json(response);
};
module.exports = {
formatSuccess,
formatError,
formatPaginated,
sendSuccess,
sendError,
sendPaginated
};