Ayla Painel

Arquitetura do Sistema

Visão Geral

O Ayla Painel é um monorepo gerenciado com pnpm workspaces, contendo três pacotes independentes que se comunicam por meio de tipos compartilhados. O backend expõe uma API REST consumida pelo frontend, ambos rodando em containers Docker separados com infraestrutura de banco de dados e fila.

Estrutura do Monorepo

ayla-painel/
├── packages/
│   ├── backend/           # API REST em NestJS
│   ├── frontend/          # Aplicação web em Next.js 15
│   └── shared/            # Tipos TypeScript compartilhados
├── docker-compose.dev.yml # Infraestrutura local (Postgres, Redis)
├── pnpm-workspace.yaml    # Configuração do workspace
└── package.json           # Scripts raiz (dev, build)

Requisitos

  • Node.js: >= 22
  • pnpm: >= 9

Scripts Raiz

Comando Descrição
pnpm dev Roda frontend + backend simultaneamente
pnpm dev:backend Apenas o backend
pnpm dev:frontend Apenas o frontend
pnpm build:backend Build de produção do backend
pnpm build:frontend Build de produção do frontend

Fluxo de Dados

  1. O usuário acessa o frontend (Next.js) e faz login via NextAuth (email/senha ou OAuth).
  2. O frontend armazena o JWT na sessão e o envia em todas as requisições via header Authorization: Bearer.
  3. O projeto ativo é enviado via header X-Projeto-Id para filtrar dados no contexto correto.
  4. O backend (NestJS) valida o JWT, extrai o usuário e delega a lógica de negócio ao Service.
  5. O Service consulta o banco via Prisma, sempre filtrando por idEmpresa (multi-tenancy).
  6. Rotinas de automação são enfileiradas via BullMQ (Redis) e executadas pelos Workers.
  7. Os Workers invocam a API da Anthropic (Claude) e salvam os resultados no banco.
  8. Os resultados ficam pendentes até aprovação humana pelo painel.

Padrão de Camadas (Backend)

O backend segue um padrão de três camadas:

Controller → Service → Prisma
  • Controller: Recebe requisições HTTP, extrai usuário/empresa do JWT e delega ao Service.
  • Service: Contém toda a lógica de negócio. Sempre recebe idEmpresa como parâmetro.
  • Prisma: Executa as queries no banco, sempre filtradas por idEmpresa.

Multi-Tenancy

O sistema é multi-tenant por projeto:

  • Cada empresa possui um ou mais Projetos.
  • O projeto ativo é enviado pelo frontend via header X-Projeto-Id.
  • Todas as queries do banco são filtradas pelo idEmpresa extraído do JWT.
  • O banco de dados utiliza múltiplos schemas PostgreSQL para separar domínios: seguranca, operacional, inteligencia, financeiro, marketing, entre outros.

Docker e Infraestrutura

O docker-compose.dev.yml sobe os serviços necessários para desenvolvimento:

Serviço Imagem Porta
Banco de Dados postgres:14-alpine 5432
Fila redis:7-alpine 6379
Backend NestJS (Dockerfile) 9002
Frontend Next.js (Dockerfile) 3002

Subir apenas a infraestrutura

docker compose -f docker-compose.dev.yml up postgres redis -d

Subir todos os serviços

docker compose -f docker-compose.dev.yml up

Pacote Shared

O pacote @ayla/shared centraliza todos os tipos TypeScript usados por backend e frontend, garantindo consistência e evitando duplicação de interfaces.

Módulo Conteúdo
auth.ts DTOs e respostas de autenticação
agente.ts Tipos do agente de IA (CoTipoAgente, AgenteDto)
habilidade.ts Habilidades/capacidades dos agentes
rotina.ts Rotinas de automação (cron, timezone, config)
execucao.ts Registros de execução (status, tokens, latência)
resultado.ts Resultados de execução (status de aprovação)
aprovacao.ts Trilha de auditoria de aprovações
integracao.ts Credenciais de integrações externas
documento.ts Documentos da base de conhecimento
chat.ts Tipos de mensagens do chat
empresa.ts Modelos de empresa