Skip to content

feat: added event dashboard and event states#29

Merged
Abisaac1809 merged 4 commits into
developmentfrom
feat/event-dashboard
Jun 6, 2026
Merged

feat: added event dashboard and event states#29
Abisaac1809 merged 4 commits into
developmentfrom
feat/event-dashboard

Conversation

@cristian907

Copy link
Copy Markdown
Owner

PR: Módulo de Dashboard en Tiempo Real, Ajustes de Estado y Restricciones de Acceso de Eventos

📝 Descripción

Este Pull Request implementa el Módulo de Dashboard del Evento en tiempo real (de solo lectura), la funcionalidad avanzada para Ajustes de Estado del Evento en la vista de configuración general, el control financiero de ajuste de vuelto y advertencias de pago incompleto en taquilla, y un sistema robusto de bloqueo operacional inmediato en los módulos de venta y puerta si el evento no se encuentra activo (DRAFT o CANCELLED).


🛠️ Cambios Realizados

1. Capa Compartida (packages/shared)

  • [dashboard.types.ts]: Definición de contratos y esquemas para KPIs agregados (EventDashboardSummary) y eventos SSE de ingreso (CheckInEvent).
  • [event.schemas.ts]: Modificado el esquema de eventos para soportar los estados DRAFT, ACTIVE y CANCELLED.

2. Backend / API (packages/api)

  • Módulo de Dashboard (dashboard/):
    • Implementación de consultas Prisma avanzadas y agregaciones SQL en PrismaDashboardRepository para KPIs del Dashboard.
    • Lógica financiera para agrupar desgloses y escalar proporcionalmente los pagos, deduciendo el vuelto entregado a los clientes para no inflar la facturación neta registrada en el sistema.
    • Controlador y rutas protegidas con validación de roles (authorizeEventRole('admin')).
    • Endpoint SSE /events/:eventId/dashboard/stream con envío de heartbeats periódicos (pings) y limpieza automatizada de recursos al desconectarse el cliente.
  • Tiempo Real de Asistencia (EventCheckInEmitter):
    • Implementación de un pub/sub en memoria basado en EventEmitter para notificar check-ins exitosos a los clientes SSE conectados.
    • Conexión en AccessService tras check-ins QR (scanQr) o manuales (manualUse) para recalcular aforo y publicar eventos.
  • Restricción de Operaciones y Validación de Estado:
    • Validación en sales.service.ts para denegar la creación de ventas (EventNotActiveError) si el evento no está ACTIVE.
    • Validación en access.service.ts para rechazar validaciones QR/manuales y búsquedas por cédula si el evento no está ACTIVE.

3. Frontend / Web (packages/web)

  • Dashboard Premium (EventDashboardPage.tsx):
    • Diseño de dashboard moderno con gráficos interactivos y adaptativos diseñados con SVG puros:
      • Gráfico de Área: Progresión temporal de ventas e ingresos equivalentes.
      • Gráfico de Dona: Distribución porcentual por método de pago.
      • Gráfico de Línea: Flujo de ingresos en puerta en tiempo real.
      • Indicadores de estado de conexión SSE y cuenta regresiva.
    • Formateo inteligente de rango de período real para eventos de un único día y multi-día.
    • Notificaciones Toast flotantes con animaciones que alertan en vivo cuando un participante realiza un check-in.
  • Ajustes y Confirmación Crítica (EventConfigPage.tsx):
    • Tarjetas interactivas con hover y micro-animaciones para transicionar entre los estados BORRADOR, ACTIVO y CANCELADO.
    • Modal grande de confirmación con desenfoque de fondo y control de seguridad obligatorio (escribir CANCELAR o el nombre exacto del evento) para confirmación de cancelaciones.
    • Sincronización instantánea en el contexto React para los filtros por pestaña de la vista general de eventos.
  • Taquilla y Advertencias de Pago (SalesPage.tsx):
    • Banner visual rojo dinámico en el paso de pagos indicando el monto exacto faltante para completar la venta (en USD/EUR y VES).
  • Bloqueo Inmediato y Temprano (Early Return):
    • Modificación de SalesPage.tsx y DoorCheckPage.tsx para interceptar el renderizado tempranamente si el estado es inactivo.
    • Esto previene que se inicien llamadas al API en segundo plano o que se monte el visor de cámara / scanner QR (QrScannerView), evitando solicitudes de permisos innecesarios de hardware al estar inactivo.
    • El botón de redirección de ajustes generales se oculta automáticamente a menos de que el usuario cuente con rol ADMIN u ORGANIZER (eventRole).

🧪 Plan de Verificación

Pruebas Automatizadas

  1. Linter: Ejecución exitosa de pnpm run lint en todos los proyectos del espacio de trabajo.
  2. Type-Check: Verificación de tipado estricto exitosa mediante pnpm run type-check.
  3. Build: Compilación limpia en producción (pnpm run build).

Verificación Manual (Paso a Paso)

  1. Iniciar sesión como Admin e ir a la configuración de un evento para cambiar su estado a BORRADOR o CANCELADO.
  2. Verificar que al hacer clic en Registro de Ventas o Registros en Puerta, la pantalla se bloquee de forma inmediata con un banner centrado y que no se carguen llamadas al backend ni se solicite permiso de cámara.
  3. Verificar que si el usuario de la sesión es un colaborador (COLLABORATOR o SCANNER), el botón para redirigirse a los ajustes generales no aparezca en la tarjeta de bloqueo.
  4. Con el evento activo, realizar una compra en taquilla ingresando un pago superior para validar que el vuelto se deduzca correctamente de la base de datos (última forma de pago) y no afecte los KPIs del Dashboard.
  5. Escanear un QR en la vista de puerta y validar la actualización SSE en tiempo real y el Toast animado en el Dashboard de administración.

close #15

Copilot AI review requested due to automatic review settings June 5, 2026 04:00

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a real-time (SSE) event dashboard module plus introduces event operational states and exchange-rate sourcing (BCV/paralelo/custom) that affect ticket pricing and sales/access flows across API + Web.

Changes:

  • Adds API dashboard module with summary endpoint + SSE stream, plus a shared dashboard contract (EventDashboardSummary, CheckInEvent).
  • Adds BCV rate scraping/provider + persistence, and extends exchange-rate/event models to support rateSource/auto-sync.
  • Enforces event status gating (DRAFT/CANCELLED block sales and door access) and updates Web UX to early-return/lock UI when inactive.

Reviewed changes

Copilot reviewed 70 out of 72 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
pnpm-lock.yaml Locks new dependencies (notably cheerio/undici) used for BCV scraping.
packages/web/vite.config.ts Adjusts dependency optimization config for the web app.
packages/web/src/features/events/services/dashboardService.ts Adds web client for dashboard summary endpoint.
packages/web/src/features/events/services/bcvService.ts Adds web client for BCV rate endpoints.
packages/web/src/features/events/pages/TicketTypesPage.tsx Updates ticket type pricing display/inputs for rateSource + usdPrice.
packages/web/src/features/events/pages/SalesPage.tsx Enhances sales UI (multi-currency, change, incomplete payment warning, inactive-event lock).
packages/web/src/features/events/pages/EventDetailPage.tsx Role-based default sub-route redirects and guards.
packages/web/src/features/events/pages/EventConfigPage.tsx Adds event status controls + BCV rate UI + rateSource selector.
packages/web/src/features/events/pages/DoorCheckPage.tsx Adds early-return lock UI when event is inactive.
packages/web/src/features/events/hooks/useCurrentExchangeRate.ts Adds refetch-on-event and error logging for exchange rate.
packages/web/src/components/Layout.tsx Restricts dashboard nav item to ADMIN/ORGANIZER.
packages/shared/src/utils/currency.ts Adds divisa conversion helpers and EUR/USD derivation helper.
packages/shared/src/types/ticketType.types.ts Extends currency types and adds usdPrice to ticket types.
packages/shared/src/types/index.ts Re-exports new BCV and dashboard types.
packages/shared/src/types/exchangeRate.types.ts Adds source and makes setBy* optional.
packages/shared/src/types/event.types.ts Adds autoSyncBcv and rateSource to event type.
packages/shared/src/types/dashboard.types.ts Introduces dashboard contracts + SSE event naming.
packages/shared/src/types/bcv.types.ts Adds BCV rate DTO contract.
packages/shared/src/schemas/ticketType.schemas.ts Extends currency enum to include EUR.
packages/shared/src/schemas/sale.schemas.ts Improves customer validation and empty-string preprocessing.
packages/shared/src/schemas/event.schemas.ts Adds autoSyncBcv, rateSource, and status to event schemas.
packages/api/tsconfig.json Formatting-only tsconfig include change.
packages/api/src/modules/tickets/ticket-crypto.service.ts Formatting fix in signature verification method.
packages/api/src/modules/ticket-types/ticket-types.service.ts Adds usdPrice handling and rate-aware ticket pricing.
packages/api/src/modules/ticket-types/ticket-types.mapper.ts Maps usdPrice to API type.
packages/api/src/modules/ticket-types/index.ts Injects exchange rate repository into ticket types module.
packages/api/src/modules/sales/sales.service.ts Adds event status gating + multi-currency payment handling + change adjustment.
packages/api/src/modules/sales/index.ts Wires new repositories into sales module.
packages/api/src/modules/exchange-rates/exchange-rates.service.ts Adds optional setBy and exchange-rate source.
packages/api/src/modules/exchange-rates/exchange-rates.mapper.ts Maps source and optional setBy* fields.
packages/api/src/modules/events/events.service.ts Adds rateSource/autoSync/status update handling and ticket type rewrites on CUSTOM.
packages/api/src/modules/events/events.mapper.ts Maps new event fields to shared type.
packages/api/src/modules/dashboard/index.ts Registers dashboard module wiring.
packages/api/src/modules/dashboard/dashboard.service.ts Adds dashboard summary service wrapper.
packages/api/src/modules/dashboard/dashboard.routes.ts Adds dashboard routes + SSE stream route with admin role guard.
packages/api/src/modules/dashboard/dashboard.controller.ts Implements dashboard summary handler + SSE streaming with heartbeat/cleanup.
packages/api/src/modules/bcv/index.ts Registers BCV module wiring.
packages/api/src/modules/bcv/bcv.service.ts Provides BCV rate read/sync service.
packages/api/src/modules/bcv/bcv.routes.ts Adds BCV endpoints + auth/admin protection.
packages/api/src/modules/bcv/bcv.mapper.ts Maps persisted BCV rate to API DTO.
packages/api/src/modules/bcv/bcv.controller.ts Adds controller for BCV read/sync endpoints.
packages/api/src/modules/access/index.ts Injects event repository into access module.
packages/api/src/modules/access/access.service.ts Adds event status gating + publishes check-in SSE events.
packages/api/src/modules/access/access.controller.ts Hardens requestContext usage before calling access service.
packages/api/src/infrastructure/repositories/PrismaTicketTypeRepository.ts Persists/maps new usdPrice field.
packages/api/src/infrastructure/repositories/PrismaTicketRepository.ts Adds countUsedByEvent for attendance recomputation.
packages/api/src/infrastructure/repositories/PrismaOrderRepository.ts Persists order currency based on item currency.
packages/api/src/infrastructure/repositories/PrismaExchangeRateRepository.ts Supports nullable setBy and adds source mapping/persistence.
packages/api/src/infrastructure/repositories/PrismaEventRepository.ts Persists/maps new event fields + adds auto-sync event query.
packages/api/src/infrastructure/repositories/PrismaDashboardRepository.ts Implements dashboard aggregation and payment scaling logic.
packages/api/src/infrastructure/repositories/PrismaBcvRateRepository.ts Adds BCV rate persistence and retrieval.
packages/api/src/infrastructure/EventCheckInEmitter.ts Adds in-memory pub/sub for check-ins.
packages/api/src/infrastructure/container.ts Wires new modules, repositories, and provider initialization.
packages/api/src/infrastructure/bcv/scraper.ts Implements BCV + paralelo rate scraping/fetching.
packages/api/src/infrastructure/bcv/provider.ts Adds cached provider + event auto-sync behavior.
packages/api/src/index.ts Adds auth-specific rate limiter + initializes providers before listen.
packages/api/src/core/interfaces/repositories/ITicketTypeRepository.ts Extends repository contract for usdPrice.
packages/api/src/core/interfaces/repositories/ITicketRepository.ts Adds countUsedByEvent.
packages/api/src/core/interfaces/repositories/IExchangeRateRepository.ts Adds source and optional setBy to create contract.
packages/api/src/core/interfaces/repositories/IEventRepository.ts Extends event repo contract with rateSource/status and auto-sync query.
packages/api/src/core/interfaces/repositories/IDashboardRepository.ts Adds dashboard repository interface.
packages/api/src/core/interfaces/repositories/IBcvRateRepository.ts Adds BCV rate repository interface.
packages/api/src/core/errors/BusinessErrors.ts Adds EventNotActiveError business error.
packages/api/src/core/entities/TicketType.ts Adds usdPrice to domain entity.
packages/api/src/core/entities/ExchangeRate.ts Adds source and nullable setBy* to domain entity.
packages/api/src/core/entities/Event.ts Adds autoSyncBcv and rateSource to domain entity.
packages/api/src/core/entities/BcvRate.ts Adds BCV rate domain entity.
packages/api/prisma/schema.prisma Adds BCV tables/fields and extends Event/TicketType/ExchangeRate schema.
packages/api/prisma/migrations/20260604191246_add_rate_source_and_usdt/migration.sql Adds rateSource/usdtRate/usdPrice columns.
packages/api/prisma/migrations/20260602032103_add_bcv/migration.sql Introduces BCV model and updates ExchangeRate constraints.
packages/api/package.json Adds cheerio/undici dependencies for scraping/fetching.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/api/package.json
Comment thread packages/web/src/features/events/pages/EventConfigPage.tsx Outdated
Comment thread packages/web/src/features/events/pages/SalesPage.tsx Outdated
Comment thread packages/api/src/infrastructure/repositories/PrismaDashboardRepository.ts Outdated
Comment thread packages/api/src/modules/events/events.service.ts
Comment thread packages/api/src/modules/sales/sales.service.ts
Comment thread packages/api/src/infrastructure/EventCheckInEmitter.ts
@cristian907 cristian907 closed this Jun 5, 2026
@cristian907 cristian907 reopened this Jun 5, 2026
@cristian907 cristian907 self-assigned this Jun 5, 2026
@cristian907 cristian907 requested a review from Abisaac1809 June 5, 2026 05:28
@josean798 josean798 requested review from josean798 and removed request for Abisaac1809 June 5, 2026 17:26
@Abisaac1809 Abisaac1809 merged commit 4e56601 into development Jun 6, 2026
1 check passed
@Abisaac1809 Abisaac1809 deleted the feat/event-dashboard branch June 6, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants