Edge Functions para notificaciones automáticas
Clase 16 de 17 • Curso de Supabase Avanzado
Contenido del curso
Autenticación
CRUD de la aplicación
Seguridad avanzada
Dashboard con Supabase Realtime
Emails y Resend para Suplatzigram
MCP y Edge Functions
Construye un flujo de notificaciones robusto con Supabase combinando Edge Functions y Realtime. Sin depender del frontend, la base de datos dispara un webhook que invoca una función en el backend para registrar likes y comments, y notificar al usuario con precisión.
¿Qué arquitectura de notificaciones se implementa con Supabase?
Este diseño se basa en eventos automáticos: Supabase detecta un like o comment, llama a una Edge Function y persiste una notificación, que luego se consume en tiempo real desde la interfaz.
- La base de datos dispara un webhook hacia la Edge Function al ocurrir el evento.
- La función recibe: usuario que interactúa, post afectado, dueño del post y, si aplica, el mensaje.
- Se puede enviar un correo, guardar notificación interna o mostrar un toast en el panel del usuario.
- En la UI se añade una campanita de notificaciones que refleja cambios en tiempo real con Realtime.
- Ventajas clave: patrón profesional, robusto y reactivo que desacopla el frontend del procesamiento de eventos.
¿Cómo crear la tabla de notificaciones con Realtime activado?
Se crea desde el editor de SQL en el panel de Supabase. La sentencia define la tabla y activa la publicación en Realtime desde el propio script, siguiendo las recomendaciones de escalabilidad.
- Campos esenciales: ID, user ID (referencia a la tabla out users), actor ID, tipo de notificación (like/comment), post destino, mensaje del comment y fecha de creación.
- Se agrega un índice para mejorar rendimiento en consultas.
- Se habilita la publicación a Realtime para esta tabla, de modo que la UI reciba actualizaciones en vivo.
- Resultado visible en el panel: la tabla Notifications aparece con Realtime activado sin pasos manuales extra.
¿Cómo se implementa y despliega la Edge Function en Deno?
Las Edge Functions de Supabase corren en Deno (no en Node). Se parte de una plantilla que usa serve de Deno, create client de Supabase, maneja headers de CORS y responde a métodos HTTP como OPTIONS y POST. Tras nombrarla (por ejemplo, send notification), se despliega y queda disponible vía URL HTTP con estadísticas, invocaciones y logs.
¿Cómo validar y construir el payload?
- Tipo: like o comment.
- Identificadores: post ID, actor ID y post owner ID.
- Mensaje: cuerpo del comentario cuando el tipo es comment.
- Validación: si falta un dato, responde con error y estado 400.
- Regla esencial: no notificar si el actor es el dueño del post.
- Obtención de contexto: consulta el perfil para conseguir el nombre de usuario del actor y construir el mensaje a guardar.
- Inserción: usa el cliente de Supabase para crear el registro en la tabla Notifications con
select()ysingle()y manejo de errores. - Seguridad: el cliente usa secrets configuradas en el entorno del proyecto.
¿Cómo conectar el frontend y consumir en tiempo real?
- En la página principal (app/page.tsx), las funciones
handle likeyhandle commentinvocan la Edge Function send notification tras un like o al publicar un comentario. - Cuerpo de la invocación: tipo, post ID, actor ID, post owner ID y, si aplica, el mensaje.
- En la campanita (notification bell), la UI se suscribe por Realtime a un canal de cambios de Postgres: escucha
inserten la tabla Notifications filtrando por el usuario logueado. - Lógica de lectura: si
readesfalse, se muestra la burbuja; al marcar como leída, cambia atruey desaparece. - Flujo completo: evento → función → inserción → Realtime → UI actualizada.
¿Qué métricas y estados puedes revisar tras el despliegue?
- La función queda accesible por URL HTTP, con panel de uso: últimos 15 min, 1 h, 3 h y 1 día.
- En Invocations aparecen llamadas separadas:
OPTIONSyPOST. - Se evidencia el payload: tipo
comment, post ID y el mensaje guardado para la notificación. - Los logs ayudan a depurar errores de despliegue o respuesta.
- Estado de lectura:
read: falseal llegar;truedespués de marcar como leída en la interfaz. - Persistencia paralela: el comentario va a la tabla de comments; la notificación se guarda en Notifications.
¿Te gustaría profundizar en algún paso o ver el patrón aplicado a otros eventos del producto? Cuéntame en los comentarios cómo integrarías correos, toasts o notificaciones internas en tu caso.