freemanpivo / freemanpivo/gamesapi

`feat(games): endpoint para cadastrar um jogo (POST /games)`

Open
#2 0 comments 0 reactions 0 assignees View on GitHub
documentation feature good first issue
Dominant language
Go
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

### **Descrição**
Adicionar endpoint para cadastrar um novo jogo.

**Requisitos:**

- `POST /games`
- Validação do payload
- Persistência em storage (arquivo `data/games_seed.json` ou DB futuro)
- Retornar `201 Created` com o recurso criado ou `400/422` em caso de erro

**Payload esperado:**
```json
{
"id": "string-ulid",
"name": "string",
"releaseDate": "YYYY-MM-DD",
"platform": "string",
"gender": "string",
"subGender": "string",
"rating": 0
}
```

---

### **Critérios de Aceite**

- [ ] Endpoint `POST /games` implementado
- [ ] Validação mínima (`title`, `platform` obrigatórios)
- [ ] Retorna `201` e JSON do jogo criado
- [ ] Persistência no arquivo `data/games_seed.json`
- [ ] Retorna `400` em caso de payload inválido
- [ ] Testes unitários cobrindo happy path e validações
- [ ] OpenAPI atualizado com POST `/games`

---

### **Tasks**

- [X] Definir `Game` struct
- [ ] Criar handler `CreateGame` e registrar `app.Post("/games", CreateGame)`
- [ ] Validar payload (`title`, `platform`)
- [ ] Persistir no arquivo `data/games_seed.json` com lock (mutex)
- [ ] Atualizar `openapi.yaml`
- [ ] Criar testes `internal/games/games_create_test.go`

---

### **Exemplo de Requisição**
```http
POST /games
Content-Type: application/json

{
"name": "The Legend of Go",
"releaseDate": "2025-01-01",
"platform": "PC",
"gender": "Programing",
"subGender": "Simple",
"rating": 0
}
```

**Resposta:**
```json
{
"id": "01K9JYHR1HA9RNE7QVBXMMW4TH",
"name": "The Legend of Go",
"releaseDate": "2025-01-01",
"platform": "PC",
"gender": "Programing",
"subGender": "Simple",
"rating": 0
}

```

---

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.