Para ofrecer una experiencia inmersiva y evitar que los organizadores tengan que recargar la página constantemente, EncuentroDeFe utiliza Pusher (WebSockets) para transmitir eventos críticos en milisegundos.
Canales (Channels) y Eventos
Actualmente, el sistema emite eventos desde el servidor (Server Actions de Next.js) hacia los clientes suscritos.
Canal: admin-dashboard
Suscrito por los usuarios con rol admin y organizer que tienen abierta la pantalla de pagos o el dashboard de inicio.
-
Evento:
payment-uploaded- Emisor: Un usuario sube un comprobante de Yape/Plin.
- Acción Cliente: Muestra una notificación Toast (ej: “¡Nuevo pago de Juan Pérez pendiente de revisión!”) y actualiza la tabla de pagos automáticamente sin recargar.
-
Evento:
payment-audited- Emisor: Un organizador aprueba o rechaza un pago.
- Acción Cliente: Remueve el pago de la cola de pendientes para el resto del equipo, evitando que dos organizadores intenten verificar el mismo pago simultáneamente.
Canal: door-scanner
Utilizado en la vista móvil de los organizadores que están en la puerta del evento con el escáner QR.
- Evento:
ticket-scanned- Emisor: El celular del organizador lee un QR válido y lo reporta a la base de datos.
- Acción Cliente: Suma
+1al contador global de “Asistentes en Sala” en el Dashboard de los administradores en tiempo real.
Cómo suscribirse en el Frontend
Si estás desarrollando una nueva pantalla y necesitas escuchar eventos, puedes usar el cliente de Pusher preconfigurado en el frontend de React.
'use client';
import { useEffect } from 'react';
import { pusherClient } from '@/lib/pusher'; // Instancia cliente
export default function ContadorEnVivo() {
useEffect(() => {
// 1. Suscribirse al canal
const channel = pusherClient.subscribe('door-scanner');
// 2. Escuchar un evento específico
channel.bind('ticket-scanned', (data: { name: string, time: string }) => {
console.log(`${data.name} acaba de entrar al auditorio a las ${data.time}`);
// Actualizar estado de React aquí...
});
// 3. Limpiar suscripción al desmontar
return () => {
pusherClient.unsubscribe('door-scanner');
};
}, []);
return <div>Monitoreando entrada...</div>;
}
[!NOTE]
Pusher tiene cuotas gratuitas (hasta 200,000 mensajes diarios). Para la escala de una iglesia o comunidad local, la capa gratuita (Sandbox) es más que suficiente.