thrilled-be-core
Version:
Core Express backend package with middleware, logging, security, and base application setup
61 lines (60 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.apiResponse = void 0;
exports.formatResponse = formatResponse;
exports.createPaginationMeta = createPaginationMeta;
const types_1 = require("../types");
/**
* Creates a standardized API response
*/
function formatResponse(res, statusCode, message, data, meta, errors) {
const success = statusCode >= 200 && statusCode < 400;
const response = {
success,
message,
statusCode,
};
if (data !== undefined) {
response.data = data;
}
if (meta) {
response.meta = meta;
}
else if (Array.isArray(data)) {
// Automatically add count when returning arrays
response.meta = { count: data.length };
}
if (errors && errors.length > 0) {
response.errors = errors;
}
return res.status(statusCode).json(response);
}
/**
* Helper for pagination metadata
* */
function createPaginationMeta(options) {
const { page, limit, total } = options;
return {
page,
limit,
total: total || 0,
pages: total ? Math.ceil(total / limit) : 0,
};
}
/**
* Common response helper methods
*/
exports.apiResponse = {
success: (res, message = 'Success', data, meta) => formatResponse(res, types_1.HttpStatusCodes.OK, message, data, meta),
created: (res, message = 'Created successfully', data) => formatResponse(res, types_1.HttpStatusCodes.CREATED, message, data),
noContent: (res, message = 'No content') => formatResponse(res, types_1.HttpStatusCodes.NO_CONTENT, message),
badRequest: (res, message = 'Bad request', errors) => formatResponse(res, types_1.HttpStatusCodes.BAD_REQUEST, message, undefined, undefined, errors),
unauthorized: (res, message = 'Unauthorized') => formatResponse(res, types_1.HttpStatusCodes.UNAUTHORIZED, message),
forbidden: (res, message = 'Forbidden') => formatResponse(res, types_1.HttpStatusCodes.FORBIDDEN, message),
notFound: (res, message = 'Not found') => formatResponse(res, types_1.HttpStatusCodes.NOT_FOUND, message),
conflict: (res, message = 'Conflict') => formatResponse(res, types_1.HttpStatusCodes.CONFLICT, message),
unprocessableEntity: (res, message = 'Unprocessable entity', errors) => formatResponse(res, types_1.HttpStatusCodes.UNPROCESSABLE_ENTITY, message, undefined, undefined, errors),
serverError: (res, message = 'Internal server error') => formatResponse(res, types_1.HttpStatusCodes.INTERNAL_SERVER_ERROR, message),
serviceUnavailable: (res, message = 'Service unavailable') => formatResponse(res, types_1.HttpStatusCodes.SERVICE_UNAVAILABLE, message),
custom: (res, statusCode, message, data, meta, errors) => formatResponse(res, statusCode, message, data, meta, errors),
};