Skip to content

freemanpivo/gamesapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

games-api

Exemplo de API em Go organizanda por feature folders, usando Fiber. Dados de seed (80 jogos) são lidos de app/data/games_seed.json.

Requisitos

  • Go 1.21+
  • Docker & Docker Compose (se for usar containers)
  • make (opcional, mas recomendado)

Estrutura do projeto

games-api
├── cmd
│   └── main.go
├── data
│   └── games_seed.json
├── docker-compose.yml
├── Dockerfile
├── go.mod
├── go.sum
├── internal
│   ├── games
│   │   ├── handler.go
│   │   ├── model.go
│   │   ├── repository.go
│   │   ├── routes.go
│   │   └── service.go
│   └── health
│       └── health.go
├── Makefile
├── openapi.yml
├── pkg
│   └── ulidutil
│       └── ulid.go
└── README.md

Como rodar (local, sem Docker)

  1. Instale dependências e verifique módulos:
make tidy
  1. Rodar localmente (usa data/games_seed.json):
make run
  1. Build local do binário:
make build
# binário gerado em bin/games-api

Rodando com Docker / Docker Compose

  1. Construir a imagem Docker:
make docker-build
  1. Subir containers (monta ./data como /app/data no container):
make up
  1. Logs, parar e remover:
make logs
make down

Observação: o docker-compose.yml monta a pasta local ./data em /app/data do container (read-only). Garanta que data/games_seed.json esteja presente na raiz do projeto antes de subir o compose.

Makefile — comandos úteis

Lista dos comandos principais (já disponíveis no Makefile):

  • make ou make help — mostra os comandos disponíveis.
  • make tidygo mod tidy e go mod verify.
  • make build — compila o binário em bin/games-api.
  • make run — executa go run main.go (usa o seed JSON em ./data).
  • make test — roda go test ./... -v.
  • make lint — formata o código (go fmt ./...).

Docker related:

  • make docker-build — builda a imagem Dockerfile.
  • make docker-run — roda a imagem via Dockerfile.
  • make updocker-compose up --build -d.
  • make downdocker-compose down.
  • make logs — segue logs do serviço.
  • make shell — abre um shell dentro do container (/bin/sh).
  • make docker-clean — remove containers/imagens criadas.

Utilitários:

  • make healthcurl no endpoint GET /health (usa PORT 3000 por padrão).

Seed data

  • O seed com 80 jogos está em data/games_seed.json e é versionado no repositório.
  • O serviço carrega esse arquivo ao iniciar; a aplicação espera encontrar data/games_seed.json no diretório de trabalho.

Exemplo de requisição CURL (local)

Você pode testar a API localmente (porta padrão 3000) com todos os parâmetros mockados:

curl -X GET "http://localhost:3000/games?name=mario&platform=snes&genre=Platform&subGenre=Adventure" \
-H "Accept: application/json" | jq

Exemplo de resposta:

{
    "data": [
        {
            "id": "01H1Z4Q0V1F2G3H4J5K6L7M8N",
            "name": "Super Mario World",
            "releaseDate": "1990-11-21",
            "platform": "snes",
            "genre": "Platform",
            "subGenre": "Adventure",
            "rating": 9.0
        }
    ]
}

Parâmetros de exemplo usados:

  • name=mario → busca por nome contendo "mario" (case-insensitive)
  • platform=snes → filtra apenas jogos de Super Nintendo
  • genre=Platform → gênero principal
  • subGenre=Adventure → subgênero

Todos os resultados vêm ordenados por rating (desc) por padrão.

About

Simple Golang API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published