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