Nutrition One - Tracker de Dieta

Nutrition One - Tracker de Dieta preview

🥗 Nutrition One

Uma plataforma completa de rastreamento nutricional e fitness com IA, desenvolvida para transformar sua jornada de saúde.

Java Spring Boot MySQL License

📋 Í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) |

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:

  1. Fork o projeto

  2. Crie uma branch para sua feature (git checkout -b feature/NovaFuncionalidade)

  3. Commit suas mudanças (git commit -m 'Adiciona nova funcionalidade')

  4. Push para a branch (git push origin feature/NovaFuncionalidade)

  5. 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

🙏 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