Dashboard-Automatizase/docs/architecture/arquitetura-de-alto-nvel.md
2025-10-05 21:17:43 -03:00

91 lines
3.7 KiB
Markdown

# Arquitetura de Alto Nível
## Resumo Técnico
O AutomatizaSE Portal é uma **POC simples** com NextJS 14+ App Router containerizado em **Docker**, deployado em **Kubernetes** usando manifests básicos. Utiliza **Supabase** como backend completo (auth, database PostgreSQL, recuperação de senha). O frontend NextJS renderiza páginas SSR e se comunica com API Routes que orquestram chamadas à EvolutionAPI (REST) e Supabase. OAuth do Google Calendar é delegado ao n8n. A aplicação roda em container Docker, exposta via Nginx Ingress. **Arquitetura minimalista para deploy rápido em poucas horas.**
## Escolha de Plataforma e Infraestrutura
**Plataforma:** Kubernetes + Docker + Supabase **(POC Simplificada)**
**Componentes Essenciais:**
- **Docker:** Containerização da aplicação NextJS
- **Kubernetes:** Orquestração básica (deployment + service + ingress)
- **Nginx Ingress:** Roteamento HTTP para o portal
- **Supabase:** Auth + PostgreSQL (schema `portal`) + SMTP
- **EvolutionAPI:** Integração REST WhatsApp (externo)
- **n8n:** OAuth Google Calendar (externo)
**Topologia Simples:**
- **Namespace:** `automatizase-portal`
- **Replicas:** 1 pod (POC, sem HA)
- **Ingress:** HTTP via Nginx Ingress, domínio `portal.automatizase.com` (HTTPS opcional)
- **Recursos:** Limits mínimos (256Mi RAM, 100m CPU)
**Justificativa:**
- **Simplicidade:** Setup rápido em poucas horas
- **Mínimo viável:** Apenas o necessário para rodar NextJS em K8s
- **Supabase gerenciado:** Reduz complexidade de backend
## Estrutura do Repositório
**Estrutura:** Single NextJS App (monorepo não necessário para POC)
**Ferramenta Monorepo:** N/A
**Organização de Pacotes:**
- Projeto NextJS único contendo frontend (`/app`, `/components`) e API routes (`/app/api`)
- Shared types em `/types` (TypeScript interfaces compartilhadas entre frontend e backend)
- Libs utilitárias em `/lib` (Supabase client, EvolutionAPI client, helpers)
**Justificativa:** Para POC simplificada, monorepo com múltiplos packages adiciona complexidade desnecessária. Single app NextJS oferece estrutura clara e setup rápido.
## Diagrama de Arquitetura de Alto Nível (POC Simplificada)
```mermaid
graph TB
User[Usuário<br/>Mobile/Desktop] -->|HTTP| Ingress[Nginx Ingress<br/>portal.automatizase.com]
subgraph K8s["Kubernetes Cluster"]
Ingress -->|Route| Service[Service<br/>ClusterIP:80]
Service --> Pod[Pod<br/>NextJS Container<br/>porta 3000]
Pod -->|Auth + DB| Supabase
Pod -->|API Calls| EvolutionAPI
Pod -->|OAuth Redirect| n8n
end
subgraph External["Serviços Externos"]
Supabase[(Supabase<br/>Auth + PostgreSQL)]
EvolutionAPI[EvolutionAPI<br/>WhatsApp]
n8n[n8n<br/>Google Calendar OAuth]
end
Supabase -->|SMTP| Email[SMTP]
n8n -->|Callback| Service
style User fill:#4A90E2
style Ingress fill:#009639
style Service fill:#326CE5
style Pod fill:#4A90E2
style Supabase fill:#3ECF8E
style EvolutionAPI fill:#25D366
style n8n fill:#FF6D5A
```
**Fluxo Simplificado:**
1. Usuário acessa `portal.automatizase.com`
2. Nginx Ingress roteia para Service K8s (porta 80)
3. Service encaminha para Pod NextJS (porta 3000)
4. NextJS se comunica com Supabase (auth/DB) e EvolutionAPI (WhatsApp)
## Padrões Arquiteturais (Simplificados para POC)
- **Containerized App:** NextJS em Docker, deploy via K8s manifests simples
- **Component-Based UI:** Componentes React com TailwindCSS (Shadcn/ui)
- **API Routes (BFF):** `/app/api/*` centralizam comunicação com EvolutionAPI e Supabase
- **OAuth Delegation:** Google Calendar via n8n (evita gerenciar credenciais)
- **Config via Env Vars:** Secrets e configs via K8s ConfigMap/Secret
---