Giter Club home page Giter Club logo

food-explorer-api's Introduction

Logo

Food Explorer V2 API 🍜

Essa API de um restaurante fictício pode ser utilizada para realizar o gerenciamento de pedidos e favoritos de seus clientes.

Através da API, os usuários podem se cadastrar, autenticar-se, cadastrar seus pratos favoritos, visualizar todos os pratos disponíveis, adicionar pratos em seus carrinhos de compra, criar e finalizar pedidos.

Os usuários também podem visualizar seus pedidos anteriores, atualizar seus dados pessoais e recuperar suas senhas, caso necessário.

Além disso, a API também conta com a funcionalidade de administrador, que permite que o restaurante gerencie todos os pratos disponíveis, atualize o status dos pedidos, visualize e edite os dados dos clientes cadastrados, e gerencie as avaliações e comentários dos clientes sobre os pratos oferecidos.

Índice

Stack utilizada

⚙️ Node.js, Express, SQLite

Funcionalidades

  • Criar, editar, visualizar e deletar Usuário
  • Autenticação de Usuário
  • Criar, editar, adicionar uma imagem, visualizar e deletar Pratos
  • Favoriar, desfavoritar um Prato. E visualizar todos Pratos Favoritos
  • Criar um Pedido com um Prato, adicionar um Prato ao pedido ou alterar a quantidade de algum Prato no Pedido, excluir um Prato do Pedido, visualizar o Pedido detalhado e o Histórico de Pedidos

Variáveis de Ambiente

🔑 Para rodar esse projeto, você vai precisar adicionar só uma variável de ambiente, como mostra o arquivo env.example

  AUTH_SECRET=

Rodando localmente

🏠 Clone o projeto

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

Entre no diretório do projeto

  cd my-project

Instale as dependências

  npm install

Inicie o servidor

  npm run dev

Rodando os testes

🧪 Para rodar os testes, rode o seguinte comando

  npm test

Apêndice

Diagrama Entidade Relacionamento 💡 Estrutura de Pastas do Projeto 🔍
Diagrama Entidade Relacionamento Estrutura de Pastas do Projeto

Documentação da API

📖 Para alguns métodos da API, é necessário estar Autenticado, então se estiver recebendo algum erro para editar o Usuário, por exemplo, talvez seja porque você não se autenticou.

Usuários 👥

Cria um Usuário

  POST /users
{
	"name": "John",
	"email": "[email protected]",
	"password": "123"
	// "isAdmin": true (essa parâmetro é opcional caso queira criar um usuário Admin)
}

Edita um Usuário

  PUT /users
{
	"name": "John",
	"email": "[email protected]",
	"old_password": "123",
	"new_password": "456"
}

Deleta um Usuário

  DELETE /users

Retorna um Usuário

  GET /users
{
	"id": 1,
	"name": "John",
	"email": "[email protected]",
	"created_at": "2023-05-02 17:42:34",
	"updated_at": "2023-05-02 17:42:34"
}

Sessões (Auth) 🔑

Cria uma Sessão

  POST /sessions
{
	"email": "[email protected]",
	"password": "123"
}

Pratos 🍲

Cria um Prato

  POST /dishes
{
	"name": "Salada Ravanello",
	"description": "Rabanetes, folhas verdes e molho agridoce salpicados com gergelim. O pão naan dá um toque especial.",
	"image_url": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fpt.dreamstime.com%2Fvista-superior-das-folhas-frescas-de-salada-verde-vivas-com-tomates-vermelhos-e-fundo-texturizado-rabanete-image188958649&psig=AOvVaw0_mVQmBnD-ZqgZC3R7o6CP&ust=1683293670880000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLiguNzj2_4CFQAAAAAdAAAAABAJ",
	"price": 25.00,
	"category": "Refeições",
	"ingredients": ["alface", "cebola", "pão naan", "pepino", "rabanete", "tomate"]
}

Edita um Prato

  PUT /dishes/:dish_id
{
	"name": "Saladinha Ravanello",
	"description": "Rabanetes, folhas verdes e molho...",
	"image_url": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fpt.dreamstime.com%2Fvista-superior-das-folhas-frescas-de-salada-verde-vivas-com-tomates-vermelhos-e-fundo-texturizado-rabanete-image188958649&psig=AOvVaw0_mVQmBnD-ZqgZC3R7o6CP&ust=1683293670880000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLiguNzj2_4CFQAAAAAdAAAAABAJ",
	"price": 30.00,
	"category": "Refeições",
	"ingredients": ["alface", "cebola roxa", "pão integral", "rabanete", "tomate"]
}

Envia arquivo de imagem em um Prato

  PATCH /dishes/picture/:dish_id

Deleta um Prato

  DELETE /dishes/dish_id

Retorna um Prato

  GET /dishes/:dish_id
{
	"id": 13,
	"name": "Salada Ravanello",
	"description": "Rabanetes, folhas verdes e molho agridoce salpicados com gergelim. O pão naan dá um toque especial.",
	"image_url": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fpt.dreamstime.com%2Fvista-superior-das-folhas-frescas-de-salada-verde-vivas-com-tomates-vermelhos-e-fundo-texturizado-rabanete-image188958649&psig=AOvVaw0_mVQmBnD-ZqgZC3R7o6CP&ust=1683293670880000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLiguNzj2_4CFQAAAAAdAAAAABAJ",
	"price": 25,
	"category": "Refeições",
	"created_at": "2023-05-04 13:37:52",
	"updated_at": "2023-05-04 13:37:52",
	"ingredients": []
}

Retorna todos os Pratos

  GET /dishes
QueryParams Tipo Descrição
category string Opcional. O categoria pela qual você quer pesquisar
ingredient string Opcional. O ingrediente pelo qual você quer pesquisar
min_price float Opcional. O preço mínimo pelo qual você quer pesquisar
min_price float Opcional. O preço máximo pelo qual você quer pesquisar
[
	{
		"id": 1,
		"name": "Bolo",
		"description": "Bolo é um grão típico japonês...",
		"image_url": "fc43ebc873244687acd8-bolo.jpg",
		"price": 10.02,
		"category": "Sobremesa",
		"created_at": "2023-04-28 20:27:16",
		"updated_at": "2023-04-28 20:27:16"
	},
	{
		"id": 8,
		"name": "Lasanha",
		"description": "Lasanha é um...",
		"image_url": "",
		"price": 10.02,
		"category": "Refeição",
		"created_at": "2023-05-02 14:00:07",
		"updated_at": "2023-05-02 14:00:07"
	},
	{
		"id": 13,
		"name": "Salada Ravanello",
		"description": "Rabanetes, folhas verdes e molho agridoce salpicados com gergelim. O pão naan dá um toque especial.",
		"image_url": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fpt.dreamstime.com%2Fvista-superior-das-folhas-frescas-de-salada-verde-vivas-com-tomates-vermelhos-e-fundo-texturizado-rabanete-image188958649&psig=AOvVaw0_mVQmBnD-ZqgZC3R7o6CP&ust=1683293670880000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLiguNzj2_4CFQAAAAAdAAAAABAJ",
		"price": 25,
		"category": "Refeições",
		"created_at": "2023-05-04 13:37:52",
		"updated_at": "2023-05-04 13:37:52"
	}
]

Favoritos ❤️

Cria um Favorito

  POST /favorites/:dish_id

Deleta um Favorito

  DELETE /favorites/:dish_id

Retorna todos os Favoritos do Usuário

  GET /favorites
QueryParams Tipo Descrição
category string Opcional. O categoria pela qual você quer pesquisar
ingredient string Opcional. O ingrediente pelo qual você quer pesquisar
min_price float Opcional. O preço mínimo pelo qual você quer pesquisar
min_price float Opcional. O preço máximo pelo qual você quer pesquisar
[
	{
		"id": 8,
		"name": "Lasanha",
		"description": "Lasanha é um...",
		"image_url": "",
		"price": 10.02,
		"category": "Refeição",
		"created_at": "2023-05-02 14:00:07",
		"updated_at": "2023-05-02 14:00:07"
	},
	{
		"id": 13,
		"name": "Salada Ravanello",
		"description": "Rabanetes, folhas verdes e molho agridoce salpicados com gergelim. O pão naan dá um toque especial.",
		"image_url": "https://www.google.com/url?sa=i&url=https%3A%2F%2Fpt.dreamstime.com%2Fvista-superior-das-folhas-frescas-de-salada-verde-vivas-com-tomates-vermelhos-e-fundo-texturizado-rabanete-image188958649&psig=AOvVaw0_mVQmBnD-ZqgZC3R7o6CP&ust=1683293670880000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLiguNzj2_4CFQAAAAAdAAAAABAJ",
		"price": 25,
		"category": "Refeições",
		"created_at": "2023-05-04 13:37:52",
		"updated_at": "2023-05-04 13:37:52"
	}
]

Pedidos 🛍️

Cria um Pedido

  POST /orders/:dish_id

Edita um Pedido

  PUT /dishes/:order_id
  • Aqui você tem duas opções de Requisições, são elas:
{
	"status": "Preparando" // vai mudar apenas o status do Pedido
}
{
	"dish_id": 4 // vai adicionar um Prato ao Pedido, se ele não estiver no Pedido
	"quantity": 1 // a quantidade do Prato no Pedido, aumente ou diminua até 1
}

Deletar um Prato do Pedido

  DELETE /orders/:order_id
{
	"dish_id": 4
}

Retorna um Pedido com seus Pratos

  GET /orders/:order_id
{
	"order": {
		"id": 9,
		"user_id": 8,
		"status": "Pendente",
		"created_at": "2023-05-02 18:10:37"
	},
	"dishes": [
		{
			"name": "Café",
			"quantity": 1
		},
		{
			"name": "Macarrão",
			"quantity": 2
		}
	]
}

Retorna todos os Pedidos do Usuário

    GET /orders
[
	{
		"order": {
			"id": 10,
			"user_id": 9,
			"status": "Entregue",
			"created_at": "2023-05-03 12:56:43"
		},
		"dishes": [
			{
				"name": "Café",
				"quantity": 1
			}
		]
	},
	{
		"order": {
			"id": 11,
			"user_id": 9,
			"status": "Entregue",
			"created_at": "2023-05-03 12:59:39"
		},
		"dishes": [
			{
				"name": "Macarrão",
				"quantity": 1
			}
		]
	},
	{
		"order": {
			"id": 12,
			"user_id": 9,
			"status": "Pendente",
			"created_at": "2023-05-04 13:44:00"
		},
		"dishes": [
			{
				"name": "Salada Ravanello",
				"quantity": 1
			},
			{
				"name": "Macarrão",
				"quantity": 1
			}
		]
	}
]

Licença

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.