Files
help_desk/app.js
T

92 lines
2.8 KiB
JavaScript

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}`);
});