diff --git a/Server/banchango/src/main/java/com/sundaegukbap/banchango/config/SwaggerConfig.java b/Server/banchango/src/main/java/com/sundaegukbap/banchango/config/SwaggerConfig.java index 48c4f00..d37969c 100644 --- a/Server/banchango/src/main/java/com/sundaegukbap/banchango/config/SwaggerConfig.java +++ b/Server/banchango/src/main/java/com/sundaegukbap/banchango/config/SwaggerConfig.java @@ -25,5 +25,4 @@ public OpenAPI openAPI() { .info(info) .servers(List.of(server)); } - } diff --git a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/application/RecipeService.java b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/application/RecipeService.java index a976ec7..c50a8fa 100644 --- a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/application/RecipeService.java +++ b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/application/RecipeService.java @@ -19,8 +19,10 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -34,28 +36,26 @@ public class RecipeService { private final AiRecipeRecommendClient aiRecipeRecommendClient; @EventListener + @Transactional public void refreshRecommendedRecipes(IngredientChangedEvent event) { refreshRecommendedRecipes(event.userId(), RecipeCategory.전체); } + @Transactional public void changeRecipeCategory(Long userId, RecipeCategory recipeCategory) { refreshRecommendedRecipes(userId, recipeCategory); } @Transactional public void refreshRecommendedRecipes(Long userId, RecipeCategory recipeCategory) { - List containers = containerRepository.findAllByUserId(userId); - List containerIngredients = containerIngredientRepository.findByContainerIn(containers); - List ingredients = containerIngredients.stream() - .map(ContainerIngredient::getIngredient) - .collect(Collectors.toList()); + List ingredients = getIngredientsWithUser(userId); recommendedRecipeRepository.deleteAllByUserId(userId); User user = userRepository.findById(userId) .orElseThrow(() -> new NoSuchElementException("no user")); - List recommendedRecipeIds = aiRecipeRecommendClient.getRecommendedRecipesFromAI(recipeCategory, ingredients); - List recipes = recipeRepository.findAllById(recommendedRecipeIds); + List recipes = recommendedRecipesFromAI(recipeCategory, ingredients); + List recommendedRecipes = recipes.stream() .map(recipe -> UserRecommendedRecipe.builder() .user(user) @@ -64,4 +64,24 @@ public void refreshRecommendedRecipes(Long userId, RecipeCategory recipeCategory .collect(Collectors.toList()); recommendedRecipeRepository.saveAll(recommendedRecipes); } + + private List getIngredientsWithUser(Long userId) { + List containers = containerRepository.findAllByUserId(userId); + List containerIngredients = containerIngredientRepository.findByContainerIn(containers); + List ingredients = containerIngredients.stream() + .map(ContainerIngredient::getIngredient) + .collect(Collectors.toList()); + return ingredients; + } + + private List recommendedRecipesFromAI(RecipeCategory recipeCategory, List ingredients) { + List recommendedRecipeIds = aiRecipeRecommendClient.getRecommendedRecipesFromAI(recipeCategory, ingredients); + List recipes = new ArrayList<>(); + recommendedRecipeIds.forEach(recommendedRecipeId -> { + Optional recipe = recipeRepository.findById(recommendedRecipeId); + + if (recipe.isPresent()) recipes.add(recipe.get()); + }); + return recipes; + } } diff --git a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/domain/Recipe.java b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/domain/Recipe.java index 93ccc56..a3f9a57 100644 --- a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/domain/Recipe.java +++ b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/domain/Recipe.java @@ -37,6 +37,7 @@ public class Recipe { private RecipeDifficulty recipeDifficulty; private String bySort; private String byIngredient; + @Enumerated(EnumType.STRING) private RecipeCategory recipeCategory; @Builder diff --git a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/presentation/RecipeController.java b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/presentation/RecipeController.java index 914d90e..c5d53ec 100644 --- a/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/presentation/RecipeController.java +++ b/Server/banchango/src/main/java/com/sundaegukbap/banchango/recipe/presentation/RecipeController.java @@ -44,7 +44,7 @@ public ResponseEntity getRecipeDetail(@PathVariable(" @PostMapping("/{userId}") @Operation(summary = "추천 레시피 카테고리 변경", description = "추천 레시피 카테고리를 변경하고 새로운 추천 레시피를 받아옵니다.") public ResponseEntity changeRecipeCategory(@PathVariable("userId") Long userId, - @RequestParam(defaultValue = "전체") RecipeCategory recipeCategory) { + @RequestParam(defaultValue = "전체") RecipeCategory recipeCategory) { recipeService.changeRecipeCategory(userId, recipeCategory); return new ResponseEntity<>("카테고리에 맞게 추천 레시피목록이 변경되었습니다.", HttpStatus.OK); } diff --git a/Server/banchango/src/main/resources/application.properties b/Server/banchango/src/main/resources/application.properties index 37e29c0..51dd2ca 100644 --- a/Server/banchango/src/main/resources/application.properties +++ b/Server/banchango/src/main/resources/application.properties @@ -1,8 +1,8 @@ spring.application.name=banchango -spring.profiles.active=local +spring.profiles.active=prod -app.cors.allowedOrigins=http://34.222.135.30:8000,http://localhost:3000,http://localhost:8080 -app.oauth2.authorizedRedirectUris=http://34.222.135.30:8000,http://localhost:3000/oauth2/redirect,myandroidapp://oauth2/redirect,myiosapp://oauth2/redirect +app.cors.allowedOrigins=https://backendu.com,http://34.222.135.30:8000,http://localhost:3000,http://localhost:8080 +app.oauth2.authorizedRedirectUris=https://backendu.com,http://34.222.135.30:8000,http://localhost:3000/oauth2/redirect,myandroidapp://oauth2/redirect,myiosapp://oauth2/redirect api.aiBaseUrl=http://34.222.135.30:8000