mirror of
https://github.com/taogaetz/chefbible.git
synced 2025-12-06 11:47:24 -05:00
149 lines
6.2 KiB
TypeScript
149 lines
6.2 KiB
TypeScript
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();
|
|
});
|