https://github.com/heliolj/food-explorer-api
API Food Explorer para uma aplicação de menu e pedidos.
https://github.com/heliolj/food-explorer-api
express nodejs sqlite sqlite3
Last synced: 3 months ago
JSON representation
API Food Explorer para uma aplicação de menu e pedidos.
- Host: GitHub
- URL: https://github.com/heliolj/food-explorer-api
- Owner: helioLJ
- License: mit
- Created: 2023-04-26T22:49:34.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-16T12:12:45.000Z (about 3 years ago)
- Last Synced: 2025-06-16T19:53:17.017Z (about 1 year ago)
- Topics: express, nodejs, sqlite, sqlite3
- Language: JavaScript
- Homepage: https://food-explorer-api-kxi2.onrender.com
- Size: 8.79 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

# 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 ⚙️](#stack-utilizada)
- [Funcionalidades 🎯](#funcionalidades)
- [Variáveis de Ambiente 🔑](#variáveis-de-ambiente)
- [Rodando localmente 🏠](#rodando-localmente)
- [Rodando os testes 🧪](#rodando-os-testes)
- [Apêndice 🔍](#apêndice)
- [Documentação da API 📖](#documentação-da-api)
- [Licença 📜](#licença)
## 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`
```env
AUTH_SECRET=
```
## Rodando localmente
🏠 Clone o projeto
```bash
git clone https://github.com/helioLJ/food-explorer-api
```
Entre no diretório do projeto
```bash
cd my-project
```
Instale as dependências
```bash
npm install
```
Inicie o servidor
```bash
npm run dev
```
## Rodando os testes
🧪 Para rodar os testes, rode o seguinte comando
```bash
npm test
```
## Apêndice
| 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
```http
POST /users
```
```JSON
{
"name": "John",
"email": "john@email.com",
"password": "123"
// "isAdmin": true (essa parâmetro é opcional caso queira criar um usuário Admin)
}
```
#### Edita um Usuário
```http
PUT /users
```
```JSON
{
"name": "John",
"email": "john@email.com",
"old_password": "123",
"new_password": "456"
}
```
#### Deleta um Usuário
```http
DELETE /users
```
#### Retorna um Usuário
```http
GET /users
```
```JSON
{
"id": 1,
"name": "John",
"email": "john@email.com",
"created_at": "2023-05-02 17:42:34",
"updated_at": "2023-05-02 17:42:34"
}
```
### Sessões (Auth) 🔑
#### Cria uma Sessão
```http
POST /sessions
```
```JSON
{
"email": "john@email.com",
"password": "123"
}
```
### Pratos 🍲
#### Cria um Prato
```http
POST /dishes
```
```JSON
{
"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
```http
PUT /dishes/:dish_id
```
```JSON
{
"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
```http
PATCH /dishes/picture/:dish_id
```
#### Deleta um Prato
```http
DELETE /dishes/dish_id
```
#### Retorna um Prato
```http
GET /dishes/:dish_id
```
```JSON
{
"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
```http
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 |
```JSON
[
{
"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
```http
POST /favorites/:dish_id
```
#### Deleta um Favorito
```http
DELETE /favorites/:dish_id
```
#### Retorna todos os Favoritos do Usuário
```http
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 |
```JSON
[
{
"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
```http
POST /orders/:dish_id
```
#### Edita um Pedido
```http
PUT /dishes/:order_id
```
- Aqui você tem duas opções de Requisições, são elas:
```javascript
{
"status": "Preparando" // vai mudar apenas o status do Pedido
}
```
```javascript
{
"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
```http
DELETE /orders/:order_id
```
```javascript
{
"dish_id": 4
}
```
#### Retorna um Pedido com seus Pratos
```http
GET /orders/:order_id
```
```JSON
{
"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
```http
GET /orders
```
```JSON
[
{
"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
- 📜 [MIT](./LICENSE)