const express = require('express'); const session = require('express-session'); const flash = require('connect-flash'); const morgan = require('morgan'); const path = require('path'); const dotenv = require('dotenv'); const fileUpload = require('express-fileupload'); const cookieParser = require('cookie-parser'); const { loadCompany } = require('./middleware/auth'); dotenv.config(); const authRoutes = require('./routes/auth'); const clientRoutes = require('./routes/client'); const agentRoutes = require('./routes/agent'); const adminRoutes = require('./routes/admin'); const saasRoutes = require('./routes/saas'); const companyRoutes = require('./routes/company'); const app = express(); app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, 'views')); app.use(morgan('dev')); app.use(express.urlencoded({ extended: false })); app.use(express.json()); app.use(cookieParser()); app.use(session({ secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false })); app.use(flash()); app.use(fileUpload()); app.use(express.static(path.join(__dirname, 'public'))); app.use((req, res, next) => { res.locals.success_msg = req.flash('success_msg'); res.locals.error_msg = req.flash('error_msg'); res.locals.error = req.flash('error'); res.locals.user = req.session.user || null; next(); }); app.use(loadCompany); app.use('/', authRoutes); app.use('/client', clientRoutes); app.use('/agent', agentRoutes); app.use('/admin', adminRoutes); app.use('/saas', saasRoutes); app.use('/company', companyRoutes); const { reportarError } = require('./config/errorReporter'); app.get('/', (req, res) => { if (req.session.user) { if (req.session.user.rol === 'superadmin') return res.redirect('/saas/companies'); if (req.session.user.rol === 'admin') return res.redirect('/admin/dashboard'); if (req.session.user.rol === 'agent') return res.redirect('/agent/dashboard'); return res.redirect('/client/dashboard'); } res.redirect('/login'); }); // Middleware global de reporte de errores (API-SIGMA-WEBCONTROL) app.use((err, req, res, next) => { console.error('[App Error]:', err); reportarError({ mensaje: err.message || 'Error no controlado en Express', detalle: err.stack || String(err), categoria: 'sistema', nivel: 'error', codigo: err.status || 500, metodo: req.method, clase: req.path, usuario: req.session?.user?.email || null, cuenta: req.session?.user?.company_id ? String(req.session.user.company_id) : null }); if (res.headersSent) { return next(err); } res.status(err.status || 500).send('Error interno del servidor. El incidente ha sido registrado en la bitácora.'); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Servidor corriendo en puerto ${PORT}`); });