Multi tenant DB, registratie per huishouden V1.2

This commit is contained in:
2026-08-09 19:50:53 +02:00
parent 1f9fd73026
commit c37b8956d4
15 changed files with 148 additions and 96 deletions
+24 -15
View File
@@ -1,7 +1,8 @@
const ProductService =
require("../services/ProductService");
const db = require("../config/database");
const CategoryService = require("../services/CategoryService");
const parseCsv = require("../utils/parseCsv");
class ProductController {
@@ -10,11 +11,9 @@ class ProductController {
index(req, res) {
const products =
ProductService.getProducts();
ProductService.getProducts(req.user.household_id);
const categories = db.prepare(
"SELECT * FROM categories ORDER BY name"
).all();
const categories = CategoryService.getCategories(req.user.household_id);
res.render(
"products/index",
@@ -39,9 +38,15 @@ class ProductController {
return res.redirect("/products");
}
if (categoryId !== null && !CategoryService.getCategory(categoryId, req.user.household_id)) {
req.flash("error", "De gekozen categorie bestaat niet.");
return res.redirect("/products");
}
ProductService.createProduct({
name,
category_id: categoryId
category_id: categoryId,
household_id: req.user.household_id
});
req.flash("success", "Product toegevoegd.");
@@ -80,7 +85,7 @@ class ProductController {
return res.redirect("/products");
}
const categories = db.prepare("SELECT id, name FROM categories").all();
const categories = CategoryService.getCategories(req.user.household_id);
const categoryIds = new Map(
categories.map(category => [category.name.trim().toLowerCase(), category.id])
);
@@ -105,7 +110,8 @@ class ProductController {
products.push({
name,
category_id: categoryId,
barcode: barcodeIndex === -1 ? "" : (row[barcodeIndex] || "").trim()
barcode: barcodeIndex === -1 ? "" : (row[barcodeIndex] || "").trim(),
household_id: req.user.household_id
});
});
@@ -123,7 +129,7 @@ class ProductController {
editForm(req, res) {
const productId = Number.parseInt(req.params.id, 10);
const product = Number.isInteger(productId)
? ProductService.getProduct(productId)
? ProductService.getProduct(productId, req.user.household_id)
: null;
if (!product) {
@@ -131,9 +137,7 @@ class ProductController {
return res.redirect("/products");
}
const categories = db.prepare(
"SELECT * FROM categories ORDER BY name"
).all();
const categories = CategoryService.getCategories(req.user.household_id);
res.render("products/edit", {
title: "Product wijzigen",
@@ -156,7 +160,12 @@ class ProductController {
return res.redirect("/products");
}
const result = ProductService.updateProduct(productId, {
if (categoryId !== null && !CategoryService.getCategory(categoryId, req.user.household_id)) {
req.flash("error", "De gekozen categorie bestaat niet.");
return res.redirect(`/products/${productId}/edit`);
}
const result = ProductService.updateProduct(productId, req.user.household_id, {
name,
category_id: categoryId
});
@@ -179,7 +188,7 @@ class ProductController {
return res.redirect("/products");
}
if (ProductService.productHasListItems(productId)) {
if (ProductService.productHasListItems(productId, req.user.household_id)) {
req.flash(
"error",
"Dit product staat nog op een boodschappenlijst en kan niet worden verwijderd."
@@ -187,7 +196,7 @@ class ProductController {
return res.redirect(`/products/${productId}/edit`);
}
const result = ProductService.deleteProduct(productId);
const result = ProductService.deleteProduct(productId, req.user.household_id);
if (result.changes === 0) {
req.flash("error", "Product niet gevonden.");