Skip to content

API RESTful desenvolvida com Node.js e Adonis para teste técnico de back-end da empresa Be

Notifications You must be signed in to change notification settings

juan-formoso/api-restful-be

Repository files navigation

API RESTful com Adonis

Contexto

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.

Seções

Especificações do desafio 📜

Banco de dados

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.

Rotas do sistema

  • 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).

⚠️ Observação: as rotas em clientes, produtos e vendas só devem ser acessadas por usuários logados.

Requisitos básicos

  • estruturar o sistema observando o MVC (porém, sem as views).

  • usar MySQL como banco de dados.

  • respostas em JSON.

Tecnologias utilizadas 🔨

Node.js, Adonis, JWT, MySQL, ThunderClient

Rotas 🔁

Autenticação

  • POST /signup: Cadastro de usuário
  • POST /login: Login do usuário

Clientes

  • GET /clients: Lista todos os clientes
  • GET /clients/:id: Detalha um cliente específico e suas vendas
  • POST /clients/: Adiciona um cliente
  • PUT /clients/:id: Edita um cliente
  • DELETE /clients/:id: Exclui um cliente e suas vendas

Produtos

  • GET /products: Lista todos os produtos
  • GET /products/:id: Detalha um produto específico
  • POST /products: Adiciona um produto
  • PUT /products/:id: Edita um produto
  • DELETE /products/:id: Exclui logicamente um produto

Vendas

  • POST /sales: Registra uma venda

Iniciando a API ▶️

  1. Clone o repositório:

    git clone [email protected]:juan-formoso/api-restful-be.git
    cd api-restful-be
    
  2. Instale as dependências:

    npm install
    
  3. Configure o banco de dados no arquivo .env.

    😉 Dica: utilize o arquivo .env.example como referência! E utilize o comando adonis key:generate para gerar um valor para a variável de ambiente APP_KEY.

  4. Crie o banco de dados:

    CREATE DATABASE adonis;
    
  5. Execute as migrations:

    adonis migration:run
    
  6. Inicie o servidor:

    adonis serve --dev
    

Realizando requisições 💻

Esta seção detalha como interagir com as rotas da API e enviar dados pelo Cabeçalho e Corpo da requisição.

Headers Comuns

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

Endpoints e exemplos de requisições

  1. Cadastro de Usuário
  • Rota: POST /signup
{
    "email":"[email protected]",
    "password":"senha123"
}
  1. Login de Usuário
  • Rota: POST /login
{
    "email":"[email protected]",
    "password":"senha123"
}
  1. 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"
    }
  ]
}
  1. 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"
    }
  ]
}
  1. Adicionar um Produto
  • Rota: POST /products
{
  "name": "Nome do Produto",
  "price": 100.00
}
  1. Editar um Produto
  • Rota: PUT /products/:id
{
    "name":"Nome atualizado",
    "price":150.00
}
  1. Registrar uma venda
  • Rota: POST /sales
{
    "client_id": 1,
    "product_id": 1,
    "quantity": 2,
    "unit_price":12.00,
    "total_price":24.00
}

Informações úteis ➕

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.

About

API RESTful desenvolvida com Node.js e Adonis para teste técnico de back-end da empresa Be

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published