Files
aggios.app/README.md
2025-12-24 18:01:47 -03:00

10 KiB
Raw Permalink Blame History

Aggios App

Plataforma composta por serviços de autenticação, painel administrativo (superadmin) e site institucional da Aggios, orquestrados via Docker Compose.

Visão geral

  • Objetivo: permitir que superadministradores cadastrem e gerenciem agências (tenants) enquanto o site institucional apresenta informações públicas da empresa.
  • Stack: Go (backend), Next.js 16 (dashboard e site), PostgreSQL, Traefik, Docker.
  • Status: Sistema multi-tenant completo com CRM Beta (leads, funis, campanhas), portal do cliente, segurança cross-tenant validada, branding dinâmico e file serving via API.

Componentes principais

  • backend/: API Go com serviços de autenticação, operadores e CRUD de agências (endpoints /api/admin/agencies e /api/admin/agencies/{id}). Inclui handlers para CRM (leads, funis, campanhas), portal do cliente e exportação de dados.
  • front-end-agency/: Painel Next.js para agências - branding dinâmico, upload de logos, gestão de perfil, CRM completo com Kanban, portal de cadastro de clientes e autenticação tenant-aware.
  • front-end-dash.aggios.app/: painel Next.js login do superadmin, listagem de agências, exibição detalhada e exclusão definitiva.
  • frontend-aggios.app/: site institucional Next.js com suporte a temas claro/escuro e compartilhamento de tokens de design.
  • backend/internal/data/postgres/: scripts de inicialização do banco (estrutura base de tenants e usuários) + migrações para CRM, funis e autenticação de clientes.
  • traefik/: reverse proxy e certificados automatizados.

Funcionalidades entregues

v1.5 - CRM Beta: Leads, Funis e Portal do Cliente (24/12/2025)

  • 🎯 Gestão Completa de Leads:

    • CRUD completo de leads com status, origem e pontuação
    • Sistema de importação de leads (CSV/Excel)
    • Filtros avançados por status, origem, responsável e cliente
    • Associação de leads a clientes específicos
    • Timeline de atividades e histórico de interações
  • 📊 Funis de Vendas (Sales Funnels):

    • Criação e gestão de múltiplos funis personalizados
    • Board Kanban interativo com drag-and-drop
    • Estágios customizáveis com cores e ícones
    • Vinculação de funis a campanhas específicas
    • Métricas e conversão por estágio
  • 🎪 Gestão de Campanhas:

    • Criação de campanhas com período e orçamento
    • Vinculação de campanhas a clientes específicos
    • Acompanhamento de leads gerados por campanha
    • Dashboard de performance de campanhas
  • 👥 Portal do Cliente:

    • Sistema de registro público de clientes
    • Autenticação dedicada para clientes (JWT separado)
    • Dashboard personalizado com estatísticas
    • Visualização de leads e listas compartilhadas
    • Gestão de perfil e alteração de senha
  • 🔗 Compartilhamento de Listas:

    • Tokens únicos para compartilhamento de leads
    • URLs públicas para visualização de listas específicas
    • Controle de acesso via token com expiração
  • 👔 Gestão de Colaboradores:

    • Sistema de permissões (Owner, Admin, Member, Readonly)
    • Middleware de autenticação unificada (agência + cliente)
    • Controle granular de acesso a funcionalidades
    • Atribuição de leads a colaboradores específicos
  • 📤 Exportação de Dados:

    • Exportação de leads em CSV
    • Filtros aplicados na exportação
    • Formatação otimizada para planilhas

v1.4 - Segurança Multi-tenant e File Serving (13/12/2025)

  • 🔒 Segurança Cross-Tenant Crítica:

    • Validação de tenant_id em endpoints de login (bloqueio de cross-tenant authentication)
    • Validação de tenant em todas rotas protegidas via middleware
    • Mensagens de erro genéricas (sem exposição de arquitetura multi-tenant)
    • Logs detalhados de tentativas de acesso cross-tenant bloqueadas
  • 📁 File Serving via API:

    • Nova rota /api/files/{bucket}/{path} para servir arquivos do MinIO através do backend Go
    • Eliminação de dependência de DNS (files.localhost) - arquivos servidos via api.localhost
    • Headers de cache otimizados (Cache-Control: public, max-age=31536000)
    • CORS e content-type corretos automaticamente
  • 🎨 Melhorias de UX:

    • Mensagens de erro humanizadas no formulário de login (sem pop-ups/toasts)
    • Erros inline com ícones e cores apropriadas
    • Feedback em tempo real ao digitar (limpeza automática de erros)
    • Mensagens específicas para cada tipo de erro (401, 403, 404, 429, 5xx)
  • 🔧 Melhorias Técnicas:

    • Next.js middleware injetando headers X-Tenant-Subdomain para routing correto
    • TenantDetector middleware prioriza headers customizados sobre Host
    • Upload de logos retorna URLs via API ao invés de MinIO direto
    • Configuração MinIO com variáveis de ambiente MINIO_SERVER_URL e MINIO_BROWSER_REDIRECT_URL

v1.3 - Branding Dinâmico e Favicon (12/12/2025)

  • Branding Multi-tenant: Logo, favicon e cores personalizadas por agência
  • Favicon Dinâmico: Atualização em tempo real via localStorage e SSR metadata
  • Upload de Arquivos: Sistema de upload para MinIO com bucket público
  • Rate Limiting: 1000 requisições/minuto por IP

v1.2 - Redesign Interface Flat

  • Adoção de design "Flat" (sem sombras), focado em bordas e limpeza visual
  • Gestão avançada de agências com filtros robustos
  • Detalhamento completo com visualização de branding

v1.1 - Fundação Multi-tenant

  • Login de Superadmin com JWT
  • Cadastro de Agências
  • Proxy Interno Next.js para chamadas autenticadas
  • Site Institucional com dark mode

Executando o projeto

  1. Pré-requisitos: Docker Desktop e Node.js 20+ (para utilitários opcionais).
  2. Variáveis: ajustar .env conforme referências existentes (docker-compose.yml, arquivos config).
  3. Subir os serviços:
    docker-compose up --build
    
  4. Hosts locais:
    • Painel SuperAdmin: http://dash.localhost
    • Painel Agência: http://{agencia}.localhost (ex: http://idealpages.localhost)
    • Portal do Cliente: http://{agencia}.localhost/cliente (cadastro e área logada)
    • Site: http://aggios.app.localhost
    • API: http://api.localhost
    • Console MinIO: http://minio.localhost (admin: minioadmin / M1n10_S3cur3_P@ss_2025!)
  5. Credenciais padrão: ver backend/internal/data/postgres/init-db.sql para usuário superadmin seed.

Segurança

  • Cross-Tenant Authentication: Usuários não podem fazer login em agências que não pertencem
  • Tenant Isolation: Todas rotas protegidas validam tenant_id no JWT vs tenant_id do contexto
  • Erro Handling: Mensagens genéricas que não expõem arquitetura interna
  • JWT Validation: Tokens validados em cada requisição autenticada
  • Rate Limiting: 1000 req/min por IP para prevenir brute force

Estrutura de diretórios (resumo)

backend/                            API Go (config, domínio, handlers, serviços)
  internal/
    api/
      handlers/
        crm.go                      🎯 CRUD de leads, funis e campanhas
        customer_portal.go          👥 Portal do cliente (auth, dashboard, leads)
        export.go                   📤 Exportação de dados (CSV)
        collaborator.go             👔 Gestão de colaboradores
        files.go                    Handler para servir arquivos via API
        auth.go                     🔒 Validação cross-tenant no login
      middleware/
        unified_auth.go             🔐 Autenticação unificada (agência + cliente)
        customer_auth.go            🔑 Middleware de autenticação de clientes
        collaborator_readonly.go    📖 Controle de permissões readonly
        auth.go                     🔒 Validação tenant em rotas protegidas
        tenant.go                   🔧 Detecção de tenant via headers
    domain/
      auth_unified.go               🆕 Domínios para autenticação unificada
    repository/
      crm_repository.go             🆕 Repositório de dados do CRM
backend/internal/data/postgres/     Scripts SQL de seed
  migrations/
    015_create_crm_leads.sql        🆕 Estrutura de leads
    020_create_crm_funnels.sql      🆕 Sistema de funis
    018_add_customer_auth.sql       🆕 Autenticação de clientes
front-end-agency/                   Dashboard Next.js para Agências
  app/
    (agency)/
      crm/
        leads/                      🆕 Gestão de leads
        funis/[id]/                 🆕 Board Kanban de funis
        campanhas/                  🆕 Gestão de campanhas
    cliente/
      cadastro/                     🆕 Registro público de clientes
      (portal)/                     🆕 Portal do cliente autenticado
    share/leads/[token]/            🆕 Compartilhamento de listas
    login/page.tsx                  Login com mensagens humanizadas
  components/
    crm/
      KanbanBoard.tsx               🆕 Board Kanban drag-and-drop
      CRMCustomerFilter.tsx         🆕 Filtros avançados de CRM
    team/
      TeamManagement.tsx            🆕 Gestão de equipe e permissões
  middleware.ts                     Injeção de headers tenant
front-end-dash.aggios.app/          Dashboard Next.js Superadmin
frontend-aggios.app/                Site institucional Next.js
traefik/                            Regras de roteamento e TLS
1. docs/                            Documentação funcional e técnica

Testes e validação

  • Consultar 1. docs/TESTING_GUIDE.md para cenários funcionais.
  • Testes de Segurança:
    • Tentativa de login cross-tenant retorna 403
    • JWT de uma agência não funciona em outra agência
    • Logs registram tentativas de acesso cross-tenant
  • Testes de File Serving:
    • Upload de logo gera URL via API (http://api.localhost/api/files/...)
    • Imagens carregam sem problemas de CORS ou DNS
    • Cache headers aplicados corretamente

Próximos passos sugeridos

  • Implementar soft delete e trilhas de auditoria para exclusão de agências
  • Adicionar validação de permissões por tenant em rotas de files (se necessário)
  • Expandir testes automatizados (unitários e e2e) focados no fluxo do dashboard
  • Disponibilizar pipeline CI/CD com validações de lint/build

Repositório