From 1d47d90460f9672be71ca44dace68c69bd8f7088 Mon Sep 17 00:00:00 2001 From: vanderleik Date: Thu, 18 Apr 2024 16:09:38 -0300 Subject: [PATCH] feat: VIN-422 - criando PairingService --- .../application/services/PairingService.java | 12 +++++ .../services/impl/PairingServiceImpl.java | 50 +++++++++++++++++++ .../controllers/PairingController.java | 31 ++++++++---- 3 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/PairingService.java create mode 100644 harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/impl/PairingServiceImpl.java diff --git a/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/PairingService.java b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/PairingService.java new file mode 100644 index 00000000..5afe123f --- /dev/null +++ b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/PairingService.java @@ -0,0 +1,12 @@ +package com.vinhonotas.harmonizacao.application.services; + +import com.vinhonotas.harmonizacao.interfaces.dtos.inputs.WineInputDTO; +import com.vinhonotas.harmonizacao.interfaces.dtos.outputs.PairingResponseDTO; + +public interface PairingService { + + PairingResponseDTO getWineInformation(WineInputDTO wine); + PairingResponseDTO getWinePairing(WineInputDTO wine); + PairingResponseDTO getMenuPairing(WineInputDTO wine); + +} diff --git a/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/impl/PairingServiceImpl.java b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/impl/PairingServiceImpl.java new file mode 100644 index 00000000..10fdc48b --- /dev/null +++ b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/application/services/impl/PairingServiceImpl.java @@ -0,0 +1,50 @@ +package com.vinhonotas.harmonizacao.application.services.impl; + +import com.vinhonotas.harmonizacao.application.services.PairingService; +import com.vinhonotas.harmonizacao.interfaces.dtos.inputs.WineInputDTO; +import com.vinhonotas.harmonizacao.interfaces.dtos.outputs.PairingResponseDTO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.chat.prompt.PromptTemplate; +import org.springframework.ai.openai.OpenAiChatClient; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Slf4j +public class PairingServiceImpl implements PairingService { + + private final OpenAiChatClient openAiChatClient; + + @Override + public PairingResponseDTO getWineInformation(WineInputDTO wine) { + PromptTemplate promptTemplate = new PromptTemplate("Quais as características do vinho {wine}?"); + log.info("getWineInformation :: Buscando informações sobre o vinho: {}", wine); + promptTemplate.add("wine", wine); + String result = openAiChatClient.call(promptTemplate.create()).getResult().getOutput().getContent(); + log.info("getWineInformation :: Informações encontradas: {}", result); + return new PairingResponseDTO(result); + } + + @Override + public PairingResponseDTO getWinePairing(WineInputDTO wine) { + PromptTemplate promptTemplate = new PromptTemplate("Quais os pratos que combinam com o vinho {wine}?"); + log.info("getWinePairing :: Buscando harmonizações para o vinho: {}", wine); + promptTemplate.add("wine", wine); + + String result = openAiChatClient.call(promptTemplate.create()).getResult().getOutput().getContent(); + log.info("getWinePairing :: Harmonizações encontradas: {}", result); + return new PairingResponseDTO(result); + } + + @Override + public PairingResponseDTO getMenuPairing(WineInputDTO wine) { + PromptTemplate promptTemplate = new PromptTemplate("Crie um menu com entrada, prato principal e sobremesa que harmonize com o vinho {wine}?"); + log.info("getMenuPairing :: Buscando menu harmonizado para o vinho: {}", wine); + promptTemplate.add("wine", wine); + String result = openAiChatClient.call(promptTemplate.create()).getResult().getOutput().getContent(); + log.info("getMenuPairing :: Menu harmonizado: {}", result); + return new PairingResponseDTO(result); + } + +} diff --git a/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/interfaces/controllers/PairingController.java b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/interfaces/controllers/PairingController.java index 49b7c696..edd5903f 100644 --- a/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/interfaces/controllers/PairingController.java +++ b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/interfaces/controllers/PairingController.java @@ -1,9 +1,11 @@ package com.vinhonotas.harmonizacao.interfaces.controllers; +import com.vinhonotas.harmonizacao.application.services.PairingService; +import com.vinhonotas.harmonizacao.interfaces.dtos.inputs.WineInputDTO; +import com.vinhonotas.harmonizacao.interfaces.dtos.outputs.PairingResponseDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.ai.chat.prompt.PromptTemplate; -import org.springframework.ai.openai.OpenAiChatClient; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -15,15 +17,24 @@ @Slf4j public class PairingController { - private final OpenAiChatClient openAiChatClient; + private final PairingService pairingService; @GetMapping("/information") - public String getWineInformation(@RequestParam(value = "wine") String wine) { - PromptTemplate promptTemplate = new PromptTemplate("Quais as características do vinho {wine}?"); - log.info("getWineInformation :: Buscando informações sobre o vinho: {}", wine); - promptTemplate.add("wine", wine); - String result = openAiChatClient.call(promptTemplate.create()).getResult().getOutput().getContent(); - log.info("getWineInformation :: Informações encontradas: {}", result); - return result; + public ResponseEntity getWineInformation(@RequestParam(value = "wine") WineInputDTO wine) { + PairingResponseDTO wineInformation = pairingService.getWineInformation(wine); + return ResponseEntity.ok(wineInformation); } + + @GetMapping("/pairings") + public ResponseEntity getWinePairing(@RequestParam(value = "wine") WineInputDTO wine) { + PairingResponseDTO winePairing = pairingService.getWinePairing(wine); + return ResponseEntity.ok(winePairing); + } + + @GetMapping("/menu") + public PairingResponseDTO getMenuPairing(@RequestParam(value = "wine") WineInputDTO wine) { + PairingResponseDTO menuPairing = pairingService.getMenuPairing(wine); + return menuPairing; + } + }