68 lines
1.9 KiB
JavaScript
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),
|
|
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();
|