2026
Pinball PVP API
Programador
Uma API REST construída com ASP.NET Core (.NET 10) e PostgreSQL, dando suporte a um jogo de pinball head-to-head em Unity ainda não lançado. Gerencia contas de jogadores e autenticação, registra partidas solo e partidas versus (jogador contra jogador), e mantém registros agregados por jogador (vitórias, derrotas e recordes) como base para os leaderboards do jogo.
Código no GitHub ↗Open source
Backend & Dados
- Projetou os modelos de dados e endpoints da API utilizando ASP.NET Core (.NET 10), com o Entity Framework Core (via Npgsql) gerenciando o acesso a dados em um banco PostgreSQL, utilizando o EFCore.NamingConventions para nomenclatura snake_case.
- Implementou o gerenciamento de contas de jogadores, rastreamento de partidas solo (vs CPU) e versus (jogador contra jogador), e leaderboards paginados ranqueados por recorde, vitórias e taxa de vitória, cada um com suporte a filtros de período (semana, mês, ano).
- Construiu um sistema de rollover anual que registra um snapshot dos 3 melhores jogadores por categoria de leaderboard, reseta os registros de jogador do ano corrente, e remove o histórico de partidas antigas para manter o tamanho do banco de dados controlado.
- Versionou todas as rotas sob /api/v1, garantindo que os clientes do jogo já publicados não sejam quebrados por futuras alterações na API.
Autenticação & Segurança
- Implementou autenticação JWT bearer com rotação de refresh tokens, e hash de senhas com Argon2 para credenciais armazenadas.
- Construiu um fluxo de recuperação de senha por e-mail utilizando códigos de recuperação com tempo de expiração.
- Projetou um fluxo de dupla confirmação para partidas versus, exigindo que ambos os participantes enviem resultados coincidentes de forma independente antes que a partida seja registrada, prevenindo a falsificação unilateral de resultados.
- Adicionou rate limiting por janela deslizante (5 requisições por minuto por IP) nos endpoints de login e registro para mitigar abusos.
Testes
- Cobriu a lógica principal da API com testes unitários utilizando xUnit, e testes de integração completos utilizando Testcontainers para executar cada suíte de testes contra uma instância real e isolada de PostgreSQL.
Observabilidade
- Implementou logging estruturado com Serilog, e um middleware de correlation ID que anexa um identificador único de rastreamento a cada requisição para depuração entre serviços.
- Exposto um endpoint /health que reporta o status de conectividade com o banco de dados, adequado para health checks de liveness e readiness em orquestração de containers.
Infraestrutura & Deploy
- Containerizou a API e o banco de dados PostgreSQL como serviços separados utilizando Docker e Docker Compose, mantendo as camadas de aplicação e de dados isoladas e com deploy independente.
- Construiu um pipeline de CI/CD com GitHub Actions que executa a suíte de testes completa, constrói e publica uma imagem Docker de produção no GitHub Container Registry, e realiza o deploy automaticamente a cada push na branch master.
- Resolveu uma restrição de rede por CGNAT no ambiente de deploy self-hosted, conectando tanto o runner do GitHub Actions quanto a máquina host a uma rede privada Tailscale, e realizando o deploy através de uma conexão SSH tunelada por essa rede, sem expor portas públicas.
- Automatizou backups diários do PostgreSQL, espelhando os dumps para o Google Drive via rclone e enviando alertas por e-mail em caso de falha.
Tecnologias
- C#
- ASP.NET Core (.NET 10)
- Entity Framework Core
- Npgsql
- PostgreSQL
- Docker
- Docker Compose
- GitHub Actions
- xUnit
- Testcontainers
- Serilog
- Tailscale
- Argon2
- JWT Authentication
- Swagger/OpenAPI