Este projeto consiste na criação de uma API de uma livraria utilizando o AdonisJs e MySQL.
- Descrição do Projeto
- Tabela de Conteúdo
- Status
- Instalação
- Como usar
- Dificuldades encontradas
- Tecnologias
- Autora
Projeto finalizado ✔️
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Node.js, editor de código como VSCode, banco de dados MySQL e um programa para testar de API como o Insomnia.
# Clone este repositório
$ git clone <https://github.com/emanuellyleoncio/api-livraria>
# Instale as dependências
$ npm install
# Execute as migrations
$ adonis migration:run
# Execute o servidor
$ adonis serve --dev
# Realize os testes utilizando o Insomnia
Esta API permite as seguintes funcionalidades:
- Cadastrar um usuário do sistema
- Logar com usuário cadastrado
- Listar, detalhar, adicionar, editar e excluir clientes
- Listar, detalhar, adicionar, editar e excluir produtos
- Registrar venda de um produto a um cliente
Crie um banco de dados no MySQL. No arquivo .env altere as linhas de USER, PASSWORD e DATABASE conforme o seu banco de dados.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=
DB_PASSWORD=
DB_DATABASE=
HASH_DRIVER=bcrypt
Para os testes no Insomnia, utiliza-se a seguinte porta: http://127.0.0.1:3333
Esse endpoint cria um usuário.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- username
- email
- password
Esse endpoint autentica um usuário do sistema gerando um token.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- email
- password
Os endpoints de Clientes, Produtos e Vendas são acessadas somente com usuário autenticado. Para isso, o token gerado na rota anterior ('/authenticate') deve ser inserido como Bearer Token em todas as rotas apresentadas a seguir.
Esse endpoint cadastra um novo cliente no sistema.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- nome
- cpf
- email
- celular
- residencial*
- rua
- numero
- bairro
- complemento*
- cep
- estado
- pais*
*item não obrigatório
Caso o cpf informado no body da requisição já exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Cliente já cadastrado."
}
Esse endpoint lista todos os clientes cadastrados no sistema.
Esse endpoint traz detalhes do cliente cadastrado, a partir do id informado.
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Cliente não encontrado."
}
Esse endpoint edita um cadastro de cliente a partir do id informado na rota.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- nome
- cpf
- email
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Cliente não encontrado."
}
Esse endpoint exclui um cliente cadastrado a partir do id informado.
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Cliente não encontrado."
}
Esse endpoint cadastra um novo produto no sistema.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- autor
- editora
- titulo
- ano_publicacao
- preco
Esse endpoint lista todos os produtos cadastrados no sistema em ordem alfabética.
Esse endpoint traz detalhes do cliente cadastrado, a partir do id informado.
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Produto não encontrado."
}
Esse endpoint edita um cadastro de produtoe a partir do id informado na rota.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- autor
- editora
- titulo
- ano_publicacao
- preco
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Produto não encontrado."
}
Esse endpoint exclui um produto cadastrado a partir do id informado.
Caso o id não exista no banco de dados, a seguinte mensagem será exibida:
{
"message": "Produto não encontrado."
}
Esse endpoint registra uma venda de um produto a um cliente no sistema.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- cliente_id
- produto_id
- quantidade
Encontrei dificuldades para transformar a data e hora da venda de produto de timestamp para datetime (AAAA-MM-DD hh:mm:ss). Apesar da rota "Detalhar cliente" estar com as vendas ordenadas a partir da mais recente, o campo data_venda em timestamp dificulta um pouco esta percepção. Não foi possível implementar a filtragem das vendas por mês + ano. Acredito que um caminho provável seria utilizar mês e ano como query da rota.
As seguintes ferramentas foram usadas na construção do projeto:
Projeto desenvolvido por Emanuelly Leoncio.
Entre em contato!