Arquitetura Geral¶
Visao Macro¶
Componentes¶
Backend - Django 5.2 + DRF¶
Apps principais:
| App | Responsabilidade |
|---|---|
core | Models base (TimeStampedModel), paginacao customizada |
contacts | CRUD de contatos e grupos |
surveys | Definicao de pesquisas, perguntas, condicionais |
responses | Execucoes (SurveyRun), respostas (SurveyAnswer), tarefas Celery |
whatsapp | Webhooks, servicos Meta Graph API, MessageLog |
chat | Chat livre operador-cliente, WebSockets para tempo real |
users | Gestao de usuarios e permissoes |
Stack: - Django 5.2.6 - framework principal - DRF 3.16.1 - APIs REST - Daphne - servidor ASGI (suporta WebSockets via Channels) - Channels 4 - WebSockets para chat em tempo real - SimpleJWT - autenticacao via JWT - Celery 5.5 - tarefas assincronas - django-celery-beat - scheduler de tarefas periodicas - drf-spectacular - geracao de OpenAPI/Swagger
Frontend - Next.js 15¶
Estrutura:
Stack: - Next.js 15.5 (App Router, standalone build) - React 19 - TypeScript strict mode - Tailwind CSS + shadcn/ui components - TanStack Query para fetching e cache - react-toastify para notificacoes - lucide-react para icones
Servicos de Apoio¶
- PostgreSQL 16 - banco principal (porta 5433 externa, 5432 interna)
- Redis 7 - broker do Celery + channel layers do Django Channels (DB 2)
- Nginx (host) - reverse proxy + SSL via Let's Encrypt
- MkDocs - documentacao publica em
/docs
Servico Externo¶
- Meta WhatsApp Business Cloud API v22.0 -
https://graph.facebook.com/v22.0/ - Phone Number ID: configurado em
META_PHONE_NUMBER_ID - Business Account ID:
META_BUSINESS_ID - Token:
META_ACCESS_TOKEN(~60 dias de validade, renovar antes de expirar)
Fluxos Principais¶
Fluxo 1: Disparar pesquisa para contatos¶
Fluxo 2: Cliente responde¶
Fluxo 3: Expiracao automatica¶
| Text Only | |
|---|---|
Deploy¶
Producao (cliente Highlas)¶
- URL:
https://highlasdobrasil.com.br - Servidor: VPS Hostinger (Linux)
- Branch:
main - Banco: PostgreSQL no proprio container (volume
postgres_data)
Staging¶
- URL: mesma
https://highlasdobrasil.com.brdurante validacoes - Branch:
staging - Banco: mesmo do producao (cuidado!)
Idealmente, staging deveria ter URL e banco separados. Hoje compartilham recursos. Vide roadmap-gaps.md#decisoes-arquiteturais-pendentes.
Comando para subir tudo¶
Comando para atualizar (rebuild + migrate)¶
| Bash | |
|---|---|
Comando para ver logs¶
| Bash | |
|---|---|
Convencoes Importantes¶
Variaveis de Ambiente¶
Todas as configuracoes sensiveis sao lidas via python-decouple de backend/.env:
SECRET_KEY(obrigatorio, sem default inseguro)DEBUG=Falseem producaoALLOWED_HOSTS,CORS_ALLOWED_ORIGINS,CSRF_TRUSTED_ORIGINSMETA_ACCESS_TOKEN,META_PHONE_NUMBER_ID,META_BUSINESS_IDSURVEY_EXPIRY_*(configuracoes de expiracao)
Sempre que adicionar nova variavel, atualizar tambem .env.example.
Timezone¶
Banco armazena em UTC. Display em America/Sao_Paulo. Configurado em settings.py: TIME_ZONE = 'America/Sao_Paulo'.
Convencoes de Codigo¶
Vide CLAUDE.md na raiz do projeto para padroes detalhados de Python, TypeScript, testes, etc.
Versionamento¶
- Backend: Django migrations sequenciais por app
- Frontend: build standalone Next.js (sem versionamento de bundle visivel)
- API:
/api/v1/(planejamento de v2 vide roadmap)
Observabilidade¶
Logs¶
- Backend:
backend/logs/(rotacao 10MB, 5 backups) - Container:
docker compose logs <service> - Celery worker: logs especificos via
docker compose logs celery_worker
Metricas¶
Hoje minimas. Roadmap inclui adicao de Prometheus + Grafana (vide roadmap-gaps).
Health Checks¶
chatbot_docs: tem healthcheck (HTTP 8000)chatbot_postgres:pg_isreadya cada 30s- Demais: nao tem healthcheck configurado
Dependencias Externas Criticas¶
| Servico | Impacto se cair |
|---|---|
| Meta Graph API | Nao envia mensagens, nao recebe webhooks |
| PostgreSQL | Aplicacao para |
| Redis | Celery para de processar, WebSockets caem |
| Nginx (host) | URL publica indisponivel |
| Let's Encrypt | SSL expira em 90 dias, renovacao automatica via certbot |