feat(recipe/controller): implementado controlador SearchAIRecipesController para…

feat(recipe/controller): implementado controlador SearchAIRecipesController para la búsqueda de recetas mediante IA
parent a5531697
package com.example.apprecetas.recipe.infrastructure.controller;
import com.example.apprecetas.recipe.application.SearchAIRecipesUseCase;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeSummaryOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/recipe")
@RequiredArgsConstructor
public class SearchAIRecipesController {
private final SearchAIRecipesUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@PostMapping("/search")
public ResponseEntity<?> searchRecipes(@RequestParam String ingredients) {
SearchAIRecipesUseCase.SearchResult searchResult = service.searchRecipes(ingredients);
List<RecipeSummaryOutputDto> outputDtoList = searchResult.recipes()
.stream().map(mapper::mapSummary).toList();
if (outputDtoList.isEmpty())
return ResponseEntity.noContent().build();
Map<String, Object> responseBody = Map.of(
"sessionId", searchResult.sessionId(),
"recipes", outputDtoList
);
return ResponseEntity.ok(responseBody);
}
@PostMapping("/search/more")
public ResponseEntity<List<RecipeSummaryOutputDto>> searchMoreRecipes(@RequestHeader("X-Session-ID") String sessionId) {
List<RecipeSummaryOutputDto> outputDtoList = service.searchMoreRecipes(sessionId)
.stream().map(mapper::mapSummary).toList();
if (outputDtoList.isEmpty())
return ResponseEntity.noContent().build();
return ResponseEntity.ok(outputDtoList);
}
@PostMapping("/detail/{index}")
public ResponseEntity<RecipeOutputDto> getRecipeDetail(@RequestHeader("X-Session-ID") String sessionId,
@PathVariable int index) {
RecipeOutputDto recipeDto = mapper.map(service.getRecipeDetail(sessionId, index));
return ResponseEntity.ok(recipeDto);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment