Files
kokken/scripts/db-ingredients-migration.mjs
Alex Polo 996a090aba feat: Implement menu management and ingredient CRUD functionality
- Added menu generator page with existing menu loading and selection.
- Enhanced menus management page with editing capabilities and improved table layout.
- Updated booking page to allow for menu and package data fetching.
- Integrated Tailwind CSS line-clamp plugin for better text handling.
- Created a migration script for initializing ingredients database.
- Developed ingredients management page with search, filter, and CRUD operations.
- Implemented API routes for ingredients with proper error handling and logging.
2025-11-07 15:00:42 +01:00

85 lines
3.4 KiB
JavaScript

import mysql from 'mysql2/promise';
import dotenv from 'dotenv';
dotenv.config();
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 10,
});
async function migrateIngredients() {
console.log('=== Creating ingredients table ===');
try {
// Create ingredients table
await pool.query(`
CREATE TABLE IF NOT EXISTS ingredients (
id VARCHAR(100) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
category VARCHAR(100),
unit VARCHAR(50) NOT NULL,
price_per_unit DECIMAL(10, 2) NOT NULL,
supplier VARCHAR(255),
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
`);
console.log('✓ Ingredients table created');
// Add some default ingredients
const defaultIngredients = [
{ id: 'kartofler', name: 'Kartofler', category: 'Grøntsager', unit: 'kg', price: 15.00, supplier: 'Lokal' },
{ id: 'tomat', name: 'Tomater', category: 'Grøntsager', unit: 'kg', price: 25.00, supplier: 'Lokal' },
{ id: 'loeg', name: 'Løg', category: 'Grøntsager', unit: 'kg', price: 12.00, supplier: 'Lokal' },
{ id: 'hvidloeg', name: 'Hvidløg', category: 'Grøntsager', unit: 'stk', price: 3.00, supplier: 'Lokal' },
{ id: 'oksekoed', name: 'Oksekød', category: 'Kød', unit: 'kg', price: 120.00, supplier: 'Slagter' },
{ id: 'kylling', name: 'Kylling', category: 'Kød', unit: 'kg', price: 60.00, supplier: 'Slagter' },
{ id: 'laks', name: 'Laks', category: 'Fisk', unit: 'kg', price: 180.00, supplier: 'Fiskehandler' },
{ id: 'smor', name: 'Smør', category: 'Mejeriprodukter', unit: 'kg', price: 50.00, supplier: 'Supermarked' },
{ id: 'fløde', name: 'Fløde', category: 'Mejeriprodukter', unit: 'liter', price: 25.00, supplier: 'Supermarked' },
{ id: 'parmesan', name: 'Parmesan', category: 'Mejeriprodukter', unit: 'kg', price: 150.00, supplier: 'Supermarked' },
{ id: 'olivenolie', name: 'Olivenolie', category: 'Olier & Eddiker', unit: 'liter', price: 60.00, supplier: 'Supermarked' },
{ id: 'salt', name: 'Salt', category: 'Krydderier', unit: 'kg', price: 15.00, supplier: 'Supermarked' },
{ id: 'peber', name: 'Peber', category: 'Krydderier', unit: 'kg', price: 120.00, supplier: 'Supermarked' },
];
for (const ing of defaultIngredients) {
await pool.query(`
INSERT INTO ingredients (id, name, category, unit, price_per_unit, supplier)
VALUES (?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
name = VALUES(name),
category = VALUES(category),
unit = VALUES(unit),
price_per_unit = VALUES(price_per_unit),
supplier = VALUES(supplier)
`, [ing.id, ing.name, ing.category, ing.unit, ing.price, ing.supplier]);
}
console.log(`${defaultIngredients.length} default ingredients inserted`);
} catch (error) {
console.error('❌ Migration error:', error);
throw error;
} finally {
await pool.end();
}
}
migrateIngredients()
.then(() => {
console.log('✅ Migration complete');
process.exit(0);
})
.catch((error) => {
console.error('❌ Migration failed:', error);
process.exit(1);
});