mirror of
https://github.com/Crazyco-xyz/48hr.email.git
synced 2026-01-09 11:19:36 +01:00
70 lines
No EOL
2.3 KiB
JavaScript
70 lines
No EOL
2.3 KiB
JavaScript
/**
|
|
* Middleware to add consistent API response helpers to the response object
|
|
*/
|
|
function responseFormatter(req, res, next) {
|
|
/**
|
|
* Send a successful API response
|
|
* @param {*} data - Data to return
|
|
* @param {number} statusCode - HTTP status code (default: 200)
|
|
*/
|
|
// Determine mode: 'normal', 'debug', or 'ux-debug'
|
|
let mode = 'normal';
|
|
const config = req.app && req.app.get ? req.app.get('config') : null;
|
|
if (config && config.uxDebugMode) {
|
|
mode = 'ux-debug';
|
|
} else if (process.env.DEBUG && process.env.DEBUG.includes('48hr-email')) {
|
|
mode = 'debug';
|
|
}
|
|
|
|
res.apiSuccess = function(data = null, statusCode = 200, templateContext = null) {
|
|
const response = {
|
|
success: true,
|
|
mode: mode,
|
|
data: data
|
|
};
|
|
if (templateContext) response.templateContext = templateContext;
|
|
res.status(statusCode).json(response);
|
|
}
|
|
|
|
/**
|
|
* Send an error API response
|
|
* @param {string} message - Error message
|
|
* @param {string} code - Error code for programmatic handling
|
|
* @param {number} statusCode - HTTP status code (default: 400)
|
|
*/
|
|
res.apiError = function(message, code = 'ERROR', statusCode = 400, templateContext = null) {
|
|
const response = {
|
|
success: false,
|
|
mode: mode,
|
|
error: message,
|
|
code: code
|
|
};
|
|
if (templateContext) response.templateContext = templateContext;
|
|
res.status(statusCode).json(response);
|
|
}
|
|
|
|
/**
|
|
* Send a list API response with pagination info
|
|
* @param {array} items - Array of items
|
|
* @param {number} total - Total count (optional, defaults to items.length)
|
|
* @param {number} statusCode - HTTP status code (default: 200)
|
|
*/
|
|
res.apiList = function(items, total = null, statusCode = 200, templateContext = null) {
|
|
if (!Array.isArray(items)) {
|
|
items = [];
|
|
}
|
|
const response = {
|
|
success: true,
|
|
mode: mode,
|
|
data: items,
|
|
count: items.length,
|
|
total: total !== null ? total : items.length
|
|
};
|
|
if (templateContext) response.templateContext = templateContext;
|
|
res.status(statusCode).json(response);
|
|
}
|
|
|
|
next()
|
|
}
|
|
|
|
module.exports = responseFormatter |