Files
kuerbiskern-web/routes/recommends.ts
2019-01-12 11:57:07 +01:00

90 lines
2.3 KiB
TypeScript

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;