V1.1 met AI functie

This commit is contained in:
2026-08-09 19:25:44 +02:00
parent f3da7dfb8d
commit 1f9fd73026
8 changed files with 323 additions and 13 deletions
+67
View File
@@ -0,0 +1,67 @@
const MenuService = require("../services/MenuService");
class MenuController {
index(req, res) {
res.render("menu/index", { title: "Weekmenu" });
}
async generate(req, res) {
const people = Number.parseInt(req.body.people, 10);
const preferences = {
people: Number.isInteger(people) && people > 0 && people <= 12 ? people : 2,
diet: (req.body.diet || "").trim(),
exclude: (req.body.exclude || "").trim(),
budget: (req.body.budget || "").trim()
};
try {
const menu = await MenuService.generate(preferences);
res.render("menu/preview", {
title: "Weekmenu controleren",
menu,
newProducts: MenuService.getNewProducts(menu),
listName: "Weekboodschappen"
});
} catch (error) {
req.flash("error", error.message);
res.redirect("/menu");
}
}
addToList(req, res) {
let menu;
try {
menu = JSON.parse(req.body.menu || "{}");
} catch (error) {
req.flash("error", "Het menu kan niet worden gelezen.");
return res.redirect("/menu");
}
if (!Array.isArray(menu.days) || menu.days.length === 0) {
req.flash("error", "Het menu is leeg.");
return res.redirect("/menu");
}
const listName = (req.body.list_name || "Weekboodschappen").trim();
if (!listName) {
req.flash("error", "Geef een naam voor de boodschappenlijst op.");
return res.redirect("/menu");
}
const listId = MenuService.addToShoppingList(req.user.household_id, listName, menu);
req.flash("success", "Weekmenu toegevoegd aan de boodschappenlijst.");
res.redirect(`/lists/${listId}`);
}
}
module.exports = new MenuController();