const errorHandler = (err, req, res, next) => { console.error('Error occurred:', { message: err.message, stack: process.env.NODE_ENV === 'development' ? err.stack : undefined, path: req.path, method: req.method, timestamp: new Date().toISOString(), }); if (err.name === 'ValidationError') { return res.status(400).json({ error: 'Validation Error', message: err.message, details: err.details || {}, }); } if (err.name === 'SequelizeValidationError') { return res.status(400).json({ error: 'Database Validation Error', message: 'Invalid data provided', details: err.errors?.map(e => ({ field: e.path, message: e.message })) || [], }); } if (err.name === 'SequelizeUniqueConstraintError') { return res.status(409).json({ error: 'Conflict', message: 'Resource already exists', details: err.errors?.map(e => ({ field: e.path, message: e.message })) || [], }); } if (err.status || err.statusCode) { return res.status(err.status || err.statusCode).json({ error: err.name || 'Error', message: err.message, }); } if (err.code === 'OPENAI_API_ERROR') { return res.status(502).json({ error: 'OpenAI Service Error', message: 'There was an issue communicating with OpenAI. Please try again.', }); } res.status(500).json({ error: 'Internal Server Error', message: process.env.NODE_ENV === 'development' ? err.message : 'Something went wrong!', ...(process.env.NODE_ENV === 'development' && { stack: err.stack }), }); }; module.exports = errorHandler;