Files
PantryHub/repositories/ProductRepository.js

172 lines
2.7 KiB
JavaScript

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();