Backend em Node.js (Fastify + Colyseus + Prisma + PostgreSQL) do projeto GoRocketLeague.
Este README foi escrito para servir de guia de onboarding para alunos: como subir o ambiente, aplicar schema do Prisma e onde encontrar a documentação de API.
- Node.js 24 (via Docker)
- Fastify (HTTP API)
- Colyseus (tempo real / matchmaking)
- Prisma 7 + PostgreSQL
- Redis (suporte a features de tempo real)
src/server.js: bootstrap do Fastify + Colyseussrc/routes/: rotas HTTPsrc/services/: regras de negócioprisma/schema.prisma: modelo do bancodata/: assets locais (avatars, escudos, versões)
Na raiz do projeto (gorocketleague/), use Docker Compose:
docker compose up --buildAPI disponível em:
http://localhost:3000
Healthcheck básico:
curl http://localhost:3000/Resposta esperada:
{
"status": "ok",
"message": "Hello World GoRocketLeague 🚀"
}O docker-compose.yml espera os arquivos abaixo em ./secrets/:
db_user.txtdb_password.txtredis_password.txtadmin_api_token.txtjwt_secret.txtgoogle_ios_client_id.txtgoogle_android_client_id.txtapple_ios_client_id.txtapple_android_client_id.txtpgadmin_password.txt(se usar profiletools)
Sem esses secrets o container do backend não sobe corretamente.
JWT_SECRETouJWT_SECRET_FILE(obrigatório para autenticação)POSTGRES_HOST,POSTGRES_PORT,POSTGRES_DBPOSTGRES_USER/POSTGRES_USER_FILEPOSTGRES_PASSWORD/POSTGRES_PASSWORD_FILEREDIS_HOST,REDIS_PORT,REDIS_PASSWORD_FILEADMIN_API_TOKEN/ADMIN_API_TOKEN_FILEPLAYERS_PHOTOS_DIR,AVATARS_DIR,TEAM_SHIELDS_DIRTEAMS_LEADERBOARD_WIN_COOLDOWN_HOURSTEAMS_LEADERBOARD_DEBUG_LOG,TEAMS_LEADERBOARD_LOG_DIR
- Rotas de usuário usam JWT Bearer.
- Fluxos de auth estão em
/auth:POST /auth/guestPOST /auth/refreshPOST /auth/link-googlePOST /auth/link-appleid
- Rotas administrativas exigem token admin (
ADMIN_API_TOKEN).
- Públicas:
GET /GET /players/versionGET /players/versions/:version/download
- Usuário/time/carteira:
- rotas de perfil e instâncias
/user/team,/user/team/battle-settings,/teams/leaderboard/wallet,/wallet/transactions,/wallet/ad-reward,/wallet/purchase-fuel
- Batalhas:
/battle-tiers/battles/battles/instant-open/battles/:id/accept,/battles/:id/decline
- Trocas:
- rotas de proposta/aceite/cancelamento de trades
- Admin de players:
/admin/players/*