import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; dotenv.config(); const connection = await mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME }); console.log('=== Seeding Menus Data ===\n'); // Hardcoded menu data from data.ts const menus = [ { id: 'klassisk-3-retter', title: 'Klassisk Menu', description: 'En traditionel dansk menu med et moderne twist. Populært valg til familiefester.', courses: ['Varmrøget laks med rygeostcreme, dild og radiser', 'Rosastegt kalvefilet med sæsonens grøntsager og rødvinssauce', 'Chokoladekage med bær og vaniljeis'], sides: [], tags: ['Nordisk', 'Klassisk', 'Populær'], image: '/img/klassisk.png', featured: true, baseIngredientsPerCover: 65, ingredientsCostIndex: 1.0, baseLabourHours: 4, incrementalLabourPerCover: 0.05, minCovers: 15, leadTimeDays: 7, basePricePerCover: 295, ingredients: [ { name: 'Varmrøget laks', quantity: '100g', perCover: true }, { name: 'Rygeost', quantity: '30g', perCover: true }, { name: 'Dild, frisk', quantity: '5g', perCover: true }, { name: 'Radiser', quantity: '3 stk', perCover: true }, { name: 'Kalvefilet', quantity: '200g', perCover: true }, { name: 'Kartofler', quantity: '150g', perCover: true }, { name: 'Gulerødder', quantity: '50g', perCover: true }, { name: 'Rødvin til sauce', quantity: '100ml', perCover: false }, { name: 'Chokolade, mørk', quantity: '80g', perCover: true }, { name: 'Bær, blandede', quantity: '50g', perCover: true }, { name: 'Vaniljeis', quantity: '100g', perCover: true }, { name: 'Fløde', quantity: '500ml', perCover: false }, { name: 'Smør', quantity: '200g', perCover: false } ] }, { id: 'gron-3-retter', title: 'Grøn Menu', description: 'Sæsonbaseret vegetarisk menu med fokus på smag og farver. Perfekt til både vegetarer og kødelskere.', courses: ['Grillet asparges med hollandaise og karse', 'Svamperisotto med parmesan og urter', 'Pocherede pærer med vaniljeis og hasselnødder'], sides: [], tags: ['Vegetarisk', 'Sæson', 'Populær'], image: '/img/veg.png', featured: true, baseIngredientsPerCover: 55, ingredientsCostIndex: 0.95, baseLabourHours: 4, incrementalLabourPerCover: 0.05, minCovers: 15, leadTimeDays: 7, basePricePerCover: 275, ingredients: [ { name: 'Asparges', quantity: '150g', perCover: true }, { name: 'Æg til hollandaise', quantity: '2 stk', perCover: false }, { name: 'Smør', quantity: '100g', perCover: false }, { name: 'Karse', quantity: '5g', perCover: true }, { name: 'Risottoris', quantity: '80g', perCover: true }, { name: 'Blandede svampe', quantity: '100g', perCover: true }, { name: 'Parmesan', quantity: '30g', perCover: true }, { name: 'Løg', quantity: '50g', perCover: false }, { name: 'Hvidvin', quantity: '200ml', perCover: false }, { name: 'Pærer', quantity: '1 stk', perCover: true }, { name: 'Hasselnødder', quantity: '20g', perCover: true }, { name: 'Vaniljeis', quantity: '100g', perCover: true } ] } // Add more menus as needed ]; try { console.log(`Inserting ${menus.length} menus...\n`); for (const menu of menus) { await connection.execute(` INSERT INTO menus ( id, title, description, courses, sides, tags, image, base_ingredients_per_cover, ingredients_cost_index, base_labour_hours, incremental_labour_per_cover, min_covers, lead_time_days, base_price_per_cover ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE title = VALUES(title), description = VALUES(description), courses = VALUES(courses), sides = VALUES(sides), tags = VALUES(tags), image = VALUES(image), base_ingredients_per_cover = VALUES(base_ingredients_per_cover), ingredients_cost_index = VALUES(ingredients_cost_index), base_labour_hours = VALUES(base_labour_hours), incremental_labour_per_cover = VALUES(incremental_labour_per_cover), min_covers = VALUES(min_covers), lead_time_days = VALUES(lead_time_days), base_price_per_cover = VALUES(base_price_per_cover) `, [ menu.id, menu.title, menu.description, JSON.stringify(menu.courses), JSON.stringify(menu.sides), JSON.stringify(menu.tags), menu.image, menu.baseIngredientsPerCover, menu.ingredientsCostIndex, menu.baseLabourHours, menu.incrementalLabourPerCover, menu.minCovers, menu.leadTimeDays, menu.basePricePerCover ]); // Delete and re-insert ingredients await connection.execute('DELETE FROM menu_ingredients WHERE menu_id = ?', [menu.id]); for (let i = 0; i < menu.ingredients.length; i++) { const ing = menu.ingredients[i]; await connection.execute(` INSERT INTO menu_ingredients (menu_id, name, quantity, per_cover, sort_order) VALUES (?, ?, ?, ?, ?) `, [menu.id, ing.name, ing.quantity, ing.perCover, i]); } console.log(`✓ ${menu.title} (${menu.ingredients.length} ingredienser)`); } console.log('\n✅ Seed completed!'); } catch (error) { console.error('❌ Seed failed:', error); process.exit(1); } finally { await connection.end(); }