chefbible/prisma/seed.ts
2025-09-08 14:23:31 -04:00

148 lines
6.2 KiB
TypeScript

import { PrismaClient } from '@prisma-app/client';
const prisma = new PrismaClient();
async function main() {
console.log('🧹 Clearing existing records...');
await prisma.menuRecipe.deleteMany();
await prisma.recipeIngredient.deleteMany();
await prisma.menu.deleteMany();
await prisma.recipe.deleteMany();
await prisma.ingredient.deleteMany();
await prisma.allergen.deleteMany();
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();
});