Skip to content

Feature: Implementar Recomendações Personalizadas de Receitas com IA #6

@OtavioXimarelli

Description

@OtavioXimarelli

🍽️ 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/recommendations em um controller apropriado (ex: RecommendationController ou AiController).
  • 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 Recipe ou RecipeDto.

4. Testes

  • Testes de Unidade: Testar o ChatService com prompts mockados.
  • Testes de Integração: Testar o endpoint /api/ai/recommendations de 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 status 200 OK com 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.

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions