diff --git a/harmonizacao/README.md b/harmonizacao/README.md new file mode 100644 index 00000000..e2872628 --- /dev/null +++ b/harmonizacao/README.md @@ -0,0 +1,36 @@ +# Harmonização de Vinhos + +Este é um projeto Java Spring Boot que fornece uma API REST para harmonização de vinhos. A API permite que os usuários obtenham informações sobre vinhos, obtenham sugestões de harmonização de vinhos e obtenham sugestões de harmonização de vinhos com o menu. +Para executar esse serviço é utilizado o Spring AI, que é uma biblioteca Java para interagir com a API OpenAI. + +## Tecnologias Utilizadas + +- Java +- Spring Boot +- Spring AI +- Maven + +## Configuração + +Para configurar o projeto, você precisa ter o Java e o Maven instalados. Em seguida, você pode clonar o repositório e executar `mvn install` para instalar as dependências necessárias. + +## Uso + +Você pode iniciar o aplicativo executando `mvn spring-boot:run`. O serviço estará disponível em `http://localhost:8085/swagger-ui/index.html`. + +## Endpoints + +### Pairing: Operações relacionadas a harmonização de vinhos + +GET +- `/api/v1/pairing/pairings`: Retorna a harmonização do vinho + +GET +- `/api/v1/pairing/menu`: Retorna a harmonização do vinho com o menu + +GET +- `/api/v1/pairing/information`: Retorna informações sobre o vinho + +## Licença + +Este projeto está licenciado sob a Licença MIT - veja o arquivo `LICENSE.md` para detalhes \ No newline at end of file diff --git a/harmonizacao/pom.xml b/harmonizacao/pom.xml index 9ef5624d..8618674d 100644 --- a/harmonizacao/pom.xml +++ b/harmonizacao/pom.xml @@ -43,6 +43,16 @@ spring-boot-starter-test test + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.2.0 + + + io.springfox + springfox-boot-starter + 3.0.0 + diff --git a/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/configuration/SwaggerConfiguration.java b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/configuration/SwaggerConfiguration.java new file mode 100644 index 00000000..fd8e5c49 --- /dev/null +++ b/harmonizacao/src/main/java/com/vinhonotas/harmonizacao/configuration/SwaggerConfiguration.java @@ -0,0 +1,34 @@ +package com.vinhonotas.harmonizacao.configuration; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfiguration { + + @Bean + public OpenAPI openApiInformation() { + Server localServer = new Server() + .url("http://localhost:8085") + .description("Localhost Server URL"); + Contact contact = new Contact() + .email("vanderlei.master@gmail.com") + .name("Vanderlei Kleinschmidt"); + Info info = new Info() + .contact(contact) + .description("Api de harmonização de vinhos") + .title("Harmonização de Vinhos") + .version("V0.0.1") + .license(new License() + .name("Apache 2.0") + .url("http://springdoc.org")); + return new OpenAPI() + .info(info) + .addServersItem(localServer); + } +} 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 5efbaa38..7361d32a 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 @@ -3,6 +3,8 @@ import com.vinhonotas.harmonizacao.application.services.PairingService; import com.vinhonotas.harmonizacao.interfaces.dtos.inputs.WineInputDTO; import com.vinhonotas.harmonizacao.interfaces.dtos.outputs.PairingResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; @@ -15,22 +17,26 @@ @RequestMapping("/api/v1/pairing") @RequiredArgsConstructor @Slf4j +@Tag(name = "Pairing", description = "Operações relacionadas a harmonização de vinhos") public class PairingController { private final PairingService pairingService; + @Operation(summary = "Retorna informações sobre o vinho") @GetMapping("/information") public ResponseEntity getWineInformation(@RequestParam(value = "wine") WineInputDTO wine) { PairingResponseDTO wineInformation = pairingService.getWineInformation(wine); return ResponseEntity.ok(wineInformation); } + @Operation(summary = "Retorna a harmonização do vinho") @GetMapping("/pairings") public ResponseEntity getWinePairing(@RequestParam(value = "wine") WineInputDTO wine) { PairingResponseDTO winePairing = pairingService.getWinePairing(wine); return ResponseEntity.ok(winePairing); } + @Operation(summary = "Retorna a harmonização do vinho com o menu") @GetMapping("/menu") public ResponseEntity getMenuPairing(@RequestParam(value = "wine") WineInputDTO wine) { PairingResponseDTO menuPairing = pairingService.getMenuPairing(wine); diff --git a/harmonizacao/src/main/resources/application.properties b/harmonizacao/src/main/resources/application.properties index 14f1dda2..cd190d3a 100644 --- a/harmonizacao/src/main/resources/application.properties +++ b/harmonizacao/src/main/resources/application.properties @@ -2,4 +2,5 @@ spring.config.import=optional:file:.env[.properties] spring.application.name=harmonizacao spring.ai.openai.api-key=${OPENAI_API_KEY} spring.ai.openai.chat.options.model=gpt-3.5-turbo -server.port=8085 \ No newline at end of file +server.port=8085 +springdoc.api-docs.path=/api-docs \ No newline at end of file