Nutrition One - Tracker de Dieta
🥗 Nutrition One
Uma plataforma completa de rastreamento nutricional e fitness com IA, desenvolvida para transformar sua jornada de saúde.
📋 Índice
🎯 Sobre o Projeto
Nutrition One é uma aplicação web moderna que combina rastreamento nutricional inteligente com gerenciamento de treinos. O sistema utiliza a base de dados TACO (Tabela Brasileira de Composição de Alimentos) para fornecer informações nutricionais precisas e cálculos automáticos baseados nos objetivos do usuário.
✨ Diferenciais
📊 Cálculos Automáticos: TMB, TDEE, macros e micros calculados automaticamente
🔒 Segurança JWT: Autenticação segura com JSON Web Tokens
🎨 Interface Moderna: Design responsivo e intuitivo
📱 Progressive Web App: Funciona em qualquer dispositivo
🇧🇷 Base TACO: Dados nutricionais brasileiros precisos
🚀 Funcionalidades
Para Usuários
✅ Cadastro e autenticação segura
✅ Perfil nutricional personalizado com cálculos automáticos
✅ Rastreamento de refeições com valores nutricionais
✅ Dashboard completo com métricas diárias
✅ Histórico de consumo e progresso
✅ Sistema de hidratação
✅ Metas customizáveis
Sistema
✅ API RESTful completa
✅ Banco de dados relacional com JPA/Hibernate
✅ Autenticação JWT com Spring Security
✅ Validações e tratamento de erros
✅ Cálculos nutricionais automáticos
🛠️ Tecnologias
Backend
Java 21 - Linguagem principal
Spring Boot 4.0.0 - Framework
Spring Security - Autenticação e autorização
Spring Data JPA - Persistência de dados
Hibernate - ORM
MySQL - Banco de dados
JWT (JJWT) - Tokens de autenticação
Lombok - Redução de boilerplate
Maven - Gerenciamento de dependências
Frontend
HTML5 / CSS3 - Estrutura e estilo
JavaScript (ES6+) - Lógica do cliente
Fetch API - Requisições HTTP
📦 Pré-requisitos
Antes de começar, você precisará ter instalado:
💻 Instalação
1. Clone o Repositório
git clone https://github.com/seu-usuario/nutrition-one.git
cd nutrition-one
2. Configure o Banco de Dados
Crie um banco MySQL:
CREATE DATABASE nutrition_one;
3. Configure as Propriedades
Edite o arquivo backend/src/main/resources/application.yaml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/nutrition_one
username: seu_usuario
password: sua_senha
security:
config:
key: "SuaChaveSecretaAqui_MinimoDeCaracteresNecessario"
4. Compile e Execute o Backend
cd backend
./mvnw clean install
./mvnw spring-boot:run
O servidor estará rodando em: http://localhost:8080
5. Execute o Frontend
Abra o arquivo frontend/html/index.html em um navegador ou use um servidor local:
# Com Python 3
cd frontend
python -m http.server 3000
# Com Node.js
npx http-server -p 3000
Acesse: http://localhost:3000
⚙️ Configuração
Variáveis de Ambiente
Você pode configurar as seguintes variáveis:
| Variável | Descrição | Padrão |
|----------|-----------|--------|
| SPRING_DATASOURCE_URL | URL do banco de dados | jdbc:mysql://localhost:3306/nutrition_one |
| SPRING_DATASOURCE_USERNAME | Usuário do banco | root |
| SPRING_DATASOURCE_PASSWORD | Senha do banco | root |
| SECURITY_CONFIG_KEY | Chave secreta JWT | (obrigatório) |
| SECURITY_CONFIG_EXPIRATION | Tempo de expiração do token | 3600000 (1 hora) |
Popular Tabela de Alimentos
Execute o script SQL de exemplo para popular a base TACO:
-- Ver: backend/src/wiki/meals_guide.md (final do arquivo)
INSERT INTO foods (name, category, calories, protein, ...) VALUES (...);
📖 Uso
1. Criar uma Conta
POST http://localhost:8080/users
Content-Type: application/json
{
"name": "João Silva",
"username": "joao",
"password": "senha123"
}
2. Fazer Login
POST http://localhost:8080/login
Content-Type: application/json
{
"username": "joao",
"password": "senha123"
}
Resposta:
{
"username": "joao",
"token": "Bearer eyJhbGciOiJIUzI1NiJ9..."
}
3. Criar Perfil Nutricional
POST http://localhost:8080/profile
Authorization: Bearer {seu_token}
Content-Type: application/json
{
"weight": 80.5,
"height": 175,
"age": 25,
"gender": "MALE",
"goal": "GAIN_MUSCLE",
"activityLevel": "MODERATE"
}
4. Registrar Refeição
POST http://localhost:8080/meals
Authorization: Bearer {seu_token}
Content-Type: application/json
{
"name": "Café da Manhã",
"type": "BREAKFAST",
"date": "2024-11-27",
"foods": [
{
"foodId": 1,
"quantity": 200,
"notes": "Arroz cozido"
}
]
}
📁 Estrutura do Projeto
nutrition-one/
├── backend/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── br/com/nutritionone/Nutrition_One/
│ │ │ │ ├── controller/ # Controladores REST
│ │ │ │ ├── model/ # Entidades JPA
│ │ │ │ ├── repository/ # Repositórios
│ │ │ │ ├── service/ # Lógica de negócio
│ │ │ │ ├── security/ # Configuração JWT
│ │ │ │ └── dto/ # Data Transfer Objects
│ │ │ └── resources/
│ │ │ └── application.yaml # Configurações
│ │ └── test/ # Testes
│ ├── pom.xml # Dependências Maven
│ └── mvnw # Maven Wrapper
├── frontend/
│ ├── html/ # Páginas HTML
│ ├── css/ # Estilos
│ └── js/ # JavaScript
└── README.md
🔌 API Endpoints
Autenticação
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| POST | /users | Criar usuário | ❌ |
| POST | /login | Fazer login | ❌ |
Perfil
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| POST | /profile | Criar perfil | ✅ |
| GET | /profile | Buscar perfil | ✅ |
| PUT | /profile | Atualizar perfil completo | ✅ |
| PATCH | /profile | Atualizar campos específicos | ✅ |
| DELETE | /profile | Deletar perfil | ✅ |
Alimentos
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | /foods | Listar alimentos | ❌ |
| GET | /foods/{id} | Buscar alimento | ❌ |
| GET | /foods/search?name= | Buscar por nome | ❌ |
| GET | /foods/category/{category} | Buscar por categoria | ❌ |
| POST | /foods | Criar alimento | ✅ |
Refeições
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| POST | /meals | Criar refeição | ✅ |
| GET | /meals | Listar refeições | ✅ |
| GET | /meals/{id} | Buscar refeição | ✅ |
| GET | /meals/today | Refeições de hoje | ✅ |
| GET | /meals/date/{date} | Refeições por data | ✅ |
| PUT | /meals/{id} | Atualizar refeição | ✅ |
| DELETE | /meals/{id} | Deletar refeição | ✅ |
📚 Documentação completa: Ver arquivos em backend/src/wiki/
🤝 Contribuindo
Contribuições são bem-vindas! Para contribuir:
Fork o projeto
Crie uma branch para sua feature (
git checkout -b feature/NovaFuncionalidade)Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade')Push para a branch (
git push origin feature/NovaFuncionalidade)Abra um Pull Request
Padrões de Código
Siga as convenções Java/Spring Boot
Use Lombok para reduzir boilerplate
Adicione testes para novas funcionalidades
Documente endpoints novos
📝 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
👥 Autores
- Felipe Napoli - Desenvolvedor Principal - GitHub
📧 Contato
Email: contato@nutritionone.com
Website: nutritionone.com
🙏 Agradecimentos
Tabela TACO pela base de dados nutricional
Spring Framework pela excelente documentação
Comunidade open source
⭐ Se este projeto foi útil, deixe uma estrela!
Feito com ❤️ por Felipe Napoli