Skip to main content

Módulo Dashboard

src/app/modules/dashboard/

Expone métricas agregadas del tenant (contactos, usuarios, tickets, mensajes y etiquetas) para el panel de estadísticas. No define modelos propios: el servicio consulta directamente los modelos Contact, User, Ticket, Message y Label.

Archivos​

RutaRol
dashboard.controller.tsSeis endpoints GET, todos de solo lectura
dashboard.service.tsConsultas countDocuments y pipelines de agregación
dashboard.module.tsRegistra los modelos con MongooseModule.forFeature e importa UserModule
core/constants/dashboard.constants.tsNombres de rutas (API_ROUTES) y de query params (QUERY_STRING)

Endpoints​

Base: /api/v1/dashboard. El controlador solo usa @Auth(): no declara @RequirePermission, por lo que cualquier usuario autenticado del tenant puede consultarlos. Todas las consultas se filtran por el tenantId del usuario.

MétodoRutaQueryDescripción
GET/dashboard/overviewfrom, toTotales de contactos, usuarios, tickets y mensajes
GET/dashboard/top-contactslimit, from, toContactos con más tickets
GET/dashboard/top-userslimit, from, toAgentes con más tickets asignados
GET/dashboard/top-labelslimit, from, toEtiquetas más usadas en contactos
GET/dashboard/messages-timelinefrom, toMensajes por día
GET/dashboard/tickets-by-typefrom, toTickets agrupados por sendType

Las respuestas tienen la forma { data: { results } } y no incluyen message.

Respuestas​

  • overview: results es un objeto con totalContacts, activeContacts, totalUsers, activeUsers, totalTickets y totalMessages.
  • top-contacts: arreglo de { ticketCount, name, phone, isActive }; name vale Unknown si el contacto no existe.
  • top-users: arreglo de { ticketCount, name, username, email }; name concatena nombre y apellido.
  • top-labels: arreglo de { contactCount, name, color }; usa Unknown y #ccc como valores por defecto.
  • messages-timeline: arreglo de { date, count } con fecha en formato YYYY-MM-DD, ordenado de forma ascendente.
  • tickets-by-type: arreglo de { type, count } ordenado de mayor a menor.

DTOs y parámetros​

El módulo no define DTOs: los query params se leen individualmente con @Query('from'), @Query('to') y @Query('limit'), sin class-validator ni pipes. No hay body ni parámetros de ruta.

Parámetro (query)TipoObligatorioValidación / conversiónUsado en
fromstring (fecha)Nonew Date(value); si es inválida se ignora en silencio. Se aplica como createdAt >= fromTodos los endpoints
tostring (fecha)NoIgual que from; se ajusta a las 23:59:59.999 del día (hora del servidor) y se aplica como createdAt <= toTodos los endpoints
limitstring numéricoNo+limit, sin validación ni tope; por defecto 10top-contacts, top-users, top-labels

Gotchas​

  • overview aplica el filtro de fechas a contactos, tickets y mensajes, pero no a los totales de usuarios.
  • messages-timeline sin from ni to limita el resultado a los últimos 30 días.
  • limit se convierte con +limit sin validación ni tope; un valor no numérico produce NaN y puede fallar el $limit del pipeline.
  • Los filtros de fecha usan createdAt, no la fecha de último movimiento del ticket.
  • Los top-users consideran solo tickets con UserId asignado.