Skip to content

Commit 0509e0a

Browse files
Refactor README for clarity and structure
1 parent 6e8b1a7 commit 0509e0a

File tree

1 file changed

+158
-128
lines changed

1 file changed

+158
-128
lines changed

README.MD

Lines changed: 158 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,103 @@
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
90101
spring:
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

Comments
 (0)