From 21b2465b9130b46ec26883080a585a709bd99e8d Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Thu, 22 Jan 2026 18:46:33 +0100 Subject: [PATCH] feat(client/service/shop): functional service backend --- client/src/main/java/client/MyModule.java | 6 +- .../java/client/service/ShoppingListItem.java | 6 ++ .../client/service/ShoppingListService.java | 9 +++ .../service/ShoppingListServiceImpl.java | 71 +++++++++++++++++++ .../client/service/ShoppingListViewModel.java | 4 ++ 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 client/src/main/java/client/service/ShoppingListItem.java create mode 100644 client/src/main/java/client/service/ShoppingListServiceImpl.java diff --git a/client/src/main/java/client/MyModule.java b/client/src/main/java/client/MyModule.java index e40e613..cf55986 100644 --- a/client/src/main/java/client/MyModule.java +++ b/client/src/main/java/client/MyModule.java @@ -21,8 +21,9 @@ import client.scenes.nutrition.NutritionDetailsCtrl; import client.scenes.nutrition.NutritionViewCtrl; import client.scenes.recipe.IngredientListCtrl; import client.scenes.recipe.RecipeStepListCtrl; -import client.service.NonFunctionalShoppingListService; +import client.scenes.shopping.ShoppingListCtrl; import client.service.ShoppingListService; +import client.service.ShoppingListServiceImpl; import client.service.ShoppingListViewModel; import client.utils.ConfigService; import client.utils.LocaleManager; @@ -60,8 +61,9 @@ public class MyModule implements Module { binder.bind(new TypeLiteral>() {}).toInstance( new WebSocketDataService<>() ); + binder.bind(ShoppingListCtrl.class).in(Scopes.SINGLETON); binder.bind(ShoppingListViewModel.class).toInstance(new ShoppingListViewModel()); - binder.bind(ShoppingListService.class).to(NonFunctionalShoppingListService.class); + binder.bind(ShoppingListService.class).to(ShoppingListServiceImpl.class); binder.bind(new TypeLiteral>() {}).toInstance( new WebSocketDataService<>() ); diff --git a/client/src/main/java/client/service/ShoppingListItem.java b/client/src/main/java/client/service/ShoppingListItem.java new file mode 100644 index 0000000..91dd98a --- /dev/null +++ b/client/src/main/java/client/service/ShoppingListItem.java @@ -0,0 +1,6 @@ +package client.service; + +import commons.FormalIngredient; +public class ShoppingListItem { + private FormalIngredient i; +} diff --git a/client/src/main/java/client/service/ShoppingListService.java b/client/src/main/java/client/service/ShoppingListService.java index f757165..04ef26b 100644 --- a/client/src/main/java/client/service/ShoppingListService.java +++ b/client/src/main/java/client/service/ShoppingListService.java @@ -14,6 +14,15 @@ public abstract class ShoppingListService { public ShoppingListService(ShoppingListViewModel viewModel) { this.viewModel = viewModel; } + + public ShoppingListViewModel getViewModel() { + return viewModel; + } + + public void setViewModel(ShoppingListViewModel viewModel) { + this.viewModel = viewModel; + } + public abstract void putIngredient(FormalIngredient ingredient); public abstract void putIngredient(FormalIngredient ingredient, Recipe recipe); public abstract void putIngredient(FormalIngredient ingredient, String recipeName); diff --git a/client/src/main/java/client/service/ShoppingListServiceImpl.java b/client/src/main/java/client/service/ShoppingListServiceImpl.java new file mode 100644 index 0000000..9941ee6 --- /dev/null +++ b/client/src/main/java/client/service/ShoppingListServiceImpl.java @@ -0,0 +1,71 @@ +package client.service; + +import com.google.inject.Inject; +import commons.FormalIngredient; +import commons.Recipe; +import javafx.util.Pair; + +import java.util.List; +import java.util.Optional; +import java.util.logging.Logger; + +public class ShoppingListServiceImpl extends ShoppingListService { + private final Logger logger = Logger.getLogger(ShoppingListServiceImpl.class.getName()); + @Inject + public ShoppingListServiceImpl( + ShoppingListViewModel model + ) { + super(model); + } + + @Override + public void putIngredient(FormalIngredient ingredient) { + getViewModel().getListItems().add(new Pair<>(ingredient, Optional.empty())); + } + + @Override + public void putIngredient(FormalIngredient ingredient, Recipe recipe) { + Pair> val = new Pair<>(ingredient, Optional.of(recipe.getName())); + logger.info("putting ingredients into shopping list: " + val); + getViewModel().getListItems().add(val); + } + + @Override + public void putIngredient(FormalIngredient ingredient, String recipeName) { + getViewModel().getListItems().add(new Pair<>(ingredient, Optional.of(recipeName))); + } + + @Override + public void putArbitraryItem(String name) { + + } + + @Override + public FormalIngredient purgeIngredient(Long id) { + return null; + } + + @Override + public FormalIngredient purgeIngredient(String ingredientName) { + FormalIngredient fi = getViewModel().getListItems().stream() + .filter(i -> + i.getKey().getIngredient().getName().equals(ingredientName)) + .findFirst().orElseThrow(NullPointerException::new).getKey(); + return null; + } + + @Override + public void reset() { + getViewModel().getListItems().clear(); + } + + @Override + public List>> getItems() { + return getViewModel().getListItems(); + } + + @Override + public String makePrintable() { + return "TODO"; + } +} diff --git a/client/src/main/java/client/service/ShoppingListViewModel.java b/client/src/main/java/client/service/ShoppingListViewModel.java index 30e03df..aaaa237 100644 --- a/client/src/main/java/client/service/ShoppingListViewModel.java +++ b/client/src/main/java/client/service/ShoppingListViewModel.java @@ -4,6 +4,7 @@ import commons.FormalIngredient; import javafx.beans.property.ListProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.util.Pair; import org.apache.commons.lang3.NotImplementedException; @@ -19,4 +20,7 @@ public class ShoppingListViewModel { throw new NotImplementedException(); } + public ObservableList>> getListItems() { + return listItems.get(); + } }