Files

68 lines
1.9 KiB
JavaScript

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, req.user.household_id),
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();