const db = require("../config/database"); class ProductRepository { getAll(householdId) { return db.prepare(` SELECT products.*, categories.name AS category_name, categories.icon AS category_icon FROM products LEFT JOIN categories ON categories.id = products.category_id WHERE products.household_id = ? ORDER BY products.name `).all(householdId); } findById(id, householdId) { return db.prepare(` SELECT * FROM products WHERE id = ? AND household_id = ? `).get(id, householdId); } create(data) { return db.prepare(` INSERT INTO products ( name, category_id, barcode, household_id ) VALUES (?, ?, ?, ?) `).run( data.name, data.category_id || null, data.barcode || null, data.household_id ); } createMany(products) { const insert = db.prepare(` INSERT INTO products (name, category_id, barcode, household_id) VALUES (?, ?, ?, ?) `); const insertMany = db.transaction((items) => { for (const product of items) { insert.run( product.name, product.category_id || null, product.barcode || null, product.household_id ); } }); insertMany(products); return products.length; } update(id, householdId, data) { return db.prepare(` UPDATE products SET name = ?, category_id = ? WHERE id = ? AND household_id = ? `).run( data.name, data.category_id || null, id, householdId ); } hasListItems(id, householdId) { return db.prepare(` SELECT 1 FROM shopping_list_items WHERE product_id = ? AND EXISTS ( SELECT 1 FROM shopping_lists WHERE shopping_lists.id = shopping_list_items.list_id AND shopping_lists.household_id = ? ) LIMIT 1 `).get(id, householdId) !== undefined; } delete(id, householdId) { return db.prepare(` DELETE FROM products WHERE id = ? AND household_id = ? `).run(id, householdId); } } module.exports = new ProductRepository();