PT-BREN
← Todos os projetos

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.

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