Files

5.9 KiB

Help Desk - Documentación del Proyecto

Estructura del Proyecto

help_desk/
├── app.js                      # Entry point, configura Express
├── package.json                 # Dependencias y scripts
├── .env                         # Variables de entorno
├── .gitignore
├── config/
│   ├── db.js                    # Conexión a MySQL/MariaDB con mysql2
│   ├── init.sql                 # Script SQL inicial
│   └── setup.js                 # Script Node para inicializar BD
├── middleware/
│   └── auth.js                  # Middleware: isAuthenticated, isAdmin, isAgent, isClient
├── models/
│   ├── User.js                  # CRUD usuarios
│   ├── Ticket.js                # CRUD tickets + respuestas
│   └── Department.js            # CRUD departamentos
├── routes/
│   ├── auth.js                  # Login, Register, Logout
│   ├── client.js                # Rutas para clientes (ver/crear tickets)
│   ├── agent.js                 # Rutas para agentes (gestionar tickets)
│   └── admin.js                 # Rutas para admin (usuarios, departamentos)
├── views/
│   ├── partials/
│   │   ├── header.ejs           # Head HTML + navbar
│   │   ├── footer.ejs           # Scripts + cierre
│   │   ├── navbar.ejs           # Barra de navegación superior
│   │   └── sidebar.ejs          # Menú lateral por rol
│   ├── auth/
│   │   ├── login.ejs
│   │   └── register.ejs
│   ├── client/
│   │   ├── dashboard.ejs        # Lista de tickets del cliente
│   │   ├── new-ticket.ejs       # Formulario crear ticket
│   │   └── view-ticket.ejs      # Ver ticket + respuestas
│   ├── agent/
│   │   ├── dashboard.ejs        # Panel con todos los tickets
│   │   └── view-ticket.ejs      # Ver ticket + responder + cambiar estado
│   └── admin/
│       ├── dashboard.ejs        # Estadísticas y accesos rápidos
│       ├── users.ejs            # CRUD usuarios
│       ├── create-user.ejs      # Formulario crear usuario
│       └── departments.ejs      # CRUD departamentos con modales
├── public/
│   ├── css/
│   │   └── style.css            # Estilos personalizados
│   └── js/
│       └── main.js              # JS del lado cliente
└── proyecto.md, memoria.md, readme.md

Base de Datos (MariaDB/MySQL)

Tabla: users

Campo Tipo Descripción
id INT AUTO_INCREMENT PK ID único
nombre VARCHAR(100) NOT NULL Nombre completo
email VARCHAR(100) NOT NULL UNIQUE Correo electrónico
password VARCHAR(255) NOT NULL Hash bcrypt
rol ENUM('admin','agent','client') DEFAULT 'client' Rol del usuario
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Fecha de registro

Tabla: departments

Campo Tipo Descripción
id INT AUTO_INCREMENT PK ID único
nombre VARCHAR(100) NOT NULL Nombre del departamento
descripcion TEXT Descripción
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Fecha de creación

Tabla: tickets

Campo Tipo Descripción
id INT AUTO_INCREMENT PK ID único (# ticket)
user_id INT NOT NULL FK → users.id Cliente creador
department_id INT FK → departments.id Departamento
asunto VARCHAR(200) NOT NULL Asunto del ticket
mensaje TEXT NOT NULL Descripción del problema
status ENUM('abierto','en_progreso','cerrado') DEFAULT 'abierto' Estado
prioridad ENUM('baja','media','alta','critica') DEFAULT 'media' Prioridad
assigned_to INT FK → users.id Agente asignado
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Fecha de creación
updated_at TIMESTAMP ON UPDATE Última actualización

Tabla: ticket_respuestas

Campo Tipo Descripción
id INT AUTO_INCREMENT PK ID único
ticket_id INT NOT NULL FK → tickets.id Ticket relacionado
user_id INT NOT NULL FK → users.id Quién respondió
mensaje TEXT NOT NULL Contenido respuesta
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Fecha de respuesta

Roles y Permisos

Rol Descripción
admin Acceso total: gestiona usuarios, deptos, tickets
agent Gestiona tickets asignados, responde, cambia estado
client Crea tickets, ve sus propios tickets, responde

Tecnologías

  • Backend: Node.js + Express 5
  • Motor de plantillas: EJS
  • Base de Datos: MariaDB/MySQL (mysql2)
  • Autenticación: express-session + bcryptjs
  • Frontend: Bootstrap 5 + Font Awesome
  • Middleware: morgan, connect-flash, express-fileupload

Scripts

npm start       # Iniciar servidor producción
npm run dev     # Iniciar con nodemon (auto-reload)
node config/setup.js  # Inicializar BD (crear tablas + datos seed)

Credenciales por defecto