import * as express from "express"; const router = express.Router(); router.use((req, res, next) => { if (!req.cookies || !req.cookies.uid) { res.status(404); res.send(); } else { next(); } }); router.get("/", (req, res, next) => { const user = (req.app as any).db.get("users").find({id: req.cookies.uid}).value(); const data = [{ backgroundColor: "rgba(200, 200, 200, 1)", data: [], label: "Noch nicht probiert", }, { backgroundColor: "#8b0000", data: [], label: "1", }, { backgroundColor: "#b24502", data: [], label: "2", }, { backgroundColor: "#d87501", data: [], label: "3", }, { backgroundColor: "#ffa500", data: [], label: "4", }, { backgroundColor: "#b59200", data: [], label: "5", }, { backgroundColor: "#6b7d00", data: [], label: "6", }, { backgroundColor: "#006400", data: [], label: "7", }]; const recommends = []; (req.app as any).cocktails.forEach((value) => { let found = false; const triedCocktails = []; for (const cocktail of user.cocktails) { if (cocktail.cocktail === value[3]) { data[cocktail.level].data.push({x: value[0], y: value[1], r: 4, val: value}); found = true; break; } else { triedCocktails.push(cocktail); } } if (!found) { let dist = 0; let distsum = 0; for (const tried of triedCocktails) { const idx = (req.app as any).cocktailList.indexOf(tried.cocktail); if (idx > -1) { const c = (req.app as any).cocktails[idx]; const d = Math.abs(c[0] - value[0]) + Math.abs(c[1] - value[1]); if (d > 0.001) { dist += (tried.level) / d; distsum += 1 / d; } else { dist = tried.level; distsum = 1; break; } } } recommends.push([dist / distsum, value]); data[0].data.push({x: value[0], y: value[1], r: 3, val: value}); } }); recommends.sort((a, b) => { return a[0] < b[0] ? 1 : (a[0] === b[0] ? 0 : -1); }); res.render("recommends", {data, title: "Ähnliche Cocktails", user, cocktails: (req.app as any).cocktails, cocktailList: (req.app as any).cocktailList, recommends}); }); export = router;