agent_view, agent_atc, agent_purchase, …) com tipos de evento personalizados registrados via o registro de Tipos de Evento Personalizados.
Composição
Um dashboard pertence a uma única marca. Cada widget contém:- type — um dos seis tipos iniciais (
counter,time_series,breakdown_bar,funnel,table,top_n) - config — opções específicas do tipo, validadas pelo schema zod do widget. Título e os parâmetros de agregação por widget vivem dentro do
config(não há colunastitleouaggregationseparadas na linha do widget) - position — coordenadas de grid
(x, y, w, h)para react-grid-layout
agent_events no DO Postgres com SQL parametrizado — workspace_id e brand_id são sempre adicionados ao predicado a partir do contexto da requisição, independente dos filtros enviados pelo usuário, garantindo isolamento por marca por construção. Os resultados são armazenados em cache no Redis por 60 segundos.
Papéis
- Members podem visualizar dashboards
- Owners e admins podem criar, editar e excluir
Contexto de marca
Toda leitura e escrita requer contexto de marca. Envie como:- Header
X-Active-Brand: <uuid>(preferido), ou - Query
?brand_id=<uuid>(alternativa para clientes que não conseguem enviar headers)
POST /aggregate, o header / query é a única fonte de contexto de marca — o corpo da requisição não carrega marca. Isso elimina a classe de bugs em que um campo do body discorda do header.
Veja também
- API de Dashboards — operações REST
- Marcas — a unidade de isolamento que possui cada dashboard