# API DESAFIO 05
URL base: https://api-desafiom05.herokuapp.com
## Cadastro de usuário
### POST /users
#### Campos necessários:
- Nome do usuário (obrigatório)
- Email (obrigatório)
- Senha (obrigatório)
``` json
//Exempo de requisição:
{
"nome": "Pedro Alves",
"email": "pedro@email.com",
"senha": "12345"
}
```
``` json
//Exemplo de resposta:
HTTP status 200
{
"message": "Usuário cadastrado com sucesso!"
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- Caso o email já exista no sistema
- Senha menor que 5 digitos
- Email de formato inválido
``` json
//Exemplo de resposta:
HTTP status 400
{
"message": "O email informado já existe."
}
//HTTP status 400
{
"message": "senha deve ser pelo menos 5 caracteres"
}
```
## Login de usuário
### POST /login
#### Campos necessários:
- Email (obrigatório)
- Senha (obrigatório)
``` json
//Exemplo de requisição:
{
"email": "pedro@email.com",
"senha": "12345"
}
```
``` json
//Exemplo de resposta:
HTTP status 200
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibm9tZSI6IlF1w6l6aWEgQmFsb25lY2tlciIsImlhdCI6MTYzNzg2OTkxMCwiZXhwIjoxNjM3ODc3MTEwfQ.gX-BEVwZf0vip1SqsHet3gLvJhhGQpmyqLWWgumNxlU",
{
"email": "pedro@email.com",
"nome": "Pedro Alves"
}
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- E-mail não existe no cadastro
- Senha incorreta
- Senha menor que 5 digitos
``` json
//Exemplo de resposta:
HTTP status 400
{
"message": "E-mail e/ou senha incorretos."
}
//HTTP status 400
{
"message": "email é um campo obrigatório"
}
```
### Obs: Todas as rotas abaixo precisam de autenticação.
## Edição de um usuário
### PUT /users
#### Campos necessários:
- Nome de usuário (obrigatório)
- Email (obrigatório)
- Senha
- CPF
- Telefone
``` json
//Exemplo de requisição:
{
"nome": "Quezia",
"email": "quezia@gmail.com",
"senha": ""
"cpf": "06999988802"
"telefone": "99999999"
}
```
``` json
//Exemplo de resposta:
HTTP status 200
{
"message": "Usuário atualizado com sucesso."
}
```
#### Obs: Campos não obrigatórios que não forem enviados no corpo da requisição, ou forem enviados em branco, não sofrerão nenhuma modificação.
#### Tratamento de erros:
- Campos obrigatórios em branco
- E-mail informado for diferente do usuário logado e já existir cadastrado para outro usuário
``` json
//Exemplo de resposta:
HTTP status 400
{
"message": "nome é um campo obrigatório"
}
//HTTP status 400
{
"message": "O email informado já existe."
}
```
## Cadastro de um cliente
### POST /clients
#### Campos necessários:
- Nome do cliente (obrigatório)
- Email (obrigatório)
- Cpf (obrigatório)
- Telefone (obrigatório)
- Cep
- Logradouro
- Complemento
- Bairro
- Cidade
- Estado
``` json
//Exemplo de requisição:
{
"nome": "Maria",
"email": "maria@email.com"
"cpf": "03355522212",
"telefone": "999999999",
"cep": "65022822",
"logradouro": "Rua 10",
"complemento": "Quadra 10",
"bairro": "Planalto II",
"cidade": "São Luís",
"estado": "Maranhão"
}
```
``` json
//Exemplo de resposta:
HTTP status 200
{
"message": "Cliente cadastrado com sucesso."
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- Caso já exista cliente cadastrado com o mesmo email
- Caso já exista cliente cadastrado com o mesmo cpf
``` json
//Exemplo de resposta:
HTTP status 400
{
"message": "Email já cadastrado"
}
//HTTP status 400
{
"message": "cpf é um campo obrigatório"
}
```
## Edição de um cliente
### PUT /clients/:id
#### Campos necessários:
- Nome do cliente (obrigatório)
- Email (obrigatório)
- Cpf (obrigatório)
- Telefone (obrigatório)
- Cep
- Logradouro
- Complemento
- Bairro
- Cidade
- Estado
```
//Exemplo de requisição:
{
"nome": "Marcio",
"telefone": "99999999",
"cpf": "123412222",
"email": "marcio@gmail.coom",
"logradouro": "Rua 3",
"complemento": "Quadra 200"
}
```
```
//Exemplo de resposta
//HTTP status 200
{
"message": "Cliente atualizado com sucesso."
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- Já existir cliente cadastrado com o mesmo cpf ou email
```
//Exemplo de resposta
HTTP status 400
{
"message": "Já existe cliente cadastrado com o email informado."
}
//HTTP 400
{
"message": "Nome é um campo obrigatório".
}
```
## Detalhamento de cliente
### GET /clients/:id
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
HTTP 200
[
{
"id": 2,
"usuario_id": 13,
"nome": "Marcio",
"email": "marcio@gmail.coom",
"cpf": "123412222",
"telefone": "14725",
"status": null,
"cep": null,
"logradouro": "Rua 3",
"complemento": "Quadra 200",
"bairro": null,
"cidade": null,
"estado": null
}
]
```
#### Tratamento de erros:
- Usuario não autenticado
- Cliente nao existe.
## Listagem de Clientes
### GET /clients
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
HTTP status 200
[
{
"id": 1,
"usuario_id": 13,
"nome": "Lilian",
"email": "lilian@gmail.coom",
"cpf": "1234",
"telefone": "14725",
"status": null,
"cep": null,
"logradouro": "Rua 3",
"complemento": "Quadra 200",
"bairro": null,
"cidade": null,
"estado": null
},
{
"id": 2,
"usuario_id": 13,
"nome": "Marcio",
"email": "marcio@gmail.coom",
"cpf": "123412222",
"telefone": "14725",
"status": null,
"cep": null,
"logradouro": "Rua 3",
"complemento": "Quadra 200",
"bairro": null,
"cidade": null,
"estado": null
}
]
```
#### Tratamento de erros:
- Usuário não autenticado
## Cadastro de cobrança
### POST /charges
#### Campos necessários:
**Todos os campos abaixo são obrigatórios**
- Nome do Cliente
- Id do Cliente
- Id do usuário (id do usuário logado)
- Data do vencimento
- Valor
- Descrição
- Status
```
//Exemplo de requisição
{
"cliente_nome": "Marcio",
"cliente_id": 2,
"usuario_id": 13,
"data_vencimento": "02-12-2021",
"status": "Pendente",
"descricao": "Produto mensal",
"valor": 25000
}
```
```
//Exemplo de resposta
HTTP status 200
{
"message": "Cobrança cadastrada com sucesso."
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- Usuário não autenticado
```
//Exemplo de resposta
HTTP status 400
{
"message": "O campo usuario_id é obrigatório"
}
```
## Listagem de cobranças
### GET /charges
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
[
{
"id": 1,
"cliente_nome": "Lilian",
"data_vencimento": "2021-02-12T03:00:00.000Z",
"descricao": "Produto mensal",
"valor": 5000,
"cliente_id": 1,
"usuario_id": 13,
"status": "Pendente"
},
{
"id": 3,
"cliente_nome": "Marcio",
"data_vencimento": "2021-02-12T03:00:00.000Z",
"descricao": "Produto mensal",
"valor": 25000,
"cliente_id": 2,
"usuario_id": 13,
"status": "Paga"
}
]
```
#### Tratamento de erros:
- Usuário não autenticado
## Listar cobranças de um cliente
### GET /charges/:client_id
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
HTTP status 200
[
{
"id": 1,
"cliente_nome": "Lilian",
"data_vencimento": "2021-02-12T03:00:00.000Z",
"descricao": "Produto mensal",
"valor": 5000,
"cliente_id": 1,
"usuario_id": 13,
"status": "Pendente"
},
{
"id": 2,
"cliente_nome": "Lilian",
"data_vencimento": "2021-02-12T03:00:00.000Z",
"descricao": "Produto mensal",
"valor": 25000,
"cliente_id": 1,
"usuario_id": 13,
"status": "Paga"
}
]
```
#### Tratamento de erros:
- Usuário não autenticado
- Cliente não existe
## Detalhar uma cobrança
### GET /charge/:id
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
HTTP status 200
{
"id": 4,
"cliente_nome": "Marcio",
"data_vencimento": "2021-02-12T03:00:00.000Z",
"descricao": "Produto mensal",
"valor": 25000,
"cliente_id": 2,
"usuario_id": 13,
"status": "Vencida"
}
```
## Editar uma cobrança
### PUT /charge/:id
#### Campos necessários:
**Todos os campos abaixo são obrigatórios**
- Nome do Cliente
- id do cliente
- id do usuário
- Data do vencimento
- Valor
- Descrição
- Status
```
//Exemplo de requisição:
{
"cliente_nome": "Marcio",
"cliente_id": 2,
"usuario_id": 5,
"data_vencimento": "10-06-2021",
"status": "Paga",
"descricao": "Produto mensal",
"valor": 13000
}
```
#### Tratamento de erros:
- Campos obrigatórios em branco
- Usuário não autenticado
## Excluir uma cobrança
DELETE /charge/:id
- Sem conteúdo no corpo da requisição
- Autenticação necessária
```
//Exemplo de resposta:
HTTP status 200
{
"message": "Cobrança excluída com sucesso."
}
```
#### Tratamento de erros:
- Tentativa de excluir uma cobrança paga
- Usuário não autenticado
```
//Exemplo de resposta:
HTTP status 400
{
"message": "Cobranças pagas não podem ser excluídas."
}
```