---
# System prepended metadata

title: API DESAFIO 05

---

# 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."
}
```












