Skip to content

gabriel-vitebo/api-food-explorer

Repository files navigation

API - Food Explorer

Essa API foi criada para o desafio final do curso Explorer da Rocketseat

Diagrama das tabelas do banco de dados

Imagem do diagrama da api food explorer

🛠 Tecnologias

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

💻 Projeto

Veja o projeto aqui

Esse site é o resultado de 1 ano de muito estudo e dedicação! depois de quase 1 anos de curso da Rocketseat, realizei esse desafio final! Tive que desenvolver um site e-commerce de um restaurante, onde o usuário administrativo pode criar, editar e excluir qualquer prato, além de criar categorias para cada prato especifico , e o usuário comum pode, favoritar qualquer prato, buscar pelo nome da comida ou pelo ingrediente, e adicionar quantos itens desejar no carrinho!

Documentação

- Necessário:

Para conseguir rodar o projeto na sua máquina é necessário ter o GIT e o NODE.JS instalado (verifique a versão de ambos e, se for preciso, atualize para a ultima versão)

- clonado o repositório:

Primeiro passo é clonar o código para sua máquina, podemos fazer isso utilizando o git clone, basta clicar no botão "code" e escolher a forma que deseja clonar, https ou ssh

Com o link copiado, abra seu terminal na pasta que deseja colocar o projeto e execute git clone

git clone https://github.com/gabriel-vitebo/api-food-explorer.git

Depois de termina de clonar, no seu editor de código, vc já deve conseguir visualizar a pasta com os conteúdos dentro

- Instalando as dependências:

Agora, com o projeto já clonado, vamos instalar todas as dependências que o projeto precisa para rodar, primeiro, verifique se você está dentro da pasta do projeto,se executar o npm install fora da pasta, não irá funcionar, agora vamos utilizar o npm install

npm install

Depois de instalar todas as dependências, irá aparecer uma pasta chamada "node_modules"

- Criando as migrates:

Agora precisamos criar o banco de dados antes de testar a API, para isso, podemos executar:

npm run migrate

Esse comando vai rodas todas as migrates, criar todas as tabelas do banco de dados, nesse projeto vamos utilizar o SQLite com o knex

Depois de executar o comando, dentro da pasta database vai ter um arquivo chamado database.db

Se você já tiver dado o comando "npm run dev" para rodar o projeto,as migrates não vao ser criadas, para gerar as migrates, basta fecha o servidor ou abri uma janela nova no terminal e executar o comando

- Visualizando o banco de dados

Para visualizar as tabelas do banco de dados,vamos precisar usar um SGBD (Sistema Gerenciador de Banco de Dados)

Eu vou utilizar o Beekeeper Studio, porém, fique livre para utilizar o que achar melhor

Depois de instalar o Beekeeper, vamos nos conectar ao banco de dados

  • Connection Type ou Tipo de conexão: Selecione a opção "SQLite"

  • Database File: Clique em "Choose File" ou "Escolher arquivo",entre na pasta onde você clonou o repositório e vá até a pasta "src", depois entre na pasta "database" do projeto, e selecione o arquivo "database.db"

  • Agora é so clicar em "connect" ou "conectar" e pronto, estamos conectados com o banco de dados

Agora podemos visualizar todas as tabelas presentes no banco de dados e ja podemos testar a API

- Rodando o projeto:

agora podemos rodar o projeto utilizando

npm run dev

No seu terminal deverá exibir a mensagem

server is running on Port 3333

Isso significa que o projeto está rodando com sucesso na sua máquina

Testando a API

Caso queira importa todo ambiente configurado, bastar importar do link abaixo

Run in Insomnia}

- Insomnia

Para testar os métodos da API eu utilizo uma ferramenta chamada Insomnia, porém existe outras ferramentas para testar os métodos HTTP, fique livre para utilizar o que for melhor para você

Se for preciso, vou deixar abaixo algumas dicas que você pode fazer no insomnia para deixar o projeto mais organizado

  • Crie um ambiente, nesse ambiente você pode deixar alguns valores padrão, como a base url, que nesse projeto vai ser
    ```
    localhost:3333
    ```
    
  • Crie pastas para cada um dos controles, e dentro dessas pastas, você consegue organizar por todos os métodos que esse controle utiliza
  • Dentro de cada pasta, você consegue criar um ambiente para aquela pasta, assim, é mais pratico porque não precisa digitar o endereço sempre que for usa, basta usar a variável
  • Dentro do ambiente base, você pode deixar salvo como padrão também, o token de autentificação, é muito mais produtivo, caso contrario, você tera que definir o token de autentificação em cada rota usar e precisar do token
  • Abaixo está as informações para configurar o token

User

No controle de usuário, temos apenas o endpoint de criar, usamos apenas o método POST

- Cadastrando usuário

para cadastrar o usuário, crie um arquivo HTTP request com o método POST com o endereço abaixo ,esse arquivo devera ser um JSON com um objeto contendo as informações em ray

localhost:3333/users
{
  "name": "string",
  "email": "[email protected]",
  "password": "string",
  "isAdm": true false,
}

IMPORTANTE

  • password deverá ter 6 caracteres ou mais, caso contrario, ocorrerá um erro
  • Se o "isAdm" for "false" você não vai conseguir criar, atualizar e nem deletar os pratos nessa conta,porque só os ADM tem acesso a isso
  • Usuário administrativo só é possível ser criado aqui pelo backend

Sessions

No controle de sessions, temos apenas o endpoint de criar, usamos apenas o método POST

- Autentificando o usuário

Agora para autentificar o usuário, vamos acessar o endereço

localhost:3333/sessions

no insomnia, vamos criar outro arquivo HTTP request chamada 'sessions' batendo no endereço acima,o arquivo deve conter um JSON com um objeto que contem as informações do usuário em ray

{
  "email": "[email protected]",
  "password": "string"
}

A resposta será as informações do usuário e o token de acesso

Category

No controle de categorias, temos 5 endpoint

Create, Delete, Index, Show, GetAll

Para usar qualquer método de category, é preciso está autenticado, por isso, vá em "auth" e escolha a opção de "Bearer" e no valor, coloque o valor do token

o valor do token você pode visualizar na sessions, quando você da um POST, a resposta retorna algumas informações sobre o usuário, entre elas, o token. A desvantagem de usar o token assim, é que, quando o token espirar e mudar, você vai precisar mudar o valor manualmente, por isso, recomendo o jeito abaixo (A maneira que mencionei abaixo é usado no insomnia, eu não sei como fazer em outra ferramenta)

Outro jeito de pegar o valor do token é naquele ambiente base que mencionei lá em cima, para usar, é só colocar o nome da variável no valor, nesse caso, quando o token expirar e criar um novo,a variável atualiza sozinho

caso você não tenha a variável, você consegue criar na hora, em value basta digitar 'body attribute' e clicar na função que irá aparecer, e fazer as configurações que deixei lá em cima

IMPORTANTE

Em qualquer lugar da aplicação que o usuário precisar ser autentificado, o processo é o mesmo

Com o usuário já autenticado, vamos seguir!

- Criando uma categoria

Para criar uma categoria nova, vamos acessar o endereço

localhost:3333/categories

Vamos criar outro arquivo HTTPS request com o nome de 'create', utilizando o método POST, recebendo um JSON com objeto contendo a informação em ray

{
  "name":"string"
}

- Buscando os pratos separados por categorias

Vamos criar outro arquivo HTTPS request com o nome de 'index', utilizando o método GET, Aqui vamos acessar apenas /categories

http://localhost:3333/categories

A resposta vai ser, um objeto contendo todas a informação dos pratos relacionados a cada categoria cadastrada

- Buscando a categoria pelo parâmetro

Vamos criar um arquivo HTTPS request com o nome de 'show', utilizando o método GET, Aqui vamos passar o ID da categoria no parâmetro

localhost:3333/categories/:id

A resposta vai ser todos os pratos cadastrados relacionando a essa categoria especifica

- Pegando todas as categorias

Vamos criar um arquivo HTTPS request com o nome de 'getAll', utilizando o método GET, e vamos apenas colocar /all no parâmetro

localhost:3333/categories/all

A resposta deve ser a informação de todas as categorias cadastradas

- Deletando categoria

Vamos criar um arquivo HTTPS request com o nome de 'Delete', utilizando o método DELETE, e vamos apenas colocar o id da categoria que deseja deletar no parâmetro

localhost:3333/categories/:id

Foods

No controle de foods, temos 5 endpoint

Create, showDetails, Delete, index, update

IMPORTANTE

Para fazer qualquer requisição no controle de foods, é necessário está autentificado

- Criando um prato novo

Para criar um prato novo, vamos acessar o endereço

localhost:3333/foods

Vamos criar outro arquivo HTTPS request com o nome de 'create', utilizando o método POST, recebendo um JSON com objeto contendo as informações em multiPart

    name: string,
	description: string,
	price: number,
	image: file,
	ingredients: ["string1", "string2"],
	categoryId: string

IMPORTANTE

A imagem deve ser colocada em um arquivo file, se colocar o nome da imagem em uma string não irá funcionar, no insomnia, no lugar de JSON, podemos colocar "Multipart", colocando todos os campos com os devidos valores, e em imagem selecionar "file" e por esse input escolher a imagem que deseja enviar (no Multipart não é necessário colocar "" nos valores igual em JSON, caso coloque "" em categoryId vai dar null)

  • Todos os campos são obrigatórios
  • categoryId é so conferir na tabela de categorias pela categoria que deseja e pegar o id
  • No preço não poder utilizar virgula ",", deverá ser apenas por ponto "."
  • os ingredientes deve colocado dentro de um array(no Multipart o valor dentro do array precisa usar "", ["exemplo1", "exemplo2"])

- Mostrando o detalhe do prato

Vamos criar outro arquivo HTTPS request com o nome de 'showDetails', utilizando o método GET, e vamos colocar o ID do prato como parâmetro

localhost:3333/foods/:id

A resposta vai ser as informações do prato buscado

-Deletando o prato

Vamos criar outro arquivo HTTPS request com o nome de 'Delete', utilizando o método DELETE, e vamos colocar o ID do prato como parâmetro

localhost:3333/foods/:id

Depois, pode conferir no banco de dados para garantir que deu tudo certo, e o prato foi excluído

-Pesquisando o prato

Vamos criar outro arquivo HTTPS request com o nome de 'index', utilizando o método GET, e vamos utilizar a query usando "name" com o "value" que deseja buscar

http://localhost:3333/foods?name=sushi

A resposta vai ser a informação de todos os pratos e ingredientes que dão match com o nome pesquisado, caso não houver, retornará um array vazio

-Atualizando o prato

Vamos criar outro arquivo HTTPS request com o nome de 'Update', utilizando o método PUT, e vamos colocar o ID do prato como parâmetro

localhost:3333/foods/:id

Aqui podemos utilizar do mesmo jeito que fizemos no Create, usando o Multiform,mudando os devidos valores que deseja atualizar, e na imagem colocando no arquivo file

    name: string,
	description: string,
	price: number,
	image: file,
	ingredients: ["string1", "string2"],
	categoryId: string

IMPORTANTE

Todos os campos deverá ser preenchido, mesmo que queira mudar apenas um campo, verifique se os outros campos estão preenchidos também

Favorites

No controle de favoritos, temos 3 endpoint

adding, Delete, Show

IMPORTANTE

Para fazer qualquer requisição no controle de favoritos, é necessário está autentificado

- Adicionando aos favoritos

Vamos criar outro arquivo HTTPS request com o nome de 'adding', utilizando o método POST, e no corpo da requisição, em ray, passando o ID do prato que deseja favoritar

localhost:3333/favorites
{
  "food_id": "string"
}

- Removendo dos favoritos

Vamos criar outro arquivo HTTPS request com o nome de 'Delete', utilizando o método DELETE, e nos parâmetros coloque o ID do prato que deseja remover dos favoritos

localhost:3333/favorites/:id

-Mostrando os favoritos

Vamos criar outro arquivo HTTPS request com o nome de 'Show', utilizando o método GET

localhost:3333/favorites

A resposta vai ser os pratos favoritados do usuário que solicitou, não precisamos passar o ID do usuário em nenhum lugar porque conseguimos identificar o usuário pelo token de autentificação utilizado

Ingredients

No controle de ingredients, temos 1 endpoint

index

IMPORTANTE

Para fazer qualquer requisição no controle de ingredients, é necessário está autentificado

-Mostrando os ingredientes

Vamos criar outro arquivo HTTPS request com o nome de 'index', utilizando o método GET, e basta da um request em

localhost:3333/ingredients

A resposta vai ser todos os ingredientes cadastrados no banco de dados

Licença

Esse projeto está sob a licença MIT.

Autor


Foto de perfil do github de Gabriel Vitebo
Gabriel Vitebo

Feito com ❤️ por Gabriel Vitebo 👋🏽 Entre em contato!

Releases

No releases published

Packages

No packages published