-
Notifications
You must be signed in to change notification settings - Fork 0
Description
🍽️ Implementar Endpoint de Recomendações Personalizadas com IA
📋 Contexto
Para além de gerar receitas com os ingredientes que o usuário já possui, um recurso central do AiFoodApp é a capacidade de sugerir refeições de forma proativa, com base nas metas e preferências de cada usuário. Esta funcionalidade representa um passo fundamental para tornar o aplicativo um verdadeiro assistente de culinária pessoal.
O objetivo desta issue é criar um endpoint robusto que utilize o serviço de IA (ChatService) para gerar recomendações personalizadas, levando em consideração tanto os alimentos disponíveis quanto as preferências explícitas do usuário.
🎯 Descrição da Tarefa
Deve ser implementado um endpoint POST /api/ai/recommendations que recebe as preferências do usuário e, combinado com os FoodItems cadastrados no sistema, gera uma lista de receitas sugeridas. Essas sugestões devem ser estruturadas e prontas para serem consumidas por um cliente frontend.
✅ Requisitos e Tarefas a Serem Executadas
1. Definição do Contrato da API (DTOs)
- Criar RecommendationRequestDTO: Este DTO irá encapsular as preferências do usuário.
// Exemplo da estrutura do DTO de requisição
public class RecommendationRequestDTO {
private List<String> dietaryRestrictions; // Ex: "VEGAN", "GLUTEN_FREE", "LACTOSE_INTOLERANT"
private List<String> healthGoals; // Ex: "WEIGHT_LOSS", "MUSCLE_GAIN", "LOW_CARB"
private String mealType; // Ex: "BREAKFAST", "LUNCH", "DINNER", "SNACK"
private int numberOfSuggestions; // Quantidade de receitas a serem geradas
}- Utilizar RecipeDto para a Resposta: A resposta do endpoint deve ser uma lista de
RecipeDto(List<RecipeDto>), aproveitando a estrutura já existente para manter a consistência da API.
2. Implementação do Controller
- Criar o Endpoint: Implementar o
POST /api/ai/recommendationsem um controller apropriado (ex:RecommendationControllerouAiController). - Validação: Adicionar validações (
@Valid) para o corpo da requisição para garantir que as preferências sejam enviadas corretamente.
3. Aprimoramento do ChatService
- Criar Novo Método de Serviço: Implementar
generateRecommendations(RecommendationRequestDTO request)no ChatService. - Lógica de Construção do Prompt:
- O método deve primeiro buscar todos os FoodItems disponíveis no banco de dados usando o FoodItemService.
- Construir um prompt detalhado para a IA, que inclua:
- O contexto: "Você é um assistente de culinária e nutricionista."
- Os ingredientes disponíveis (lista de FoodItems).
- As preferências e restrições do usuário (do RecommendationRequestDTO).
- O tipo de refeição desejado.
- Instruções claras sobre o formato da saída: Solicitar à IA que retorne a resposta em um formato JSON estruturado. Isso é crucial para evitar a análise manual de texto plano e tornar a aplicação mais robusta.
- Mapeamento da Resposta: Implementar a lógica para desserializar a resposta JSON da IA diretamente para uma lista de
RecipeouRecipeDto.
4. Testes
- Testes de Unidade: Testar o ChatService com prompts mockados.
- Testes de Integração: Testar o endpoint
/api/ai/recommendationsde ponta a ponta, validando a requisição, a resposta e a interação com a IA.
✔️ Critérios de Aceitação
- O endpoint deve estar protegido e exigir autenticação de usuário.
- Ao enviar uma requisição válida para
POST /api/ai/recommendations, a API deve retornar um status200 OKcom uma lista de receitas no corpo da resposta. - As receitas retornadas devem ser coerentes com os ingredientes disponíveis e as preferências enviadas.
- Se a requisição for malformada (ex: healthGoals inválido ou ausente), a API deve retornar um erro
400 Bad Request. - A interação com a IA deve ser encapsulada no ChatService, e o controller não deve ter conhecimento sobre a construção de prompts.
🏷️ Labels
enhancement backend ai api spring-boot
📝 Notas Adicionais
Este endpoint será fundamental para a experiência do usuário, transformando o AiFoodApp de um simples gerador de receitas em um assistente pessoal de culinária inteligente e proativo.