From eb5aedbe9143940d95942c39c37c7cf586c794f6 Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Fri, 19 Dec 2025 13:12:18 +0100 Subject: [PATCH 1/4] added backend server search functionality with unit tests # Conflicts: # server/src/test/java/server/api/RecipeControllerTest.java --- .../java/server/api/RecipeController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/src/main/java/server/api/RecipeController.java b/server/src/main/java/server/api/RecipeController.java index 37a2a78..52fc593 100644 --- a/server/src/main/java/server/api/RecipeController.java +++ b/server/src/main/java/server/api/RecipeController.java @@ -120,4 +120,27 @@ public class RecipeController { messagingTemplate.convertAndSend(Topics.RECIPES, new DeleteRecipeMessage(id)); // Send to WS. return ResponseEntity.ok(true); } + + public ResponseEntity> getRecipes( + @RequestParam(required = false) String search, + @RequestParam(required = false) Integer limit){ + + List recipes = recipeRepository.findAll(); + + if(search != null && !search.trim().isEmpty()){ + String lowercaseSearch = search.toLowerCase(); + recipes = recipes.stream().filter(recipe -> recipe.getName() + .toLowerCase() + .contains(lowercaseSearch)) + .toList(); + } + if(limit != null && limit Date: Fri, 19 Dec 2025 13:25:03 +0100 Subject: [PATCH 2/4] added comments --- server/src/main/java/server/api/RecipeController.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/server/api/RecipeController.java b/server/src/main/java/server/api/RecipeController.java index 52fc593..f28d705 100644 --- a/server/src/main/java/server/api/RecipeController.java +++ b/server/src/main/java/server/api/RecipeController.java @@ -121,20 +121,27 @@ public class RecipeController { return ResponseEntity.ok(true); } + /** + * Performs a search based on a case-insensitive parital match on + * Recipe name and limits the result to a set amount of results. + * @param search - name of the recipe to be searched for. + * @param limit - limit of the results queried for. + * @return - returns a ResponseEntity with a List of Recipes and an HTTP 200 ok status. + */ public ResponseEntity> getRecipes( @RequestParam(required = false) String search, @RequestParam(required = false) Integer limit){ List recipes = recipeRepository.findAll(); - if(search != null && !search.trim().isEmpty()){ + if(search != null && !search.trim().isEmpty()){ // if search isn't null or empty perform the filtering process String lowercaseSearch = search.toLowerCase(); recipes = recipes.stream().filter(recipe -> recipe.getName() .toLowerCase() .contains(lowercaseSearch)) .toList(); } - if(limit != null && limit Date: Thu, 8 Jan 2026 22:38:52 +0100 Subject: [PATCH 3/4] Implemented Optional fields and rewrote tests --- .../java/server/api/RecipeController.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/server/api/RecipeController.java b/server/src/main/java/server/api/RecipeController.java index f28d705..f861f34 100644 --- a/server/src/main/java/server/api/RecipeController.java +++ b/server/src/main/java/server/api/RecipeController.java @@ -126,24 +126,32 @@ public class RecipeController { * Recipe name and limits the result to a set amount of results. * @param search - name of the recipe to be searched for. * @param limit - limit of the results queried for. + * @param lang - stores the info of the language of the user to provide server support/ * @return - returns a ResponseEntity with a List of Recipes and an HTTP 200 ok status. */ public ResponseEntity> getRecipes( - @RequestParam(required = false) String search, - @RequestParam(required = false) Integer limit){ + @RequestParam Optional search, + @RequestParam Optional limit, + @RequestParam Optional lang){ List recipes = recipeRepository.findAll(); - if(search != null && !search.trim().isEmpty()){ // if search isn't null or empty perform the filtering process - String lowercaseSearch = search.toLowerCase(); - recipes = recipes.stream().filter(recipe -> recipe.getName() - .toLowerCase() - .contains(lowercaseSearch)) - .toList(); - } - if(limit != null && limit finalRecipes = recipes; + recipes = search + .filter(s -> !s.trim().isEmpty()) // filters recipes if the string is not empty by doing a lowercase search + .map(s -> { + String lowercaseSearch = s.toLowerCase(); + return finalRecipes.stream() + .filter(recipe -> + recipe.getName().toLowerCase().contains(lowercaseSearch) + ) + .toList(); + }) + .orElse(recipes); + recipes = limit // filters based on limit if provided + .filter(l -> l < finalRecipes.size()) + .map(l -> finalRecipes.stream().limit(l).toList()) + .orElse(recipes); return ResponseEntity.ok(recipes); } From 2d13a2b7af932cc5d1986f84c0e8be67a1222c7d Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Thu, 8 Jan 2026 23:19:50 +0100 Subject: [PATCH 4/4] rebased branches and fixed bugs --- server/src/main/java/server/api/RecipeController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/server/api/RecipeController.java b/server/src/main/java/server/api/RecipeController.java index f861f34..1ba4edc 100644 --- a/server/src/main/java/server/api/RecipeController.java +++ b/server/src/main/java/server/api/RecipeController.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import server.database.RecipeRepository; import server.service.RecipeService; import java.util.List; @@ -28,6 +29,7 @@ import java.util.Optional; @RestController @RequestMapping("/api") public class RecipeController { + private RecipeRepository recipeRepository; private final SimpMessagingTemplate messagingTemplate; private final RecipeService recipeService; @@ -122,7 +124,7 @@ public class RecipeController { } /** - * Performs a search based on a case-insensitive parital match on + * Performs a search based on a case-insensitive partial match on * Recipe name and limits the result to a set amount of results. * @param search - name of the recipe to be searched for. * @param limit - limit of the results queried for.