🧩 Caso 14: ▲ Next.js 15 → 🌉 n8n → ⚡ Supabase (Postgres + RLS)#
Primer caso BaaS de la matriz. Reproduce el núcleo de Supabase — Postgres + PostgREST + Row Level Security (RLS) — sin la suite completa: Next.js emite y el receiver persiste vía PostgREST, gobernado por las políticas RLS del rol web_anon.
🏗️ Arquitectura del Flujo#
- 📤 Origen —
origin/app/api/emit/route.js: Route Handler de Next.js 15 (App Router) que reenvía los posts a n8n (también hay un emisor CLI enorigin/emit.mjs). - 🌉 Puente — n8n: guardrails canónicos (fingerprint → circuit breaker → idempotencia → HTTP con reintentos → DLQ).
- 📥 Destino —
dest/index.js: receiver que traduce el contrato REST del laboratorio a llamadas contra PostgREST (upsert víaPrefer: resolution=merge-duplicates). - 📁 Persistencia — Postgres 16 con RLS: la tabla
social_postsestá protegida y una política permite acceso al rolweb_anonque PostgREST asume.
Nota
Supabase-lite: Postgres + PostgREST + RLS son el corazón de Supabase (la suite completa añade GoTrue, Realtime, Storage, Kong…). Aquí se demuestran el patrón BaaS y las políticas RLS sin ~6 contenedores extra.
🚀 Cómo levantarlo#
bash
docker-compose --profile case14 up -d # Postgres (RLS) + PostgREST + receiver| Servicio | Rol | Puerto host |
|---|---|---|
db-postgres-14 | Postgres 16 + RLS | interno |
postgrest-14 | PostgREST (API REST sobre Postgres) | interno (:3000) |
dest-supabase-14 | Receiver + dashboard | 8094 |
- Dashboard del caso: http://localhost:8094
- Probar desde el dashboard maestro: http://localhost:8080 → tarjeta CASE-14.
🎯 Objetivos didácticos#
- BaaS: exponer una tabla como API REST sin escribir backend (PostgREST).
- Row Level Security: políticas declarativas que gobiernan el acceso por rol.
- Next.js App Router: Route Handlers como capa de emisión.
⚠️ Consideraciones (modelo del laboratorio)#
- Puerto
8094=8080 + 14(regla canónica, ver docs/PORTS.md). - La política RLS del lab es permisiva (
web_anonfull); en producción se restringiría por usuario/tenant vía JWT. - El receiver valida
id/text(→ HTTP 422).
✅ Estado#
Implementado y verificado (build + boot + health). Parte del Lote 4 del roadmap v5.0 → v4.8.