Busca com autocompletar de jogos — React (frontend) → GraphQL (backend em Go) → PostgreSQL.
Top 10k jogos mais populares de 2025, a partir de um dataset do Kaggle. Os dados são limpos (acentos, capitalização, duplicatas) e versionados no repositório, carregados no Postgres por um seed automatizado.
Backend (backend/, Go 1.24)
gqlgen— servidor GraphQL (schema-first, geração de código)lib/pq— driver Postgresrs/cors— CORS- PostgreSQL 16
Frontend (frontend/, Node 20)
- React 19 + TypeScript, via Vite
graphql-request— cliente GraphQL- Vitest + Testing Library — testes
- ESLint — lint
Infra
- Docker + Docker Compose (sobe
db,seed,api,web)
Pré-requisito: Docker + Docker Compose.
docker compose up --build- Frontend: http://localhost:3000
- API GraphQL: http://localhost:8080/graphql (Playground em http://localhost:8080)
- Postgres:
localhost:5432(admin/123, bancogames-db)
Sempre use --build após alterar código — sem ele o Compose reaproveita a imagem já buildada.
Docker + Docker Compose é tudo que é preciso ter instalado — Go, Node e até o Python do seed rodam dentro das próprias imagens (golang:1.24-alpine, node:20-alpine, postgres:16-alpine + python3), nunca no host.
Só necessário se for editar código com hot-reload em vez de rebuildar a imagem a cada mudança — nesse caso sim, precisa de Go e Node instalados na máquina.
Backend:
cd backend
go run ./cmd # precisa de DATABASE_URL apontando pro Postgres (docker compose up -d db seed)Frontend:
cd frontend
npm install
npm run dev # usa VITE_GRAPHQL_URL de .env (default: localhost:8080/graphql)| Variável | Onde | Default | Descrição |
|---|---|---|---|
DATABASE_URL |
backend | (obrigatória) | String de conexão do Postgres. Já setada em docker-compose.yml pro serviço api. |
CORS_ORIGIN |
backend | http://localhost:3000 |
Origem liberada pelo CORS do GraphQL — precisa ser a URL de onde o web é servido. |
PORT |
backend | 8080 |
Porta HTTP do servidor GraphQL. |
VITE_GRAPHQL_URL |
frontend | http://localhost:8080/graphql (via frontend/.env) |
Endpoint que o front chama. Embutida no build (Vite) — quem faz a requisição é o navegador, não o container, então precisa ser um endereço alcançável de fora do Docker. No build da imagem é setada via ARG (ver frontend/Dockerfile/docker-compose.yml). |
# backend
cd backend && go vet ./... && go test ./... && golangci-lint run ./...
# sem golangci-lint instalado: docker run --rm -v $(pwd)/..:/repo -w /repo/backend golangci/golangci-lint:v2.12.2 golangci-lint run ./...
# frontend
cd frontend && npm run lint && npm test && npm run buildDetalhes de cada camada de teste (unitário, integração com Postgres real, smoke do binário) em docs/testing-backend.md.
TASKS.md— divisão do projeto em microtasksCOMMENTS.md— decisões arquiteturais e uso de IAdocs/requirements.md— requisitos extraídos do desafiodocs/C4_architecture.pdf— diagrama de arquitetura (C4)