const { env } = require('../configs/env'); const { logError } = require('../utils/errorLogger'); const HTTP_CODE_MAP = { 400: 'BAD_REQUEST', 401: 'UNAUTHORIZED', 403: 'FORBIDDEN', 404: 'NOT_FOUND', 409: 'CONFLICT', 413: 'PAYLOAD_TOO_LARGE', 422: 'UNPROCESSABLE_ENTITY', 429: 'RATE_LIMIT_EXCEEDED', 503: 'SERVICE_UNAVAILABLE', }; const getCode = (statusCode) => HTTP_CODE_MAP[statusCode] || (statusCode >= 500 ? 'INTERNAL_SERVER_ERROR' : 'REQUEST_FAILED'); const errorHandler = (err, req, res, _next) => { let statusCode = err.statusCode || err.status || (res.statusCode === 200 ? 500 : res.statusCode); let message = err.message || 'Something went wrong'; if (err?.name === 'MulterError') { statusCode = 400; if (err.code === 'LIMIT_FILE_SIZE') { message = 'File is too large. Please check the maximum upload size for this action.'; } else if (err.code === 'LIMIT_UNEXPECTED_FILE') { const field = String(err.field || '').trim(); message = field ? `Unexpected upload field: ${field}. Please upload the file using the correct form field.` : 'Unexpected upload field. Please upload the file using the correct form field.'; } } const code = getCode(statusCode); if (statusCode >= 500) { logError(err, { req, statusCode, code }); if (env.isProduction) { message = 'An internal error occurred. Please try again later.'; } } res.status(statusCode).json({ success: false, message, code }); }; const notFound = (req, res) => { res.status(404).json({ success: false, message: `Not found: ${req.originalUrl}`, code: 'NOT_FOUND', }); }; module.exports = { errorHandler, notFound };