const { AppError } = require('../shared/errors'); const ResponseHandler = require('../shared/response.handler'); const config = require('../config'); const errorHandler = (err, req, res, next) => { if (config.isDevelopment) { console.error('Error caught by middleware:', err); } if (err instanceof AppError) { return ResponseHandler.error(res, err.message, err.statusCode, err.errors); } if ( err.name === 'SequelizeValidationError' || err.name === 'SequelizeUniqueConstraintError' ) { const errors = err.errors ? err.errors.map((e) => ({ field: e.path, message: e.message })) : null; return ResponseHandler.badRequest(res, 'Validation error', errors); } if (err.name === 'ValidationError' && err.errors) { const errors = Object.keys(err.errors).map((key) => ({ field: key, message: err.errors[key].message, })); return ResponseHandler.badRequest(res, 'Validation error', errors); } if (err.name === 'CastError') { return ResponseHandler.badRequest(res, 'Invalid ID format'); } const message = config.isDevelopment ? err.message : 'Internal server error'; return ResponseHandler.internalError(res, message, err); }; module.exports = errorHandler;