Favorieten toegevoegd aan de navigatiebalk en sidebar.

This commit is contained in:
2026-08-29 19:53:28 +02:00
parent 2912f7c455
commit ce07575d5e
19 changed files with 355 additions and 29 deletions
+55
View File
@@ -0,0 +1,55 @@
const db = require("../config/database");
class FavoriteRepository {
getByHousehold(householdId) {
return db.prepare(`
SELECT products.id,
products.name,
products.category_id,
products.barcode,
categories.name AS category_name,
categories.icon AS category_icon
FROM product_favorites
JOIN products ON products.id = product_favorites.product_id
LEFT JOIN categories ON categories.id = products.category_id
WHERE product_favorites.household_id = ?
AND products.household_id = ?
ORDER BY products.name ASC
`).all(householdId, householdId);
}
getIdsByHousehold(householdId) {
return new Set(
db.prepare(`
SELECT product_favorites.product_id
FROM product_favorites
JOIN products ON products.id = product_favorites.product_id
WHERE product_favorites.household_id = ?
AND products.household_id = ?
`).all(householdId, householdId).map(row => row.product_id)
);
}
find(householdId, productId) {
return db.prepare(`
SELECT * FROM product_favorites
WHERE household_id = ? AND product_id = ?
`).get(householdId, productId);
}
add(householdId, productId) {
return db.prepare(`
INSERT OR IGNORE INTO product_favorites (household_id, product_id)
VALUES (?, ?)
`).run(householdId, productId);
}
remove(householdId, productId) {
return db.prepare(`
DELETE FROM product_favorites
WHERE household_id = ? AND product_id = ?
`).run(householdId, productId);
}
}
module.exports = new FavoriteRepository();
+31
View File
@@ -72,6 +72,37 @@ class ShoppingListRepository {
`).run(listId);
}
clearItems(listId) {
return db.prepare(`
DELETE FROM shopping_list_items
WHERE list_id = ?
`).run(listId);
}
addItems(listId, items) {
if (!items.length) return 0;
const insert = db.prepare(`
INSERT INTO shopping_list_items (list_id, product_id, amount, checked, sort_order)
VALUES (?, ?, ?, ?, ?)
`);
const transaction = db.transaction(() => {
for (const item of items) {
insert.run(
listId,
item.product_id,
item.amount ?? 1,
item.checked ?? 0,
item.sort_order ?? 0
);
}
});
transaction();
return items.length;
}
deleteItem(listId, itemId) {
return db.prepare(`
DELETE FROM shopping_list_items WHERE id = ? AND list_id = ?