feat(recipes): ingrédients d'assaisonnement « selon le goût » (#128) #136
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/seasoning-ingredients"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Closes #128(puce 1 de #3). Aujourd'hui toute ligne d'ingrédient porte une quantité + une unité obligatoires (RecipeIngredient.quantity/unitIdNOT NULL,recipeIngredientInputSchema,canSubmit), impossible de saisir « sel — selon le goût ».Changements
Modèle —
RecipeIngredient.quantity/unitIddeviennent nullable + relationunitoptionnelle. Migration20260909120000_recipe_ingredient_quantity_optional: deuxDROP NOT NULL, purement additive, aucune ligne réécrite.Contrat partagé —
recipeIngredientInputSchema:quantity/unitIdoptionnels +.refine« les deux ou aucun » (rejette quantité-sans-unité).RecipeIngredientView.quantity/unitetShoppingListItemView.quantity/unitdeviennent… | null.API —
toRecipeViewrenvoienull/nullpour une ligne d'assaisonnement ;resolveIngredientLines/assertUnitsExistgèrent l'absence.aggregateShoppingList: une ligne sans quantité apparaît une fois (clé:toTaste, dédupliquée par ingrédient), jamais sommée ni mise à l'échelle. Session de cuisine : le chemin clause-de-technique tolérait déjàquantitynull — inchangé (ne lit pas la liste d'en-tête).Frontend —
IngredientRow: case « Selon le goût » qui masque quantité/unité et n'est jamais--incomplete.RecipeFormPage+RecipeImportForm:IngredientLine.toTaste,canSubmit/payload adaptés, et un import dont la source laisse une ligne résolue sans quantité (« salt to taste », déjà produit partranslateRecipeIngredients) arrive directement entoTaste.ShoppingListPageaffiche « selon le goût ». i18n :recipes.form.toTasteToggle,shoppingList.toTaste.Vérification locale
pnpm lint✓ ·pnpm build✓ (Prisma client régénéré, tsc api/web OK) · Cypressrecipe-form.feature9/9 +shopping-list.feature5/5 + régressionrecipes/planning/recipe-sources/layout38/38. Mocha non exécutable ici (pas de Postgres local) — 4 tests ajoutés (recipe.test.ts×3,shopping-list.test.ts×1), à valider en CI.🤖 Generated with Claude Code