/api-livraria

Este projeto consiste na criação de uma API de uma livraria utilizando o AdonisJs e MySQL.

Primary LanguageJavaScript

Livraria Bemobile

Descrição do projeto

Este projeto consiste na criação de uma API de uma livraria utilizando o AdonisJs e MySQL.

Tabela de conteúdos

Status

Projeto finalizado ✔️

Instalação

Pré-requisitos

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.

Instalação

# 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

Como usar

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

1 - Criar usuário

POST /register

Esse endpoint cria um usuário.

O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):

-   username
-   email
-   password

Exemplo de requisição efetuada:

criar usuario

2 - Autenticação

POST /authenticate

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

Exemplo de requisição efetuada:

autenticar

3 - Login usuário

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.

Exemplo:

token

4 - Cadastro de cliente

POST /clientes

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

Exemplo de requisição efetuada:

cadastrar

Caso o cpf informado no body da requisição já exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Cliente já cadastrado."
}

5 - Listar clientes

GET /clientes

Esse endpoint lista todos os clientes cadastrados no sistema.

Exemplo de requisição efetuada:

listar

6 - Detalhar cliente

GET /clientes/:id

Esse endpoint traz detalhes do cliente cadastrado, a partir do id informado.

Exemplo de requisição efetuada:

detalhar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Cliente não encontrado."
}

7 - Editar cliente

PUT /clientes/:id

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

Exemplo de requisição efetuada:

editar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Cliente não encontrado."
}

8 - Deletar cliente

DELETE /clientes/:id

Esse endpoint exclui um cliente cadastrado a partir do id informado.

Exemplo de requisição efetuada:

deletar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Cliente não encontrado."
}

9 - Cadastro de produto

POST /produtos

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

Exemplo de requisição efetuada:

cadastrar

10 - Listar produtos

GET /produtos

Esse endpoint lista todos os produtos cadastrados no sistema em ordem alfabética.

Exemplo de requisição efetuada:

listar

11 - Detalhar produto

GET /produtos/:id

Esse endpoint traz detalhes do cliente cadastrado, a partir do id informado.

Exemplo de requisição efetuada:

detalhar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Produto não encontrado."
}

12 - Editar produto

PUT /produtos/:id

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

Exemplo de requisição efetuada:

editar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Produto não encontrado."
}

13 - Deletar produto

DELETE /produtos/:id

Esse endpoint exclui um produto cadastrado a partir do id informado.

Exemplo de requisição efetuada:

deletar

Caso o id não exista no banco de dados, a seguinte mensagem será exibida:

{
	"message": "Produto não encontrado."
}

14 - Cadastrar venda

POST /vendas

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

Exemplo de requisição efetuada:

vender

Dificuldades encontradas

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.

Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

Autora

Projeto desenvolvido por Emanuelly Leoncio.

Entre em contato!