A Daily Diet API é uma solução completa para o controle de hábitos alimentares e de hidratação, permitindo que os usuários monitorem sua ingestão diária de alimentos e água. Com recursos para gerenciar informações nutricionais e estabelecer metas personalizadas, ela facilita o acompanhamento do progresso em direção a uma alimentação equilibrada e saudável. Desenvolvida em Python com Flask e SQLAlchemy, a API oferece uma maneira prática e eficiente de manter o controle sobre a dieta e o bem-estar.
- 🍴 Adicionar Refeição: Criação de novas refeições com nome, descrição, categoria, calorias e status de dieta.
- ✏️ Atualizar Refeição: Modificação dos dados de uma refeição existente.
- ❌ Excluir Refeição: Exclusão de uma refeição.
- 🔍 Consultar Refeições: Listagem de refeições com filtros por categoria, status de dieta, e período.
- ❤️ Favoritar Refeição: Marcação de refeições como favoritas.
- 📅 Filtragem de Refeições: Filtros por data (dia, semana, mês) ou intervalo de datas personalizadas.
- 📊 Relatório de Refeições: Geração de relatórios sobre as refeições registradas, com a possibilidade de filtrar por períodos (dia, semana, mês) e incluir informações como calorias totais e metas de consumo de calorias.
- 🎯 Atualizar Meta de Calorias: Atualização da meta diária de calorias com base no objetivo nutricional do usuário.
- 🔥 Streak de Calorias: Acompanhamento do número de dias consecutivos em que a meta de calorias foi atingida.
- 💦 Adicionar Ingestão de Água: Registrar quantidade de água ingerida.
- ❌ Remover Ingestão de Água: Excluir um registro específico de ingestão de água.
- 📅 Consultar Ingestão de Água: Consultar ingestões de água com filtros de dia, semana e mês.
- 📈 Total de Água Consumida: Obter o total de água consumida em um período, com progresso em relação à meta.
- 🎯 Atualizar Meta de Ingestão de Água: Ajustar a meta diária de ingestão de água.
- 🔥 Streak de Ingestão de Água: Acompanhamento do número de dias consecutivos em que a meta de ingestão de água foi alcançada.
- 🐍 Python - Linguagem de programação utilizada.
- 🔥 Flask - Framework web em Python.
- 💾 SQLAlchemy - ORM para banco de dados.
- 📂 SQLite - Banco de dados leve, utilizado para armazenar os dados da aplicação.
- 🔗 Flask-SQLAlchemy - Integração do SQLAlchemy com Flask.
- 🔑 Flask-Login - Gerenciamento de sessão de login.
- ⚙️ Werkzeug - Utilitário WSGI para Flask.
- 🛡️ cryptography - Biblioteca de criptografia para Python.
- 🔒 bcrypt - Para hashing seguro de senhas.
📌 1. Clone o repositório:
git clone https://github.com/joschonarth/flask-auth-project
📌 2. Entre na pasta do projeto:
cd flask-auth-project
📌 3. Crie um ambiente virtual:
python -m venv .venv
📌 4. Ative o ambiente ambiente virtual:
.venv\Scripts\activate
📌 5. Instale as dependências do projeto que estão no arquivo requirements.txt
:
pip install -r requirements.txt
📌 6. Inicie o servidor de desenvolvimento:
python app.py
A API estará disponível em: http://127.0.0.1:5000
- ➕ Adicionar:
POST /api/meals/add
- Adiciona uma refeição. - ✏️ Atualizar:
PUT /api/meals/update/{meal_id}
- Atualiza uma refeição. - ❌ Excluir:
DELETE /api/meals/delete/{meal_id}
- Exclui uma refeição. - 🔍 Consultar:
GET /api/meals
- Lista refeições com filtros. - 📋 Consultar Refeição Específica:
GET /api/meals/{meal_id}
- Detalha uma refeição específica. - ⭐ Favoritar:
PATCH /api/meals/{meal_id}/favorite
- Marca ou desmarca uma refeição como favorita. - ❤️ Refeições Favoritas:
GET /api/meals/favorites
- Lista todas as refeições favoritas. - 📊 Relatório de Refeições:
GET /api/meals/report
- Geração de relatório com informações sobre refeições consumidas. - 🎯 Atualizar Meta de Calorias:
PUT /api/meals/calorie-goal
- Atualiza a meta diária de calorias. - 🔥 Streak de Calorias:
GET /api/meals/calorie-goal/streak
- Consulta o streak de dias consecutivos atingindo a meta de calorias.
- ➕ Adicionar:
POST /api/water/add
- Registra ingestão de água. - ❌ Remover:
DELETE /api/water/delete/{water_id}
- Exclui ingestão de água. - 🔍 Consultar:
GET /api/water
- Lista ingestões de água. - 💧 Total Consumido:
GET /api/water/total
- Consulta total de água consumida. - 🎯 Atualizar Meta:
POST /api/water/goal
- Atualiza meta diária de água. - 🔥 Streak de Ingestão de Água:
GET /api/water/streak
- Consulta o streak de dias consecutivos atingindo a meta de ingestão de água.
- 👤 Criar Usuário:
POST /api/users/add
- Criar um usuário. - 🔑 Login:
POST /api/users/login
- Login do usuário. - 🚪 Logout:
GET /api/users/logout
- Logout do usuário.
- Descrição: Adiciona uma nova refeição.
- Método:
POST
- Endpoint:
/api/meals/add
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/add
📝 Corpo da Requisição:
{
"name": "Grilled Chicken",
"description": "A protein-packed grilled chicken breast",
"in_diet": true,
"category": "LUNCH",
"calories": 300
}
📄 Exemplo de Resposta:
{
"message": "Meal added successfully"
}
- Descrição: Atualiza os dados de uma refeição existente.
- Método:
POST
- Endpoint:
/api/meals/update/{meal_id}
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/update/{meal_id}
📝 Corpo da Requisição:
{
"name": "Green Salad",
"description": "A healthy green salad",
"in_diet": true,
"category": "SALAD",
"calories": 150
}
📄 Exemplo de Resposta:
{
"message": "Meal updated successfully"
}
- Descrição: Exclui uma refeição registrada.
- Método:
DELETE
- Endpoint:
/api/meals/delete/{meal_id}
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/delete/{meal_id}
📄 Exemplo de Resposta:
{
"message": "Meal deleted successfully"
}
- Descrição: Consulta as refeições registradas com filtros opcionais.
- Método:
GET
- Endpoint:
/api/meals
- Parâmetros de consulta (opcionais):
category
: Filtro por categoria (LUNCH
,SNACK
,SALAD
, etc).in_diet
: Filtro por status de dieta (true
oufalse
).period
: Período para filtragem (day
,week
,month
).start_date
: Data de início (formato YYYY-MM-DD).end_date
: Data de fim (formato YYYY-MM-DD).
🌐 Exemplo de Requisição: http://localhost:5000/api/meals?period=day&in_diet=true
📄 Exemplo de Resposta:
[
{
"calories": 300.0,
"category": "LUNCH",
"date_time": "Fri, 15 Nov 2024 14:42:47 GMT",
"description": "A protein-packed grilled chicken breast",
"favorite": false,
"id": 1,
"in_diet": true,
"name": "Grilled Chicken"
},
{
"calories": 150.0,
"category": "SALAD",
"date_time": "Fri, 15 Nov 2024 14:42:58 GMT",
"description": "A healthy green salad",
"favorite": false,
"id": 2,
"in_diet": true,
"name": "Green Salad"
}
]
- Descrição: Consulta uma refeição especifica pelo ID.
- Método:
GET
- Endpoint:
/api/meals/{meal_id}
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/{meal_id}
📄 Exemplo de Resposta:
{
"calories": 300.0,
"category": "LUNCH",
"date_time": "Fri, 15 Nov 2024 14:42:47 GMT",
"description": "A protein-packed grilled chicken breast",
"favorite": false,
"id": 1,
"in_diet": true,
"name": "Grilled Chicken"
}
- Descrição: Marca ou desmarca uma refeição como favorita.
- Método:
PATCH
- Endpoint:
/api/meals/{meal_id}/favorite
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/{meal_id}/favorite
📄 Exemplo de Resposta:
{
"favorite": true,
"meal_id": 1,
"message": "Meal favorite status updated successfully"
}
- Descrição: Lista as refeições marcadas como favorito.
- Método:
PATCH
- Endpoint:
/api/meals/favorites
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/favorites
📄 Exemplo de Resposta:
{
"favorite_meals": [
{
"calories": 300.0,
"date_time": "Fri, 15 Nov 2024 14:42:47 GMT",
"id": 1,
"in_diet": true,
"name": "Grilled Chicken"
}
]
}
- Descrição: Gera um relatório das refeições por data (dia, semana, mês).
- Método:
GET
- Endpoint:
/api/meals/report
- Parâmetros de consulta (opcionais):
period
: Período para filtragem (day
,week
,month
).start_date
: Data de início (formato YYYY-MM-DD).end_date
: Data de fim (formato YYYY-MM-DD).
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/report?period=day
📄 Exemplo de Resposta:
{
"calorie_goal": 2000.0,
"end_date": "2024-11-15",
"meals_in_diet": 2,
"meals_out_of_diet": 0,
"progress": 22.5,
"start_date": "2024-11-15",
"total_calories": 450.0
}
- Descrição: Ajusta a meta diária de calorias.
- Método:
POST
- Endpoint:
/api/meals/calorie-goal
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/calorie-goal
📝 Corpo da Requisição:
{
"daily_calorie_goal": 3000
}
📄 Exemplo de Resposta:
{
"message": "Daily calorie goal successfully updated to 3000"
}
- Descrição: Calcula e exibe a sequência de dias em que o usuário atingiu sua meta diária de calorias.
- Método:
GET
- Endpoint:
/api/meals/calorie-goal/streak
🌐 Exemplo de Requisição: http://localhost:5000/api/meals/calorie-goal/streak
📄 Exemplo de Resposta:
{
"streak": 10
}
- Descrição: Registra uma ingestão de água.
- Método:
POST
- Endpoint:
/api/water/add
🌐 Exemplo de Requisição: http://localhost:5000/api/water/add
📝 Corpo da Requisição:
{
"quantity": 250
}
📄 Exemplo de Resposta:
{
"date_time": "2024-11-15 15:53:28",
"message": "Water intake recorded successfully",
"quantity": 250.0
}
- Descrição: Exclui um registro de ingestão de água.
- Método:
DELETE
- Endpoint:
/api/water/delete/{water_id}
🌐 Exemplo de Requisição: http://localhost:5000/api/delete/{water_id}
📄 Exemplo de Resposta:
{
"message": "Water intake removed successfully"
}
- Descrição: Consulta os registros de ingestão de água.
- Método:
GET
- Endpoint:
/api/water
- Parâmetros de consulta (opcionais):
period
: Período para filtragem (day
,week
,month
).start_date
: Data de início (formato YYYY-MM-DD).end_date
: Data de fim (formato YYYY-MM-DD).
🌐 Exemplo de Requisição: http://localhost:5000/api/water?period=day
📄 Exemplo de Resposta:
[
{
"date_time": "2024-11-15 15:54:48",
"id": 1,
"quantity": 250.0
},
{
"date_time": "2024-11-15 15:54:57",
"id": 2,
"quantity": 500.0
}
]
- Descrição: Obtém o total de água consumida em um período específico.
- Método:
GET
- Endpoint:
/api/water/total
- Parâmetros de consulta:
period
: Período para filtragem (day
,week
,month
).start_date
: Data de início (formato YYYY-MM-DD).end_date
: Data de fim (formato YYYY-MM-DD).
🌐 Exemplo de Requisição: http://localhost:5000/api/water/total
📄 Exemplo de Resposta:
{
"period": "day",
"progress": 37.5,
"total_water": 750.0,
"water_goal": 2000.0
}
- Descrição: Ajusta a meta diária de ingestão de água.
- Método:
POST
- Endpoint:
/api/water/goal
🌐 Exemplo de Requisição: http://localhost:5000/api/water/goal
📝 Corpo da Requisição:
{
"daily_water_goal": 3000
}
📄 Exemplo de Resposta:
{
"message": "Daily water intake goal successfully updated to 3000"
}
- Descrição: Calcula e exibe a sequência de dias em que o usuário atingiu sua meta diária de ingestão de água.
- Método:
GET
- Endpoint:
/api/water/streak
🌐 Exemplo de Requisição: http://localhost:5000/api/water/streak
📄 Exemplo de Resposta:
{
"streak": 10
}
- Descrição: Cria um novo usuário.
- Método:
POST
- Endpoint:
/api/users/add
🌐 Exemplo de Requisição: http://localhost:5000/api/users/add
📝 Corpo da Requisição:
{
"username": "joschonarth",
"email": "joschonarth@gmail.com",
"password": "123456"
}
📄 Exemplo de Resposta:
{
"message": "User successfully registered",
"user_id": "25f541d4-3f8d-45ca-9fb2-fdb7d78ff001"
}
- Descrição: Realiza o login do usuário.
- Método:
POST
- Endpoint:
/api/users/login
🌐 Exemplo de Requisição: http://localhost:5000/api/users/login
📝 Corpo da Requisição:
{
"email": "joschonarth@gmail.com",
"password": "123456"
}
📄 Exemplo de Resposta:
{
"message": "Login successful",
"user_id": "25f541d4-3f8d-45ca-9fb2-fdb7d78ff001"
}
- Descrição: Realiza o logout do usuário.
- Método:
GET
- Endpoint:
/api/users/logout
🌐 Exemplo de Requisição: http://localhost:5000/api/users/logout
📄 Exemplo de Resposta:
{
"message": "Logout successful"
}
Contribuições são bem-vindas! Sinta-se à vontade para abrir uma issue com sugestões ou enviar um pull request com melhorias.
Este projeto está licenciado sob a MIT License.