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

ComponenteVersão
Elixir1.18.x
Phoenix1.7.11
EctoORM para PostgreSQL
PostgreSQL14 com PostGIS
ObanJobs em background
GuardianAutenticação JWT
SwooshE-mails (via SendGrid)
ExTwilioSMS (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

ContextoResponsabilidade
AccountsUsuários, perfis, autenticação
EstablishmentsEstabelecimentos, propriedades rurais
TagsBrincos RFID, ciclo de vida
AnimalsEntradas, saídas, identificações
GTAsGuias de Trânsito Animal
TravelsViagens, veículos, paradas
SharesCompartilhamento de dados
InvitesConvites e permissões
SocioenvironmentalConformidade ambiental
OrganizationsOrganizaçõ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.


Ver também