Este repositório contém os códigos e arquivos desenvolvidos para o teste técnico da Be. O desafio consiste no desenvolvimento de um CRUD no formato de uma API e criar endpoints que irão ler e escrever em um banco de dados utilizando o MySQL.
Esta API segue os princípios REST. Nela, o usuário irá fazer o login e caso não tenha cadastro ainda, se cadastrar. Se a autenticação estiver correta e o usuário exista no banco de dados, irá criar um token de autorização e esterá permitido realizar operações envolvendo clientes, produtos e vendas.
- Especificações do desafio
- Tecnologias utilizadas
- Rotas da aplicação
- Iniciando a API
- Realizando requisições
- Informações úteis
Estrutura mínima:
- usuários: email e senha.
- clientes: nome e cpf.
- endereço: campos comuns de endereço.
- telefones: cliente e número.
- produtos: preço e demais campos.
- vendas: cliente, produto, quantidade, preço unitário, preço total, data e hora.
-
cadastro de usuário do sistema (signup).
-
login com JWT de usuário cadastrado (login).
-
clientes:
listar todos os clientes cadastrados (index); apenas dados principais; ordenar pelo id.
detalhar um(a) cliente e vendas a ele(a) (show); trazer as vendas mais recentes primeiro; possibilidade de filtrar as vendas por mês + ano;
adicionar um(a) cliente (store);
editar um(a) cliente (update);
excluir um(a) cliente e vendas a ele(a) (delete);
-
produtos:
listar todos os produtos cadastrados (index); apenas dados principais devem vir aqui; ordenar alfabeticamente.
detalhar um produto (show);
criar um produto (store);
editar um produto (update);
exclusão lógica ("soft delete") de um produto (delete);
-
vendas:
registrar venda de 1 produto a 1 cliente (store).
-
estruturar o sistema observando o MVC (porém, sem as views).
-
usar MySQL como banco de dados.
-
respostas em JSON.
Node.js, Adonis, JWT, MySQL, ThunderClient
POST /signup
: Cadastro de usuárioPOST /login
: Login do usuário
GET /clients
: Lista todos os clientesGET /clients/:id
: Detalha um cliente específico e suas vendasPOST /clients/
: Adiciona um clientePUT /clients/:id
: Edita um clienteDELETE /clients/:id
: Exclui um cliente e suas vendas
GET /products
: Lista todos os produtosGET /products/:id
: Detalha um produto específicoPOST /products
: Adiciona um produtoPUT /products/:id
: Edita um produtoDELETE /products/:id
: Exclui logicamente um produto
POST /sales
: Registra uma venda
-
Clone o repositório:
git clone [email protected]:juan-formoso/api-restful-be.git cd api-restful-be
-
Instale as dependências:
npm install
-
Configure o banco de dados no arquivo
.env
.😉 Dica: utilize o arquivo
.env.example
como referência! E utilize o comandoadonis key:generate
para gerar um valor para a variável de ambiente APP_KEY. -
Crie o banco de dados:
CREATE DATABASE adonis;
-
Execute as migrations:
adonis migration:run
-
Inicie o servidor:
adonis serve --dev
Esta seção detalha como interagir com as rotas da API e enviar dados pelo Cabeçalho e Corpo da requisição.
Todas as requisições que necessitam de autenticação devem incluir o token JWT no cabeçalho da seguinte forma:
Authorization: Bearer <token-jwt>
Content-Type: application/json
- Cadastro de Usuário
- Rota:
POST /signup
{
"email":"[email protected]",
"password":"senha123"
}
- Login de Usuário
- Rota:
POST /login
{
"email":"[email protected]",
"password":"senha123"
}
- Adicionar um Cliente
- Rota:
POST /clients
{
"name": "Fulano de tal",
"cpf": "123.456.789-00",
"address": {
"street": "Rua Exemplo",
"city": "Cidade Exemplo",
"state": "Estado Exemplo",
"country": "País Exemplo",
"zip-code": "12345-678"
},
"phones": [
{
"number": "123456789"
}
]
}
- Editar um Cliente
- Rota:
PUT /clients/:id
{
"name": "Nome do Cliente Atualizado",
"cpf": "987.654.321-00",
"address": {
"street": "Rua Atualizada",
"city": "Cidade Atualizada",
"state": "Estado Atualizado",
"country": "País Atualizado",
"zip-code": "87654-321"
},
"phones": [
{
"number": "987654321"
}
]
}
- Adicionar um Produto
- Rota:
POST /products
{
"name": "Nome do Produto",
"price": 100.00
}
- Editar um Produto
- Rota:
PUT /products/:id
{
"name":"Nome atualizado",
"price":150.00
}
- Registrar uma venda
- Rota:
POST /sales
{
"client_id": 1,
"product_id": 1,
"quantity": 2,
"unit_price":12.00,
"total_price":24.00
}
Referências utilizadas por mim durante o projeto:
- Controllers estão em
/app/Controllers/Http
. - Models estão em
/app/Models
. - Arquivo de configuração do JWT está em
config/auth.js
. - Scripts de migração do DB estão em
/database/migrations
. - Rotas da API estão em
/start/routes.js
.