feat(seed): popola Recipe.variants e RecipeIngredient.substitutes

- DEFAULT_SUBSTITUTES_BY_INGREDIENT in seed-recipes.ts: ~50 mappature
  riusabili (pesci interscambiabili, latticini lactose-free, manzo→tacchino,
  pollo→tacchino, frutta secca, condimenti, legumi inter-cambiabili)
- 12 ricette signature ora dichiarano variants reali (1-2 ciascuna):
  • Frittata di spinaci → senza lattosio / più saziante
  • Yogurt greco con noci → vegana / con frutti di bosco
  • Uova strapazzate con pancetta → senza maiale / con verdure
  • Insalata di pollo, avocado e pomodorini → vegetariana / con feta e olive
  • Salmone al forno con asparagi → versione fredda / sgombro
  • Bistecca con zucchine → tacchino / con melanzane
  • Insalatona con tonno e olive → Niçoise / sgombro
  • Branzino al cartoccio → mediterranea / orata
  • Polpette di pollo e ricotta → in sugo / tacchino-spinaci
  • Tagliata con rucola → con pomodorini / bresaola
  • Caprese → con avocado / con prosciutto crudo
  • Pancake proteici, Smoothie verde, Tagliolini di zucchine,
    Insalata di lenticchie, Quinoa con pollo (varianti analoghe)
- seed.ts ora propaga r.variants al campo Recipe.variants e applica
  ing.substitutes (override) o DEFAULT_SUBSTITUTES_BY_INGREDIENT[name]
  alle righe RecipeIngredient

Smoke verificato live: /recipes/<frittata> mostra "VARIANTI SUGGERITE"
con "Versione senza lattosio (-40 kcal)" e "Più saziante (+90 kcal)";
gli ingredienti hanno la riga "Sostituzioni: bietole, Grana Padano…".

Catalog: 46 ricette, 164 link RecipeIngredient, ~50 mappature substitutes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
lucianoandClaude Opus 4.7 committed 2026-04-29 23:31:33 +02:00
1 parent bda96a3550
commit c37dc5d717
2 files changed
+289 -3

No files matched your search

+6 -1
View File
@@ -1,7 +1,7 @@
import { PrismaClient } from '@prisma/client';
import { SEED_INGREDIENTS } from './seed-ingredients.js';
import { SEED_RECIPES } from './seed-recipes.js';
import { DEFAULT_SUBSTITUTES_BY_INGREDIENT, SEED_RECIPES } from './seed-recipes.js';
const prisma = new PrismaClient();
@@ -40,6 +40,7 @@ async function main(): Promise<void> {
let linksCreated = 0;
for (const r of SEED_RECIPES) {
let recipe = await prisma.recipe.findFirst({ where: { name: r.name } });
const variantsJson = r.variants ?? [];
if (!recipe) {
recipe = await prisma.recipe.create({
data: {
@@ -54,6 +55,7 @@ async function main(): Promise<void> {
netCarbG: r.netCarbG,
phases: r.phases,
notesChef: r.notesChef ?? null,
variants: variantsJson,
},
});
recipesInserted++;
@@ -71,6 +73,7 @@ async function main(): Promise<void> {
netCarbG: r.netCarbG,
phases: r.phases,
notesChef: r.notesChef ?? null,
variants: variantsJson,
},
});
}
@@ -83,12 +86,14 @@ async function main(): Promise<void> {
console.warn(`[seed] ricetta "${r.name}": ingrediente "${ing.name}" non trovato`);
continue;
}
const substitutes = ing.substitutes ?? DEFAULT_SUBSTITUTES_BY_INGREDIENT[ing.name] ?? [];
await prisma.recipeIngredient.create({
data: {
recipeId: recipe.id,
ingredientId,
quantity: ing.quantity,
unit: ing.unit,
substitutes,
},
});
linksCreated++;