Engenharia na Appolus
Esta área reúne os padrões de engenharia usados nos projetos da Appolus: arquitetura, modelagem de dados, banco, testes, segurança e deploy. O objetivo é que qualquer pessoa que entre em um projeto encontre as mesmas convenções.
Stack predominante
A maior parte dos sistemas são monolitos Ruby on Rails com front-end em React/Vue, banco PostgreSQL e processamento assíncrono com Sidekiq + Redis. O InfraSpawn é a exceção: backend em Go com front em React/Vite.
| Projeto | Backend | Front-end | Banco | Observação |
|---|---|---|---|---|
Syens (educacao) | Rails 3.2 (Ruby 2.6) | ERB + Vue/React, Webpack | PostgreSQL | Multitenant (multiescola); base legada grande |
Chamada Escolar (cpe-console) | Rails 7.2 (Ruby 3.x) | React + esbuild | PostgreSQL | Pundit, Sidekiq, auditoria |
Chamada Escolar (cpe-inscricao) | — | React (SPA) | — | Portal público de inscrição |
Relatórios (reports) | Rails 8.1 (Ruby 4.0) | esbuild | PostgreSQL | Multiconta; auth por convite + JWT |
Salus (saude) | Rails 4.0 (Ruby 2.3) | React, Webpack | PostgreSQL | Auditoria via PaperTrail |
| InfraSpawn | Go | React/Vite (TS) | PostgreSQL | Terraform; gestão de infra AWS |
As versões variam bastante entre projetos (de Rails 3 legado a Rails 8). Antes de escrever código, confirme a versão do projeto: o que vale no
reports(Rails 8) pode não existir noeducacao(Rails 3).
Princípios comuns
- Código em inglês, conteúdo de interface via i18n (
config/locales, pt-BR). - Controllers magros: regra de negócio em models, service objects e query objects, não no controller.
- Segurança por padrão: autenticação (Devise), autorização (CanCan/Pundit) e trilha de auditoria em toda ação relevante.
- Multitenancy: no Syens, todo dado é isolado por escola/cliente — nunca escreva consultas que vazem dados entre escolas.
- Assíncrono para o que é pesado: e-mails, PDFs, exportações e operações em massa vão para o Sidekiq.
- Banco como fonte de integridade: além das validações de modelo, use constraints (chaves estrangeiras, not-null) e índices no banco.