import { PrismaClient } from '@prisma-app/client'; const prisma = new PrismaClient(); async function main() { // Check if database already has data const existingRecipes = await prisma.recipe.count(); if (existingRecipes > 0) { console.log('📊 Database already contains data, skipping seed...'); console.log(`Found ${existingRecipes} existing recipes`); return; } console.log('🌱 Seeding database with new recipes...'); // Create ingredients first const ingredients = await Promise.all([ prisma.ingredient.create({ data: { name: 'Vincotto' } }), prisma.ingredient.create({ data: { name: 'Olive Oil' } }), prisma.ingredient.create({ data: { name: 'Chives' } }), prisma.ingredient.create({ data: { name: 'Shallots' } }), prisma.ingredient.create({ data: { name: 'Salt & Pepper' } }), prisma.ingredient.create({ data: { name: 'Chili Flakes' } }), prisma.ingredient.create({ data: { name: 'Charred Orange' } }), prisma.ingredient.create({ data: { name: 'Red Wine Vinegar' } }), prisma.ingredient.create({ data: { name: 'Honey' } }), prisma.ingredient.create({ data: { name: 'Dijon' } }), prisma.ingredient.create({ data: { name: 'Garlic' } }), prisma.ingredient.create({ data: { name: 'Orange Zest' } }), prisma.ingredient.create({ data: { name: 'Water' } }), prisma.ingredient.create({ data: { name: 'White Wine Vinegar' } }), prisma.ingredient.create({ data: { name: 'Sugar' } }), prisma.ingredient.create({ data: { name: 'Salt' } }), prisma.ingredient.create({ data: { name: 'Nduja' } }), prisma.ingredient.create({ data: { name: 'Shallot Brunoise' } }), prisma.ingredient.create({ data: { name: 'Butter' } }), prisma.ingredient.create({ data: { name: 'Sundried Cherry Tomato' } }) ]); // Create a map for easy ingredient lookup const ingredientMap = new Map(ingredients.map(ing => [ing.name, ing])); // Recipe 1: Vincotto Dressing const vincottoDressing = await prisma.recipe.create({ data: { name: 'Vincotto Dressing', description: 'A rich and flavorful dressing made with vincotto, perfect for salads and marinades', time: 'Quick', station: 'Garde Manger', instructions: '', ingredients: { create: [ { ingredientId: ingredientMap.get('Vincotto')!.id, quantity: 90, unit: 'ml' }, { ingredientId: ingredientMap.get('Olive Oil')!.id, quantity: 150, unit: 'ml' }, { ingredientId: ingredientMap.get('Chives')!.id, quantity: 30, unit: 'ml' }, { ingredientId: ingredientMap.get('Shallots')!.id, quantity: 45, unit: 'ml' }, { ingredientId: ingredientMap.get('Salt & Pepper')!.id, quantity: null, unit: null, prep: 'Pinch to taste' }, { ingredientId: ingredientMap.get('Chili Flakes')!.id, quantity: null, unit: null, prep: 'Pinch to taste' } ] } } }); // Recipe 2: Charred Orange Salad Dressing const charredOrangeDressing = await prisma.recipe.create({ data: { name: 'Charred Orange Salad Dressing', description: 'A bright and citrusy dressing with charred orange notes', time: 'Medium', station: 'Garde Manger', instructions: '', ingredients: { create: [ { ingredientId: ingredientMap.get('Charred Orange')!.id, quantity: 5, unit: 'oranges' }, { ingredientId: ingredientMap.get('Olive Oil')!.id, quantity: 90, unit: 'ml' }, { ingredientId: ingredientMap.get('Red Wine Vinegar')!.id, quantity: 30, unit: 'ml' }, { ingredientId: ingredientMap.get('Honey')!.id, quantity: 20, unit: 'ml' }, { ingredientId: ingredientMap.get('Dijon')!.id, quantity: 10, unit: 'ml' }, { ingredientId: ingredientMap.get('Garlic')!.id, quantity: 2.5, unit: 'ml' }, { ingredientId: ingredientMap.get('Orange Zest')!.id, quantity: null, unit: null, prep: 'Pinch to taste' }, { ingredientId: ingredientMap.get('Salt & Pepper')!.id, quantity: null, unit: null, prep: 'Pinch to taste' } ] } } }); // Recipe 3: Scallop Vinegar const scallopVinegar = await prisma.recipe.create({ data: { name: 'Scallop Vinegar', description: 'A sweet and tangy vinegar solution for curing and marinating scallops', time: 'Quick', station: 'Garde Manger', instructions: '', ingredients: { create: [ { ingredientId: ingredientMap.get('Water')!.id, quantity: 250, unit: 'ml' }, { ingredientId: ingredientMap.get('White Wine Vinegar')!.id, quantity: 250, unit: 'ml' }, { ingredientId: ingredientMap.get('Sugar')!.id, quantity: 75, unit: 'ml' }, { ingredientId: ingredientMap.get('Salt')!.id, quantity: 7.5, unit: 'ml' } ] } } }); // Recipe 4: Nduja Spread const ndujaSpread = await prisma.recipe.create({ data: { name: 'Nduja Spread', description: 'A spicy and flavorful spread made with nduja sausage', time: 'Medium', station: 'Garde Manger', instructions: '', ingredients: { create: [ { ingredientId: ingredientMap.get('Nduja')!.id, quantity: 450, unit: 'g' }, { ingredientId: ingredientMap.get('Red Wine Vinegar')!.id, quantity: 64.8, unit: 'ml' }, { ingredientId: ingredientMap.get('Shallot Brunoise')!.id, quantity: 108, unit: 'g' }, { ingredientId: ingredientMap.get('Sugar')!.id, quantity: 21.8, unit: 'g' }, { ingredientId: ingredientMap.get('Salt')!.id, quantity: 14.5, unit: 'g' }, { ingredientId: ingredientMap.get('Butter')!.id, quantity: 270, unit: 'g' }, { ingredientId: ingredientMap.get('Sundried Cherry Tomato')!.id, quantity: 162, unit: 'g' }, { ingredientId: ingredientMap.get('Chili Flakes')!.id, quantity: 10, unit: 'g' } ] } } }); console.log('✅ Seeding complete!'); console.log('--- Summary ---'); console.log(`Ingredients created: ${ingredients.length}`); console.log(`Recipes created: 4`); console.log('Recipes:'); console.log('- Vincotto Dressing'); console.log('- Charred Orange Salad Dressing'); console.log('- Scallop Vinegar'); console.log('- Nduja Spread'); } main() .catch(e => { console.error(e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });