🏆 Documentação Técnica

ARQUITETURA VARZEA FEST

Plataforma de gestão de festivais de futebol de várzea — Stack Ruby on Rails 8 + PostgreSQL + Sidekiq

🎯 Visão Geral

Varzea Fest é uma plataforma completa para gestão de festivais de futebol de várzea. Promotores criam eventos, técnicos inscrevem equipes, jogadores se vinculam a times, e todo o ciclo — inscrição, emparelhamento de jogos, registro de resultados e classificação — é gerenciado online.

Ruby 3.3.8 Rails 8.1.3 PostgreSQL 16 Redis 7 Sidekiq 8 Hotwire Docker RSpec

Stack Tecnológica

CamadaTecnologia
LinguagemRuby 3.3.8
FrameworkRuby on Rails 8.1.3
DatabasePostgreSQL 16 (Alpine)
Cache / JobsRedis 7 + Sidekiq 8
FrontendHotwire (Turbo + Stimulus) + Propshaft
Autenticaçãobcrypt (session) + JWT (API)
ContainerDocker + Podman
OrquestraçãoDocker Compose
TestesRSpec 7 + FactoryBot + Shoulda Matchers
QualidadeRuboCop, Brakeman, Bundler Audit

🗄️ Modelagem de Dados

8 modelos ActiveRecord com PostgreSQL, utilizando STI (Single Table Inheritance) para usuários e enum para status.

User (STI)

Promotor · Técnico · Jogador

Evento

rascunho → aberto → fechado → encerrado

Jogo

2 rodadas · chave vencedores/perdedores

TokenConvite

convite_tecnico · convite_jogador

Inscrição

Equipe + Jogador · status + pagamento

Passaporte + AuditLog

Vinculação + Auditoria

🛣️ Rotas Principais

Frontend Web (Hotwire)

/ — Home
/eventos — Lista pública
/eventos/:id — Detalhe do evento
/convite/:codigo — Página de convite
/painel/promotor — Dashboard promotor
/painel/tecnico — Dashboard técnico
/painel/jogador — Dashboard jogador

API REST (JSON)

POST /api/v1/users/sign_in
GET /api/v1/eventos
POST /api/v1/eventos/:id/inscricoes/equipe
POST /api/v1/equipes/:id/tokens/jogador
GET /api/v1/tokens/:codigo/validar
PATCH /jogos/:id/placar

🔄 Fluxo de Usuário

Visitante
Promotor
Técnico
Jogador
Inscrição Confirmada
Gerar Jogos (R1 + R2)
Registrar Placar
Classificação / Ranking

📊 Estados do Evento

Rascunho Aberto Fechado Encerrado
TransiçãoDestinoAções
abrir!abertoVincula passaportes premium
fechar!fechado
encerrar!encerrado
reabrir!abertoVolta de fechado

⚙️ Services

ServiceResponsabilidade
GeradorJogosEmparelhamentos R1 (sorteio) + R2 (vencedores × vencedores / perdedores × perdedores)
CalculadorClassificacaoPontos, saldo de gols, ordenação das equipes
TokenServiceGeração e envio de tokens de convite
PassportServiceVinculação automática de passaportes premium
JwtServiceCodificação/decodificação de JSON Web Tokens

🔐 Autenticação e Autorização

Web (Session/Cookie)

Login email + senha (bcrypt)
Sessão por session_token
Painéis por tipo de usuário

API (JWT)

Bearer token com expiração
Blacklist de tokens
Rate limiting integrado
PerfilPermissões
PromotorEventos, tokens, jogos, placares
TécnicoEquipe, inscrições, convites jogador
JogadorUsar token, vincular-se
AdminVisão global, bloqueio, auditoria

🛡️ Segurança

✅ Senhas com bcrypt
✅ Confirmação de email (6 dígitos)
✅ Bloqueio de conta
✅ Forçar logout via session_token
✅ Rate limiting na API
✅ CORS configurado
✅ AuditLog para ações críticas
✅ Apenas promotor altera placar

📧 Background Jobs (Sidekiq)

JobDisparoAção
EmailConfirmacaoJobCadastroCódigo de confirmação
EmailTokenTecnicoJobToken técnicoConvite ao técnico
EmailTokenJogadorJobToken jogadorConvite ao jogador
EmailPassaporteJobVinculaçãoNotifica passaporte

🐳 Infraestrutura

Serviços Docker

web (Puma :3000)
sidekiq (jobs)
PostgreSQL 16
Redis 7

Rede

varzea_net (interna)
auth_serv_net (auth externo)
Domínio: varzeafest.duckdns.org

📝 Histórico de Commits

a9fdb0c docs: adiciona documentação de arquitetura do projeto
e5e6885 feat: melhora layout do card de jogos com grid centralizado e adiciona botao reabrir no promotor
1788799 feat: adiciona tabela de jogos, classificação e melhorias no frontend cyberpunk
2c42985 feat: apply cyberpunk 2077 theme to Varzea Fest
c2df648 feat: initial commit - Varzea Fest (Podman stack)