refactor(shopping): extract mergeKey helper to eliminate duplicate key construction

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-06 19:44:44 +02:00
parent 741141168b
commit 40ee4dad53

View File

@@ -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;