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.
- Stack utilizada ⚙️
- Funcionalidades 🎯
- Variáveis de Ambiente 🔑
- Rodando localmente 🏠
- Rodando os testes 🧪
- Apêndice 🔍
- Documentação da API 📖
- Licença 📜
⚙️ Node.js, Express, SQLite
- 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
🔑 Para rodar esse projeto, você vai precisar adicionar só uma variável de ambiente, como mostra o arquivo env.example
AUTH_SECRET=
🏠 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
🧪 Para rodar os testes, rode o seguinte comando
npm test
Diagrama Entidade Relacionamento 💡 | Estrutura de Pastas do Projeto 🔍 |
---|---|
📖 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.
POST /users
{
"name": "John",
"email": "[email protected]",
"password": "123"
// "isAdmin": true (essa parâmetro é opcional caso queira criar um usuário Admin)
}
PUT /users
{
"name": "John",
"email": "[email protected]",
"old_password": "123",
"new_password": "456"
}
DELETE /users
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"
}
POST /sessions
{
"email": "[email protected]",
"password": "123"
}
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"]
}
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"]
}
PATCH /dishes/picture/:dish_id
DELETE /dishes/dish_id
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": []
}
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"
}
]
POST /favorites/:dish_id
DELETE /favorites/:dish_id
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"
}
]
POST /orders/:dish_id
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
}
DELETE /orders/:order_id
{
"dish_id": 4
}
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
}
]
}
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
}
]
}
]
- 📜 MIT