🗃️ Base de datos en Supabase
La base de datos de FixBoard se aloja en Supabase (PostgreSQL) y aplica RLS para aislamiento multi-tenant.
📦 Tablas principales
| Tabla | Propósito | Claves relevantes |
|---|---|---|
tenants | Tenants (talleres) | id (uuid, PK) |
users | Usuarios autenticados | id (uuid, PK), tenant_id (FK) |
clients | Clientes finales | id (uuid, PK), tenant_id (FK) |
repair_items | Reparaciones | id (uuid), client_id (FK), tenant_id (FK), status |
notifications | Mensajes enviados | id (uuid), repair_id (FK), type, status |
events_log | Auditoría y eventos | id (uuid), entity, action, meta, created_at |
🔗 Relaciones
mermaid
erDiagram
TENANTS ||--o{ USERS : has
TENANTS ||--o{ CLIENTS : has
CLIENTS ||--o{ REPAIR_ITEMS : owns
REPAIR_ITEMS ||--o{ NOTIFICATIONS : triggers
REPAIR_ITEMS ||--o{ EVENTS_LOG : logs👁️🗨️ Vistas
repair_summary— agregados por estado, tiempos medios y conteos por tenant.Definida con
SECURITY DEFINERpara exponer métricas sin romper RLS.
⚙️ Funciones y triggers
log_repair_status_change()— registra cambios de estado de reparaciones enevents_log.- Triggers
AFTER UPDATEsobrerepair_items(status).
🔒 Políticas RLS (ejemplos)
sql
create policy "tenant_isolation_select_clients"
on public.clients
for select
using (tenant_id::text = auth.jwt() ->> 'tenant_id');
create policy "tenant_isolation_ins_clients"
on public.clients
for insert
with check (tenant_id::text = auth.jwt() ->> 'tenant_id');Asegúrate de habilitar RLS:
sql
alter table public.clients enable row level security;