import fs from 'node:fs'; import { parse } from 'csv-parse'; import { v4 as uuidv4 } from 'uuid'; export async function importProductsFromCSV(filePath, pool) { return new Promise((resolve, reject) => { const products = []; fs.createReadStream(filePath) .pipe(parse({ columns: true, skip_empty_lines: true })) .on('data', (row) => { products.push({ id: uuidv4(), sku: row.sku, name: row.name, description: row.description || null, category: row.category || null, }); }) .on('end', async () => { try { const connection = await pool.getConnection(); try { await connection.beginTransaction(); for (const product of products) { await connection.query( 'INSERT INTO products (id, sku, name, description, category) VALUES (?, ?, ?, ?, ?)', [product.id, product.sku, product.name, product.description, product.category] ); await connection.query( 'INSERT INTO inventory_levels (id, product_id, quantity) VALUES (?, ?, 0)', [uuidv4(), product.id] ); } await connection.commit(); resolve({ imported: products.length }); } catch (error) { await connection.rollback(); reject(error); } finally { connection.release(); } } catch (error) { reject(error); } }) .on('error', reject); }); }