feat(recipes): régimes calculés depuis les ingrédients (#131) #137
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/auto-recipe-diets"
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 #131(puce 4 de #3).RecipeDietétait explicitement manuel (« a manual reminder … not computed from its ingredients »). La donnée pour le calcul existait déjà :IngredientDiet(compat par ingrédient, exposée viaIngredientView.diets). Option A retenue (validée) : dérivé pur, table supprimée.Changements
Logique pure —
packages/shared/src/logic/recipe-diets.ts:computeRecipeDietViews(ingredients, glutenFreeDiet)→ un régimevegetarian/vegan/pescatarianssi tous les ingrédients y sont compatibles ;glutenFreessi aucun ingrédient ne porte l'allergènegluten;[]si la recette a ≥ 1 ingrédient placeholder.DietViews empruntés aux ingrédients eux-mêmes (glutenFree passé par l'appelant).Modèle —
RecipeDietdroppé (Recipe.diets/Diet.recipesretirés). Migration20260909130000_drop_recipe_diet:DROP TABLE, aucune donnée à conserver.Contrat —
createRecipeSchemaperddietIds;RecipeSummaryView.dietsresteDietView[](doc mise à jour : calculé).API
recipe.service.ts—recipeIncluderetire ledietsde niveau recette (gardeIngredientDietsur les ingrédients) ;toRecipeSummaryView/toRecipeViewcalculentdiets;loadReferenceDiets/loadGlutenFreeDietmémoïsés.suitableForHouseholdWhere→suitableForHouseholdrenvoie{ allergenWhere (SQL), requiredDietKeys };listRecipesapplique la contrainte régime foyer et le filtredietIdsen post-filtre surdietscalculé (omnivore= pas de contrainte).assertDietsExist+DIET_NOT_FOUNDsur la création recette supprimés (le code d'erreur reste — utilisé parPATCH /profilediet).Frontend —
RecipeFormPage+RecipeImportForm:DietTagSelect,dietIds,getDietsretirés.recipe-import-draft.tsidem.DietBadgesinchangé.RecipePickerDialoggarde son filtre régime (marche via le post-filtre).Vérification locale
pnpm lint✓ ·pnpm build✓ (Prisma régénéré) · Cypress :recipe-form.feature10/10 (nouveau scénario « pas de sélecteur de régime »),recipes.cy.ts12/12,recipe-sources.feature7/7,recipes/planningrégression OK. Mocha non exécutable ici —recipe-diets.test.ts(7 cas purs) +recipe.test.tsréécrit (4 nouveaux cas régimes calculés, 2 testsDIET_NOT_FOUNDretirés) +dietIdsretiré des fixturesrecipe-placeholder/sources— à valider en CI.🤖 Generated with Claude Code