diff --git a/refrigerator/.gitignore b/refrigerator/.gitignore index 2b88fe8..68fd73d 100644 --- a/refrigerator/.gitignore +++ b/refrigerator/.gitignore @@ -713,3 +713,6 @@ FodyWeavers.xsd # End of https://www.toptal.com/developers/gitignore/api/macos,windows,git,java,intellij,visualstudio,eclipse,gradle,netbeans /src/main/resources/application.yml + +.idea/ +*.iml diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java b/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java index bd4533b..d332f82 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java @@ -8,6 +8,7 @@ import moja.refrigerator.dto.recipe.response.RecipeResponse; import moja.refrigerator.service.recipe.RecipeService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -58,4 +59,14 @@ public void updateRecipe( public List getRecommendedRecipes(@RequestParam Long userPk) { return recipeService.getRecommendedRecipes(userPk); } + + @GetMapping("/random") + public ResponseEntity getRandomRecipe() { + try { + RecipeRecommendResponse randomRecipe = recipeService.getRandomRecipe(); + return ResponseEntity.ok(randomRecipe); + } catch (IllegalStateException e) { + return ResponseEntity.notFound().build(); + } + } } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeIngredientInfo.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeIngredientInfo.java new file mode 100644 index 0000000..fecc03b --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeIngredientInfo.java @@ -0,0 +1,9 @@ +package moja.refrigerator.dto.recipe.response; + +import lombok.Data; + +@Data +public class RecipeIngredientInfo { + private String ingredientName; + private boolean isNecessary; +} \ No newline at end of file diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeRecommendResponse.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeRecommendResponse.java index dbb6019..efdb622 100644 --- a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeRecommendResponse.java +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeRecommendResponse.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + @Data public class RecipeRecommendResponse { private long recipePk; @@ -11,4 +13,5 @@ public class RecipeRecommendResponse { private double matchRate; private long remainExpirationDays; private String urgentIngredientName; + private List ingredients; } \ No newline at end of file diff --git a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java index 7c89c15..cb89a94 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java @@ -24,4 +24,5 @@ void updateRecipe( ,List files ); List getRecommendedRecipes(Long userPk); + RecipeRecommendResponse getRandomRecipe(); } diff --git a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java index 9f53d69..e54afe6 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java @@ -10,6 +10,7 @@ import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; import moja.refrigerator.dto.recipe.request.RecipeUpdateRequest; import moja.refrigerator.dto.recipe.response.RecipeDetailResponse; +import moja.refrigerator.dto.recipe.response.RecipeIngredientInfo; import moja.refrigerator.dto.recipe.response.RecipeRecommendResponse; import moja.refrigerator.dto.recipe.response.RecipeResponse; import moja.refrigerator.repository.ingredient.IngredientMyRefrigeratorRepository; @@ -316,4 +317,35 @@ private RecipeMatchResult checkRecipeMatch(Recipe recipe, List allRecipes = recipeRepository.findAll(); + + if (allRecipes.isEmpty()) { + throw new IllegalStateException("등록된 레시피가 없습니다."); + } + + Random random = new Random(); + int randomIndex = random.nextInt(allRecipes.size()); + Recipe selectedRecipe = allRecipes.get(randomIndex); + + // Response 객체로 변환 + RecipeRecommendResponse response = mapper.map(selectedRecipe, RecipeRecommendResponse.class); + + // 재료 정보 추가 + List recipeIngredients = recipeIngredientRepository.findByRecipe(selectedRecipe); + List ingredientInfoList = recipeIngredients.stream() + .map(ri -> { + RecipeIngredientInfo info = new RecipeIngredientInfo(); + info.setIngredientName(ri.getIngredientManagement().getIngredientName()); + info.setNecessary(ri.isIngredientIsNecessary()); + return info; + }) + .collect(Collectors.toList()); + + response.setIngredients(ingredientInfoList); + + return response; + } + } \ No newline at end of file