# Desafio Módulo 5 - Backend
Seja bem vindo(a) a documentação da api do nosso pdv.
## **Status Codes**
Abaixo, listamos os possíveis **_status codes_** esperados como resposta da API.
```javascript
// 200 (OK) = requisição bem sucedida
// 201 (Created) = requisição bem sucedida e algo foi criado
// 204 (No Content) = requisição bem sucedida, sem conteúdo no corpo da resposta
// 400 (Bad Request) = o servidor não entendeu a requisição pois está com uma sintaxe/formato inválido
// 401 (Unauthorized) = o usuário não está autenticado (logado)
// 403 (Forbidden) = o usuário não tem permissão de acessar o recurso solicitado
// 404 (Not Found) = o servidor não pode encontrar o recurso solicitado
// 500 (Internal Server Error) = erro inesperado do servidor
```
<details>
<summary><b>Listar categorias</b></summary>
### `GET` `/categoria`
Essa é a rota que será utilizada para listar as categorias de produtos do sistema.
**Exemplo de request:**
```javascript
// Sem nada no body/params/query da request
```
**Exemplo de response:**
```javascript
// HTTP Status 200
{
[
{
"id": 1,
"descricao": "Informática"
},
{
"id": 2,
"descricao": "Celulares"
},
{
"id": 3,
"descricao": "Beleza e Perfumaria"
},
{
"id": 4,
"descricao": "Mercado"
},
...
]
}
```
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Cadastrar usuário</b></summary>
#### `POST` `/usuario`
Essa é a rota que será utilizada para cadastrar um novo usuário no sistema.
**Exemplo de request:**
```javascript
// Corpo da requisição para cadastro de usuário (body)
{
"nome": "José",
"email": "jose@email.com",
"senha": "jose"
}
```
**Exemplo de response:**
```javascript
// HTTP Status 201
// Sem conteúdo no corpo (body) da requisição
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Login</b></summary>
#### POST /login
Essa é a rota que será utilizada para fazer o login de um usuário no sistema.
*Exemplo de request:*
```javascript
// Corpo da requisição para login de usuário (body)
{
"email": "jose@email.com",
"senha": "jose"
}
```
*Exemplo de response:*
```javascript
// HTTP Status 200
{
"usuario": {
"id": 3,
"nome": "Joao Matos",
"email": "Joaomatos@gmail.com"
},
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Mywi
aWF0IjoxNjk5NDg0MDA4LCJleHAiOjE2"
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Editar usuário</b></summary>
### `PUT` `/usuario`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para editar um usuário no sistema.
**Exemplo de request:**
```javascript
// Corpo da requisição para editar um usuário (body)
{
"nome": "José",
"email": "jose@email.com",
"senha": "jose"
}
```
**Exemplo de response:**
```javascript
// HTTP Status 204
// Sem conteúdo no corpo (body) da requisição
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Detalhar Usuario</b></summary>
### `GET` `/usuario`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para detalhar um usuário do sistema.
**Exemplo de request:**
```javascript
// Sem nada no body/params/query da request
```
**Exemplo de response:**
```javascript
// HTTP Status 200
{
"id": 4,
"nome": "Admin",
"email": "admin@admin.com"
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Cadastrar Cliente</b></summary>
### `POST` `/cliente`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para cadastrar um cliente do sistema.
**Exemplo de request:**
```javascript
// HTTP Status 200
{
"nome": "Admin",
"email": "admin@admin.com",
"cpf": "12245678901"
}
```
**Exemplo de response:**
```javascript
// HTTP Status 201
{
"id": 4,
"nome": "Admin",
"email": "admin@admin.com"
"cpf": "12345678901"
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Cadastrar Produto</b></summary>
### `POST` `/produto`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para cadastrar um produto do sistema.
**Exemplo de request:**
```javascript
// HTTP Status 200
{
"descricao": "Tomate",
"quantidade_estoque": 42,
"valor": 1000
"categoria_id": 5
}
```
**Exemplo de response:**
```javascript
// HTTP Status 201
{
"id": 5
"descricao": "Tomate",
"quantidade_estoque": 42,
"valor": 1000
"categoria_id": 5
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Editar Produto</b></summary>
### `PUT` `/produto/:id`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para editar ou atualizar um produto do sistema. Um produto é identificado pelo ID nos parâmetros de rota.
**Exemplo de request:**
```javascript
// HTTP Status 200
{
"descricao": "Cebola",
"quantidade_estoque": 50,
"valor": 1500
"categoria_id": 5
}
```
**Exemplo de response:**
```javascript
// HTTP Status 201
{
"id": 5
"descricao": "Cebola",
"quantidade_estoque": 50,
"valor": 1500
"categoria_id": 5
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>
<details>
<summary><b>Listar Produtos</b></summary>
### `GET` `/produto`
#### Rota Autenticada - Token
Essa é a rota que será utilizada para listar todos os produtos cadastrados no sistema.
**Exemplo de request:**
```javascript
// HTTP Status 200
{
"descricao": "Cebola",
"quantidade_estoque": 50,
"valor": 1500
"categoria_id": 5
}
```
**Exemplo de response:**
```javascript
// HTTP Status 201
{
"id": 5
"descricao": "Cebola",
"quantidade_estoque": 50,
"valor": 1500
"categoria_id": 5
}
```
ou
```javascript
// HTTP Status 400 / 401 / 403 / 404
{
mensagem: // haverá uma mensagem informando o erro
}
```
</details>