11# AI Food App
22
33[ ![ Spring Boot] ( https://img.shields.io/badge/Spring%20Boot-3.5.4-brightgreen )] ( https://spring.io/projects/spring-boot )
4- [ ![ Java] ( https://img.shields.io/badge/Java-23-orange )] (http## 🔐 Fluxo de Autenticação
5-
6- 1 . ** Iniciar Login** :
7- - Usuário clica no botão de login com Google
8- - O frontend redireciona para ` /oauth2/authorization/google `
9- - Spring Security processa a requisição e redireciona para tela de login do Google
10-
11- 2 . ** Autorização Google** :
12- - Usuário se autentica no Google
13- - Google redireciona de volta para ` /login/oauth2/code/google ` com o código de autorização
14-
15- 3 . ** Processamento pela Aplicação** :
16- - Spring Security processa o código e cria uma sessão
17- - Cookies JSESSIONID são configurados
18- - Usuário é redirecionado para a página inicial
19-
20- 4 . ** Verificação de Autenticação** :
21- - O frontend verifica o status com ` /api/auth/status `
22- - Se autenticado, busca os dados do usuário com ` /api/auth `
23-
24- ## 🔧 Solução de Problemas
25-
26- ### Problemas Comuns de Autenticação
27- - ** 404 em /oauth2/authorization/google** : Verifique a configuração do Nginx para este path
28- - ** Cookies Não Persistentes** : Verifique as configurações de SameSite e Domínio nos cookies
29- - ** 401 Unauthorized** : Verifique os logs para problemas de sessão ou token
30- - ** Redirecionamentos Infinitos** : Problemas na configuração do proxy Nginx
31-
32- ### Comandos Úteis
33- - Verificar logs do backend: ` docker logs aifoodapp `
34- - Testar configuração Nginx: ` sudo nginx -t `
35- - Aplicar nova configuração Nginx: ` ./update_nginx.sh `
36- - Reiniciar serviços: ` docker-compose restart ` cle.com/java/)
4+ [ ![ Java] ( https://img.shields.io/badge/Java-23-orange )] ( https://oracle.com/java/ )
375[ ![ Spring AI] ( https://img.shields.io/badge/Spring%20AI-0.8.0-blue )] ( https://spring.io/projects/spring-ai )
386[ ![ PostgreSQL] ( https://img.shields.io/badge/PostgreSQL-15-blue )] ( https://www.postgresql.org/ )
397[ ![ Flyway] ( https://img.shields.io/badge/Flyway-Latest-red )] ( https://flywaydb.org/ )
408[ ![ Docker] ( https://img.shields.io/badge/Docker-Latest-2496ED )] ( https://www.docker.com/ )
419[ ![ Docker Compose] ( https://img.shields.io/badge/Docker%20Compose-3.8-2496ED )] ( https://docs.docker.com/compose/ )
4210[ ![ OAuth2] ( https://img.shields.io/badge/OAuth2-Google-4285F4 )] ( https://developers.google.com/identity/protocols/oauth2 )
4311
12+ ---
4413
4514## 📝 Sobre o Projeto
4615
47- O AI Food App integra gerenciamento de alimentos com inteligência artificial para gerar receitas personalizadas e análises nutricionais. O sistema conta com autenticação de usuários via Google OAuth2, persistência de sessões, e segurança reforçada via Spring Security, tudo implantado em um ambiente AWS EC2 com HTTPS.
16+ O ** AI Food App** integra o gerenciamento inteligente de alimentos com IA para gerar receitas personalizadas e análises nutricionais. A autenticação é feita via Google OAuth2, garantindo segurança e praticidade.
17+
18+ ---
19+
20+ ## 📋 Sumário
21+
22+ - [ Fluxo de Autenticação] ( #fluxo-de-autenticação )
23+ - [ Solução de Problemas] ( #solução-de-problemas )
24+ - [ Tecnologias Utilizadas] ( #tecnologias-utilizadas )
25+ - [ Arquitetura] ( #arquitetura )
26+ - [ Segurança e Autenticação] ( #segurança-e-autenticação )
27+ - [ Banco de Dados] ( #estrutura-do-banco-de-dados )
28+ - [ Implantação] ( #arquitetura-de-implantação )
29+ - [ Funcionalidades] ( #funcionalidades )
30+ - [ API Endpoints] ( #api-endpoints )
31+ - [ Como Executar] ( #como-executar-o-projeto )
32+ - [ Status Atual] ( #status-atual-do-projeto )
33+ - [ Próximos Passos] ( #próximos-passos )
34+ - [ Contribuições] ( #contribuições )
35+ - [ Licença] ( #licença )
36+
37+ ---
38+
39+ ## 🔐 Fluxo de Autenticação
40+
41+ 1 . ** Iniciar Login**
42+ - Usuário clica no botão de login com Google.
43+ - Frontend redireciona para ` /oauth2/authorization/google ` .
44+ - Spring Security processa e redireciona para login do Google.
45+
46+ 2 . ** Autorização Google**
47+ - Usuário autentica no Google.
48+ - Google retorna para ` /login/oauth2/code/google ` com o código.
49+
50+ 3 . ** Processamento**
51+ - Spring Security processa o código, cria sessão e define o cookie ` JSESSIONID ` .
52+ - Usuário é redirecionado para a página inicial.
53+
54+ 4 . ** Verificação**
55+ - Frontend consulta ` /api/auth/status ` .
56+ - Se autenticado, busca dados do usuário em ` /api/auth ` .
57+
58+ ---
4859
4960## 🛠️ Tecnologias Utilizadas
5061
51- - ** Spring Boot 3.5.4** : Framework para aplicações Java
52- - ** Spring Data JPA** : Persistência de dados
53- - ** Spring AI** : Integração com APIs de IA
54- - ** Maritaca AI** : API de IA para receitas e nutrição
55- - ** Spring Security & OAuth2** : Autenticação e autorização (Google)
56- - ** Spring Session JDBC** : Persistência de sessões
57- - ** PostgreSQL 15** : Banco de dados relacional
58- - ** Flyway** : Controle de versão do banco
59- - ** Lombok** : Redução de boilerplate
60- - ** RESTful API** : Comunicação backend
61- - ** Docker** : Containerização
62- - ** Docker Compose** : Orquestração de containers
62+ - ** Spring Boot 3.5.4** : Backend Java
63+ - ** Spring Data JPA** : Persistência
64+ - ** Spring AI** : Integração IA
65+ - ** Maritaca AI** : API de receitas e nutrição
66+ - ** Spring Security & OAuth2** : Autenticação Google
67+ - ** Spring Session JDBC** : Sessões persistentes
68+ - ** PostgreSQL 15** : Banco relacional
69+ - ** Flyway** : Versionamento do banco
70+ - ** Lombok** : Menos boilerplate
71+ - ** RESTful API** : Integração backend
72+ - ** Docker & Docker Compose** : Containers e orquestração
6373- ** Nginx** : Proxy reverso e SSL
64- - ** AWS EC2** : Hospedagem em nuvem
74+ - ** AWS EC2** : Hospedagem
75+
76+ ---
6577
6678## 🏗️ Arquitetura
6779
68- - ** Controller** : Endpoints REST e gerenciamento de requisições
69- - ** Service** : Lógica de negócio e integração com serviços externos
80+ - ** Controller** : Endpoints REST
81+ - ** Service** : Lógica de negócio
7082- ** Repository** : Acesso a dados
7183- ** Model** : Entidades do domínio
72- - ** DTO** : Transferência de dados
73- - ** Mapper ** : Conversão entre entidades e DTOs
74- - ** Config ** : Configurações da aplicação
75- - ** Security ** : Autenticação OAuth2, gerenciamento de sessões
76- - ** Filter ** : Processamento de requisições (correção de caminhos, limitação de taxa, diagnósticos)
84+ - ** DTO & Mapper ** : Transferência e conversão de dados
85+ - ** Config & Security ** : Configurações gerais e autenticação
86+ - ** Filter ** : Processamento de requisições (paths, rate limiting, diagnósticos)
87+
88+ ---
7789
7890## 🔒 Segurança e Autenticação
7991
80- - ** OAuth2 com Google** : Login social sem necessidade de senhas
81- - ** Spring Session JDBC** : Persistência de sessões no banco de dados
82- - ** Cookie Seguro** : Configuração avançada de cookies com secure, SameSite e domínio
83- - ** Rate Limiting** : Proteção contra ataques de força bruta
84- - ** Diagnósticos de Autenticação ** : Monitoramento e depuração do fluxo de autenticação
92+ - ** OAuth2 Google** : Login seguro, sem senha
93+ - ** Spring Session JDBC** : Sessões no banco
94+ - ** Cookie Seguro** : Configuração avançada ( ` secure ` , ` SameSite ` , ` domain ` )
95+ - ** Rate Limiting** : Proteção contra brute force
96+ - ** Diagnóstico ** : Monitoramento do fluxo de autenticação
8597
86- ### Principais Configurações
98+ ### Exemplo de configuração ( ` application.yaml ` )
8799
88100``` yaml
89- # Configuração do Google OAuth2
90101spring :
91102 security :
92103 oauth2 :
@@ -99,8 +110,6 @@ spring:
99110 - openid
100111 - profile
101112 - email
102-
103- # Configuração de Sessões e Cookies
104113 session :
105114 store-type : jdbc
106115 jdbc :
@@ -112,132 +121,153 @@ spring:
112121 domain : ${COOKIE_DOMAIN:.aifoodapp.site}
113122` ` `
114123
124+ ---
125+
115126## 🗃️ Estrutura do Banco de Dados
116127
117- - **tb_food_item**: Alimentos e informações nutricionais
118- - **tb_recipes**: Receitas geradas
119- - **tb_recipe_instructions**: Passos das receitas
120- - **tb_recipes_nutritional_info**: Informações nutricionais das receitas
121- - **tb_recipe_ingredients**: Ingredientes das receitas
122- - **tb_users**: Usuários (OAuth2 e informações de perfil)
123- - **spring_session**: Tabelas de persistência de sessão
128+ - ` tb_food_item`: Alimentos e informações nutricionais
129+ - `tb_recipes` : Receitas geradas
130+ - `tb_recipe_instructions` : Passos das receitas
131+ - `tb_recipes_nutritional_info` : Nutrição das receitas
132+ - `tb_recipe_ingredients` : Ingredientes de receitas
133+ - `tb_users` : Usuários (OAuth2 e perfil)
134+ - `spring_session` : Sessões persistidas
135+
136+ ---
124137
125138# # 🌐 Arquitetura de Implantação
126139
127140- **Frontend**: Site estático servido pelo Nginx
128- - **Backend**: Aplicação Spring Boot em container Docker
141+ - **Backend**: Spring Boot em container Docker
129142- **Banco de Dados**: PostgreSQL em container Docker
130- - **Nginx**: Proxy reverso, SSL e roteamento de API
143+ - **Nginx**: Proxy reverso, SSL e API gateway
131144- **Docker Compose**: Orquestração de todos os serviços
132145- **AWS EC2**: Infraestrutura de hospedagem
133146
147+ ---
148+
134149# # 🚀 Funcionalidades
135150
136151# ## Autenticação Social
137152- Login com Google OAuth2
138- - Persistência de sessões por 30 dias
139- - Fluxo de autenticação seguro com redirecionamentos
153+ - Sessões persistentes ( 30 dias)
154+ - Redirecionamentos seguros
140155
141156# ## Gerenciamento de Alimentos
142- - CRUD completo de alimentos
143- - Categorização e informações nutricionais
157+ - CRUD completo
158+ - Categorização e nutrição
144159
145- ### Geração de Receitas com IA
146- - Criação automática de receitas baseadas nos alimentos disponíveis
147- - Instruções detalhadas passo a passo
148- - Informações nutricionais estimadas
160+ # ## Geração de Receitas IA
161+ - Receitas automáticas baseadas nos alimentos do usuário
162+ - Instruções detalhadas
163+ - Nutrição estimada
149164
150165# ## Análise Nutricional
151- - Análise do perfil nutricional das receitas
166+ - Perfil nutricional das receitas
152167- Recomendações baseadas em necessidades dietéticas
153168
169+ ---
170+
154171# # 🔌 API Endpoints
155172
156173# ## Autenticação e Usuário
157- - ` GET /oauth2/authorization/google`: Inicia o processo de login com Google OAuth2
158- - `GET /login/oauth2/code/google` : Callback após autenticação com Google
159- - `GET /api/auth/status` : Verifica status de autenticação
160- - `GET /api/auth` : Retorna informações do usuário autenticado
161- - `POST /api/auth/logout` : Encerra a sessão do usuário
162-
163- # ## Alimentos (Food Items)
164- - `POST /api/foods/create` : Cria alimento
165- - `GET /api/foods/list` : Lista alimentos
166- - `GET /api/foods/list/{id}` : Busca alimento por ID
167- - `PUT /api/foods/update` : Atualiza alimento
168- - `DELETE /api/foods/delete/{id}` : Remove alimento
169-
170- # ## Receitas (Recipes)
171- - `GET /api/recipes/gen` : Gera receita com IA
172- - `GET /api/recipes/analyze/{id}` : Analisa nutrição da receita
173- - `GET /api/recipes/user` : Lista receitas do usuário
174+ - ` GET /oauth2/authorization/google` — Inicia login Google OAuth2
175+ - ` GET /login/oauth2/code/google` — Callback de autenticação
176+ - ` GET /api/auth/status` — Status de autenticação
177+ - ` GET /api/auth` — Dados do usuário autenticado
178+ - ` POST /api/auth/logout` — Logout
179+
180+ # ## Alimentos
181+ - ` POST /api/foods/create` — Criar alimento
182+ - ` GET /api/foods/list` — Listar alimentos
183+ - ` GET /api/foods/list/{id}` — Buscar alimento por ID
184+ - ` PUT /api/foods/update` — Atualizar alimento
185+ - ` DELETE /api/foods/delete/{id}` — Remover alimento
186+
187+ # ## Receitas
188+ - ` GET /api/recipes/gen` — Gerar receita com IA
189+ - ` GET /api/recipes/analyze/{id}` — Analisar nutrição da receita
190+ - ` GET /api/recipes/user` — Listar receitas do usuário
191+
192+ ---
174193
175194# # 💻 Como Executar o Projeto
176195
177196# ## Execução Local
178197
179- 1. Clone o repositório
198+ 1. Clone o repositório :
180199 ` ` ` bash
181200 git clone https://github.com/OtavioXimarelli/AiFoodApp.git
182201 cd AiFoodApp
183202 ` ` `
184203
185- 2. Crie um arquivo `.env` na raiz do projeto com as variáveis necessárias
204+ 2. Crie um arquivo `.env` na raiz com as variáveis necessárias.
186205
187- 3. Execute com Docker Compose
206+ 3. Execute com Docker Compose :
188207 ` ` ` bash
189208 docker-compose up -d
190209 ` ` `
191210
192211# ## Implantação em Produção (AWS EC2)
193212
194- 1. Configure suas credenciais AWS e acesso SSH
213+ 1. Configure as credenciais AWS e acesso SSH à sua instância EC2.
195214
196- 2. Execute o script de implantação
197- ` ` ` bash
198- ./deploy.sh --auto
199- ` ` `
215+ 2. Faça o upload dos arquivos do projeto e das variáveis de ambiente para a instância.
200216
201- 3. Para atualizar apenas a configuração do Nginx
217+ 3. Execute os containers Docker na EC2 normalmente :
202218 ` ` ` bash
203- ./update_nginx.sh
219+ docker-compose up -d
204220 ` ` `
205221
222+ ---
223+
206224# # 🧪 Status Atual do Projeto
207225
208- - ✅ Estrutura completa da aplicação
209- - ✅ Autenticação OAuth2 com Google
210- - ✅ Persistência de sessões
226+ - ✅ Estrutura completa
227+ - ✅ Autenticação Google OAuth2
228+ - ✅ Sessões persistentes
211229- ✅ Gerenciamento de alimentos (CRUD)
212- - ✅ Integração com Maritaca AI
213- - ✅ Geração de receitas com IA
230+ - ✅ Integração Maritaca AI
231+ - ✅ Geração de receitas IA
214232- ✅ Análise nutricional
215- - ✅ Implantação automatizada em AWS EC2
216- - ✅ Configuração HTTPS com Nginx
233+ - ✅ Deploy automatizado AWS EC2
234+ - ✅ HTTPS via Nginx
235+
236+ ---
217237
218238# # 📋 Próximos Passos
219239
220- - 🔲 Melhorias na interface do usuário
221- - 🔲 Recomendações personalizadas por perfil
222- - 🔲 Sistema de favoritos/histórico
223- - 🔲 Integração com múltiplos provedores de IA
224- - 🔲 CI/CD e monitoramento aprimorado
240+ - [ ] Melhorias na interface do usuário
241+ - [ ] Recomendações personalizadas por perfil
242+ - [ ] Sistema de favoritos/histórico
243+ - [ ] Integração com múltiplos provedores de IA
244+ - [ ] CI/CD e monitoramento aprimorados
245+
246+ ---
225247
226- # # � Solução de Problemas
248+ # # 🛠️ Solução de Problemas
227249
228- # ## Problemas Comuns de Autenticação
229- - **Cookies Não Persistentes**: Verifique as configurações de SameSite e Domínio nos cookies
230- - **401 Unauthorized**: Verifique os logs para problemas de sessão ou token
231- - **Redirecionamentos Infinitos**: Problemas na configuração do proxy Nginx
250+ # ## Autenticação
251+
252+ - **404 em `/oauth2/authorization/google`**: Verifique configuração do Nginx.
253+ - **Cookies não persistentes**: Veja `SameSite` e domínio dos cookies.
254+ - **401 Unauthorized**: Verifique logs para sessão/token.
255+ - **Redirecionamentos Infinitos**: Revise configuração do proxy Nginx.
232256
233257# ## Comandos Úteis
234- - Verificar logs do backend : ` docker logs aifoodapp`
235- - Testar configuração Nginx : ` sudo nginx -t`
258+
259+ - Ver logs do backend : ` docker logs aifoodapp`
260+ - Testar configuração do Nginx : ` sudo nginx -t`
261+ - Aplicar nova config Nginx : ` ./update_nginx.sh`
236262- Reiniciar serviços : ` docker-compose restart`
237263
264+ ---
265+
238266# # 👥 Contribuições
239267
240- Contribuições são bem-vindas! Abra issues e pull requests para melhorar o projeto.
268+ Contribuições são bem-vindas! Abra issues e pull requests para melhorias.
269+
270+ ---
241271
242272# # 📄 Licença
243273
0 commit comments