Backend — Elixir e Phoenix
O backend do RadarBov é construído em Elixir 1.18 com o framework Phoenix 1.7.11. Expõe uma API REST JSON consumida pelo frontend web e pelo app mobile.
Stack técnica
| Componente | Versão |
|---|---|
| Elixir | 1.18.x |
| Phoenix | 1.7.11 |
| Ecto | ORM para PostgreSQL |
| PostgreSQL | 14 com PostGIS |
| Oban | Jobs em background |
| Guardian | Autenticação JWT |
| Swoosh | E-mails (via SendGrid) |
| ExTwilio | SMS (via Twilio) |
Arquitetura — Contextos
O backend segue a arquitetura de contextos do Phoenix — cada domínio de negócio é um módulo Elixir isolado com suas próprias funções públicas, schemas Ecto e migrações.
Contextos principais
| Contexto | Responsabilidade |
|---|---|
Accounts | Usuários, perfis, autenticação |
Establishments | Estabelecimentos, propriedades rurais |
Tags | Brincos RFID, ciclo de vida |
Animals | Entradas, saídas, identificações |
GTAs | Guias de Trânsito Animal |
Travels | Viagens, veículos, paradas |
Shares | Compartilhamento de dados |
Invites | Convites e permissões |
Socioenvironmental | Conformidade ambiental |
Organizations | Organizações e hierarquia |
Autenticação JWT
O módulo Guardian gerencia a emissão e validação de tokens JWT. O secret_key é configurado via variável de ambiente. Tokens têm tempo de expiração curto; o refresh_token permite renovação sem novo login.
Jobs assíncronos — Oban
O Oban gerencia jobs em background:
- Envio de e-mails e SMS de verificação
- Verificações de conformidade socioambiental (integração Agrotools)
- Processamento de arquivos enviados
- Reenvio em caso de falha
Banco de dados
Ver Banco de Dados para detalhes sobre o schema PostgreSQL, PostGIS e as principais tabelas.
Acesso hierárquico com ltree
A extensão ltree do PostgreSQL é usada para modelar hierarquias de acesso (ver Sistema de Acesso). O backend usa queries com operadores ltree para filtrar registros por organização ou estabelecimento.
Deploy
O backend é containerizado com Docker. A imagem é publicada no GitHub Container Registry (GHCR) e implantada via Docker Compose no servidor AWS EC2 com NixOS.
Ambientes
O backend é configurado 100% via variáveis de ambiente. Quatro ambientes são suportados: dev, staging, prod, pci. Segredos são injetados via SOPS templates no NixOS.