feat: D1 — Shopping list (Issue #30) #43
@@ -90,7 +90,7 @@ public class ShoppingService {
|
||||
if (ingredient.isStaple()) {
|
||||
continue;
|
||||
}
|
||||
String key = ingredient.getId().toString() + "|" + ri.getUnit();
|
||||
String key = mergeKey(ingredient.getId(), ri.getUnit());
|
||||
merged.computeIfAbsent(key, k -> new MergedIngredient(ingredient, ri.getUnit()))
|
||||
.addQuantity(ri.getQuantity())
|
||||
.addRecipeId(recipe.getId());
|
||||
@@ -103,7 +103,7 @@ public class ShoppingService {
|
||||
for (ShoppingListItem item : shoppingList.getItems()) {
|
||||
if (item.getSourceRecipes() != null && item.getSourceRecipes().length > 0) {
|
||||
// Generated item
|
||||
String key = (item.getIngredient() != null ? item.getIngredient().getId().toString() : "") + "|" + item.getUnit();
|
||||
String key = mergeKey(item.getIngredient() != null ? item.getIngredient().getId() : null, item.getUnit());
|
||||
existingByKey.put(key, item);
|
||||
} else {
|
||||
customItems.add(item);
|
||||
@@ -113,7 +113,7 @@ public class ShoppingService {
|
||||
// Merge: update existing, add new, collect keys to keep
|
||||
Set<String> mergedKeys = new HashSet<>();
|
||||
for (MergedIngredient mi : merged.values()) {
|
||||
String key = mi.ingredient.getId().toString() + "|" + mi.unit;
|
||||
String key = mergeKey(mi.ingredient.getId(), mi.unit);
|
||||
mergedKeys.add(key);
|
||||
|
||||
ShoppingListItem existing = existingByKey.get(key);
|
||||
@@ -133,8 +133,9 @@ public class ShoppingService {
|
||||
// Remove generated items no longer in the plan
|
||||
shoppingList.getItems().removeIf(item ->
|
||||
item.getSourceRecipes() != null && item.getSourceRecipes().length > 0
|
||||
&& !mergedKeys.contains(
|
||||
(item.getIngredient() != null ? item.getIngredient().getId().toString() : "") + "|" + item.getUnit()));
|
||||
&& !mergedKeys.contains(mergeKey(
|
||||
item.getIngredient() != null ? item.getIngredient().getId() : null,
|
||||
item.getUnit())));
|
||||
|
||||
shoppingList.setGeneratedAt(java.time.Instant.now());
|
||||
shoppingListRepository.save(shoppingList);
|
||||
@@ -308,6 +309,10 @@ public class ShoppingService {
|
||||
);
|
||||
}
|
||||
|
||||
private static String mergeKey(UUID ingredientId, String unit) {
|
||||
return (ingredientId != null ? ingredientId.toString() : "") + "|" + unit;
|
||||
}
|
||||
|
||||
private static class MergedIngredient {
|
||||
final Ingredient ingredient;
|
||||
final String unit;
|
||||
|
||||
Reference in New Issue
Block a user