Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
44b7dab
feat: change ID generation strategy to UUID for User entity
OtavioXimarelli Jun 2, 2025
2e59fa4
feat: enhance security configuration with stateless session managemen…
OtavioXimarelli Jun 2, 2025
f1362f3
feat: add AuthenticationDTO for user login and password encapsulation
OtavioXimarelli Jun 2, 2025
5ba2dab
feat: add AuthenticationController for user login functionality
OtavioXimarelli Jun 2, 2025
2794d25
feat: change ID generation strategy to IDENTITY and add constructor t…
OtavioXimarelli Jun 3, 2025
853ceae
feat: add RegisterDTO for user registration data encapsulation
OtavioXimarelli Jun 3, 2025
7ff4ab7
feat: add user registration endpoint to AuthenticationController
OtavioXimarelli Jun 4, 2025
f2f13f5
feat: configure CORS and update security settings for authentication …
OtavioXimarelli Jun 4, 2025
678bd58
fix: improve code formatting and readability in User class
OtavioXimarelli Jun 4, 2025
1fe7d62
fix: reorder import statements for improved clarity in UserRepository
OtavioXimarelli Jun 4, 2025
16eb749
fix: enhance security configuration for authentication endpoints
OtavioXimarelli Jun 5, 2025
54c13b6
fix: remove unused CORS configuration class
OtavioXimarelli Jun 5, 2025
6625f11
fix: remove unused CORS imports from SecurityConfig
OtavioXimarelli Jun 5, 2025
6577982
fix: specify generic type for ResponseEntity in AuthenticationControl…
OtavioXimarelli Jun 5, 2025
8237ca6
fix: update application.properties for add logging level for security
OtavioXimarelli Jun 5, 2025
847fa97
chore: reorganize pom.xml for better structure and readability
OtavioXimarelli Jun 9, 2025
3d834ca
fix: update application.properties to use environment variables for s…
OtavioXimarelli Jun 9, 2025
43e1404
fix: update JWT secret property in application.properties for better …
OtavioXimarelli Jun 9, 2025
fc1c33a
fix: load environment variables using Dotenv in AiFoodAppApplication
OtavioXimarelli Jun 9, 2025
fdfbead
feat: implement TokenService for JWT generation and validation
OtavioXimarelli Jun 9, 2025
27580bd
feat: add SecurityFilter to handle JWT authentication and user valida…
OtavioXimarelli Jun 9, 2025
b51fda7
feat: refactor SecurityConfig to move to security package and integra…
OtavioXimarelli Jun 9, 2025
678200a
feat: add LoginResponseDTO for handling login response data
OtavioXimarelli Jun 9, 2025
4689df1
feat: update AuthenticationController to include JWT token generation…
OtavioXimarelli Jun 9, 2025
dbdd6a0
feat: enhance dotenv configuration to set multiple system properties …
OtavioXimarelli Jun 9, 2025
6a431e1
feat: update README to reflect user authentication and Spring Securit…
OtavioXimarelli Jun 9, 2025
ae8ba7a
fix: change findByLogin method return type from Optional<UserDetails>…
OtavioXimarelli Jun 10, 2025
6dbb2d1
refactor: simplify user authentication logic in SecurityFilter
OtavioXimarelli Jun 10, 2025
fb6daf4
fix: update token generation to use username instead of login and imp…
OtavioXimarelli Jun 10, 2025
0a1cb6d
refactor: remove unused Optional import in UserRepository
OtavioXimarelli Jun 10, 2025
8530eef
fix: update loadUserByUsername method to handle null user return from…
OtavioXimarelli Jun 10, 2025
d94b209
feat: add DotenvEnvironmentPostProcessor to spring.factories for envi…
OtavioXimarelli Jun 10, 2025
5f0be49
refactor: remove dotenv configuration from main application class
OtavioXimarelli Jun 10, 2025
6af7d1c
feat: add DotenvEnvironmentPostProcessor for loading environment vari…
OtavioXimarelli Jun 10, 2025
39595d3
refactor: rename LoginResposneDTO to LoginResponseDTO for consistency
OtavioXimarelli Jun 10, 2025
2e5bd9f
fix: correct LoginResponseDTO import and use consistent BCryptPasswor…
OtavioXimarelli Jun 10, 2025
e513ba5
Merge branch 'master' into SpringSecurity-implementation
OtavioXimarelli Jun 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 98 additions & 103 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -9,168 +9,163 @@
[![Docker Compose](https://img.shields.io/badge/Docker%20Compose-3.8-2496ED)](https://docs.docker.com/compose/)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/OtavioXimarelli/AiFoodApp)


## 📝 Sobre o Projeto

O AI Food App é uma aplicação que integra gerenciamento de alimentos com inteligência artificial para gerar receitas personalizadas e análises nutricionais. O sistema permite que os usuários cadastrem alimentos disponíveis e recebam sugestões de receitas otimizadas baseadas nos ingredientes que possuem.
O AI Food App integra gerenciamento de alimentos com inteligência artificial para gerar receitas personalizadas e análises nutricionais. Agora, o sistema conta com autenticação de usuários e segurança reforçada via Spring Security e JWT.

## 🛠️ Tecnologias Utilizadas

- **Spring Boot**: Framework para criação da aplicação Java
- **Spring Data JPA**: Para persistência e acesso a dados
- **Spring AI**: Integração com APIs de inteligência artificial
- **Maritaca AI**: API de IA para geração de receitas e análises nutricionais em português
- **Spring Boot**: Framework para aplicações Java
- **Spring Data JPA**: Persistência de dados
- **Spring AI**: Integração com APIs de IA
- **Maritaca AI**: API de IA para receitas e nutrição
- **Spring Security**: Autenticação e autorização (JWT)
- **PostgreSQL**: Banco de dados relacional
- **Flyway**: Controle de versão do banco de dados
- **Lombok**: Redução de código boilerplate
- **RESTful API**: Comunicação entre frontend e backend
- **Docker**: Containerização da aplicação e banco de dados
- **Docker Compose**: Orquestração de múltiplos containers
- **Flyway**: Controle de versão do banco
- **Lombok**: Redução de boilerplate
- **RESTful API**: Comunicação backend
- **Docker**: Containerização
- **Docker Compose**: Orquestração de containers
- **dotenv-java**: Carregamento de variáveis do `.env`

## 🏗️ Arquitetura

O projeto segue uma arquitetura em camadas:

- **Controller**: Endpoints da API REST
- **Service**: Lógica de negócios
- **Controller**: Endpoints REST
- **Service**: Lógica de negócio
- **Repository**: Acesso a dados
- **Model**: Entidades do domínio
- **DTO**: Objetos de transferência de dados
- **DTO**: Transferência de dados
- **Mapper**: Conversão entre entidades e DTOs
- **Config**: Configurações da aplicação
- **Security**: Lógica de autenticação e autorização

## 🔒 Segurança

### Infraestrutura
- **Spring Security** protege todos os endpoints, exceto `/api/auth/login` e `/api/auth/register`
- **JWT**: Autenticação baseada em token para acesso à API
- **Variáveis Sensíveis**: Configuradas via arquivo `.env` (NUNCA commitado no repositório)

O projeto está configurado para execução em containers Docker:
### Exemplo de `.env` (NÃO use valores reais em produção)

```properties
# Database
DB_URL=jdbc:postgresql://localhost:5432/seu_db
DB_USERNAME=seu_usuario
DB_PASSWORD=sua_senha

# Maritaca AI
MARITACA_API_URL=https://api.maritaca.ai/api/chat/completions
MARITACA_API_KEY=sua_chave_api
MARITACA_API_MODEL=modelo do maritaca
MARITACA_SYSTEM_PROMPT="Você é um assistente culinário"

# JWT
JWT_SECRET=seu_segredo_super_secreto_para_jwt
```

- **Dockerfile**: Define a imagem da aplicação baseada no Eclipse Temurin (JDK 23)
- **Docker Compose**: Orquestra a aplicação e o banco de dados PostgreSQL
- **Ambiente de Desenvolvimento**: Configurações específicas para desenvolvimento local
- **Ambiente de Produção**: Preparado para implantação em ambientes containerizados
> **O arquivo `.env` está no `.gitignore` por padrão. Nunca compartilhe seus dados reais.**
## 🗃️ Estrutura do Banco de Dados

- **tb_food_item**: Armazena informações sobre os alimentos disponíveis
- **tb_food_items_tag**: Tags associadas aos alimentos
- **tb_recipes**: Informações básicas sobre as receitas
- **tb_recipe_instructions**: Passos para preparar as receitas
- **tb_recipes_nutritional_info**: Informações nutricionais das receitas
- **tb_recipe_ingredients**: Relacionamento entre receitas e ingredientes
- **tb_food_item**: Alimentos
- **tb_food_items_tag**: Tags dos alimentos
- **tb_recipes**: Receitas
- **tb_recipe_instructions**: Passos das receitas
- **tb_recipes_nutritional_info**: Informações nutricionais
- **tb_recipe_ingredients**: Ingredientes das receitas
- **tb_user**: Usuários (autenticação)

## 🚀 Funcionalidades

### Gerenciamento de Alimentos
- Cadastro de novos alimentos com informações nutricionais
- Listagem de todos os alimentos disponíveis
- Atualização e exclusão de alimentos
- CRUD de alimentos

### Geração de Receitas com IA
- Criação automática de receitas baseadas nos alimentos disponíveis
- Receitas focadas em praticidade, rapidez e saúde
- Instruções detalhadas passo a passo
- Instruções detalhadas
- Informações nutricionais estimadas

### Análise Nutricional
- Análise do perfil nutricional das receitas
- Sugestões para uma dieta equilibrada

### Autenticação & Segurança
- Cadastro e login de usuários
- Endpoints protegidos por JWT

## 🔌 API Endpoints

### Food Items
- `POST /api/foods/create`: Cria um novo alimento
- `GET /api/foods/list`: Lista todos os alimentos
- `GET /api/foods/list/{id}`: Busca um alimento pelo ID
- `PUT /api/foods/update`: Atualiza um alimento existente
- `DELETE /api/foods/delete/{id}`: Remove um alimento
### Autenticação
- `POST /api/auth/login`: Login (retorna JWT)
- `POST /api/auth/register`: Cadastro de usuário

### Alimentos (Food Items)
- `POST /api/foods/create`: Cria alimento
- `GET /api/foods/list`: Lista alimentos
- `GET /api/foods/list/{id}`: Busca alimento por ID
- `PUT /api/foods/update`: Atualiza alimento
- `DELETE /api/foods/delete/{id}`: Remove alimento

### Recipes
- `GET /api/recipes/gen`: Gera uma nova receita com base nos alimentos disponíveis
- `GET /api/recipes/analyze/{id}`: Analisa o perfil nutricional de uma receita
### Receitas (Recipes)
- `GET /api/recipes/gen`: Gera receita com IA
- `GET /api/recipes/analyze/{id}`: Analisa nutrição da receita

## 💻 Como Executar o Projeto

### Execução Local

1. Clone o repositório
```bash
git clone https://github.com/seu-usuario/ai-food-app.git
cd ai-food-app
```
```bash
git clone https://github.com/seu-usuario/ai-food-app.git
cd ai-food-app
```

2. Configure as variáveis de ambiente no arquivo `application.properties`
```properties
# Configurações do banco de dados
spring.datasource.url=jdbc:postgresql://localhost:5432/aifoodapp
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha

# Configurações da API Maritaca
maritaca.api.url=https://api.maritaca.ai/api/chat/completions
maritaca.api.key=sua_chave_api
maritaca.api.model=sabia-2-medium
maritaca.system.prompt=Você é um assistente de culinária especialista em nutrição e receitas saudáveis.
```
2. Crie um arquivo `.env` na raiz do projeto (veja exemplo acima)

3. Execute o projeto
```bash
./mvnw spring-boot:run
```
```bash
./mvnw spring-boot:run
```

### Execução com Docker

1. Clone o repositório
```bash
git clone https://github.com/seu-usuario/ai-food-app.git
cd ai-food-app
```

2. Construa a aplicação
```bash
./mvnw clean package
```
```bash
git clone https://github.com/seu-usuario/ai-food-app.git
cd ai-food-app
```

3. Execute com Docker Compose
```bash
docker-compose up -d
```
2. Crie o arquivo `.env` na raiz

O Docker Compose irá:
- Iniciar um container PostgreSQL com o banco de dados `foodDB`
- Construir a imagem da aplicação usando o Dockerfile
- Iniciar a aplicação conectada ao banco de dados
- Expor a aplicação na porta 8080 do host
3. Construa e execute com Docker Compose
```bash
docker-compose up -d
```

## 🧪 Status Atual do Projeto

O projeto encontra-se em fase de desenvolvimento, com as seguintes funcionalidades implementadas:

✅ Estrutura básica da aplicação
✅ Gerenciamento de alimentos (CRUD completo)
✅ Integração com a API Maritaca AI
✅ Geração de receitas baseada nos alimentos disponíveis
✅ Análise nutricional de receitas
✅ Containerização com Docker e Docker Compose

**Em desenvolvimento:**
🔄 Interface de usuário
🔄 Recomendações personalizadas baseadas em preferências alimentares
🔄 Sistema de favoritos e histórico de receitas
🔄 Otimização da integração com a IA para melhorar as recomendações
- ✅ Estrutura básica da aplicação
- ✅ Gerenciamento de alimentos (CRUD)
- ✅ Integração com Maritaca AI
- ✅ Geração de receitas com IA
- ✅ Análise nutricional
- ✅ Autenticação e segurança com JWT
- ✅ Configuração sensível via .env

## 📋 Próximos Passos

- Desenvolvimento de uma interface de usuário em React
- Implementação de autenticação e autorização
- Expansão das funcionalidades de análise nutricional
- Adição de filtros para restrições alimentares (vegetariano, sem glúten, etc.)
- Otimização da geração de receitas com base no histórico de preferências
- Configuração de CI/CD para deploy automático usando Docker
- Implementação de monitoramento e logging para os containers
- Otimização das configurações Docker para ambientes de produção
- 🔲 Interface de usuário (React)
- 🔲 Recomendações personalizadas
- 🔲 Favoritos/histórico
- 🔲 Integração AI aprimorada
- 🔲 CI/CD e monitoramento

## 👥 Contribuições

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e enviar pull requests.
Contribuições são bem-vindas! Abra issues e pull requests.

## 📄 Licença


Este projeto está licenciado sob a [MIT License](LICENSE).

Loading