import * as express from "express"; import * as bodyparser from "body-parser"; import { authRoute } from "../security/token"; const userRouter = express.Router(); userRouter.use(authRoute); userRouter.use(bodyparser.json()); // Return the user object if the user is still authenticated userRouter.get("/me", async (req, res) => { //@ts-ignore const { db, token } = req; const session = await db.collection("sessions").findOne({ token, }); if (session !== null) { const user = await db.collection("users").findOne({ username: session.username }); // TODO: Strip salt, hash, _id res.send({ error: "0", data: Object.assign({}, user, { sessionToken: token, }), }); } else { res.send({ error: "404", data: {}, }); } }); // Removes the user's session userRouter.get("/logout", async (req, res) => { // Try to remove the session //@ts-ignore await req.db.collections("sessions").findOneAndDelete({ session: req.get("Token") }); res.send({ error: "0", data: {}, }); }); // TODO: This should be shared with the frontend, to remove code duplication export enum VocabType { NOMEN = 0, VERB = 1, ADJEKTIV = 2, ADVERB = 3, }; // Gets the user's review queue userRouter.get("/queue", async (req, res) => { console.log("STUB: /user/queue"); // TODO: Stub res.send({ error: "0", data: { queue: [{ german: ["Wein"], hint: "Worte auf '-um' sind meistens NeutrUM", type: VocabType.NOMEN, latin: { grundform: "Vinum", genitiv: "Vini", genus: "Neutrum" }, id: 0 }] }, }); }); // Get ot set the last review results userRouter.get("/lastReview", async (req, res) => { console.log("STUB(get): /user/lastReview"); // TODO: Stub res.send({ error: "0", data: { correct: 6, wrong: 2, }, }); }); userRouter.post("/lastReview", async (req, res) => { console.log("STUB(post): /user/lastReview"); // TODO: Stub res.send({ error: "0", data: {}, }); }); // Get the next level userRouter.get("/nextLevel", async (req, res) => { console.log("STUB: /user/nextLevel"); // TODO: Stub res.send({ error: "0", data: { name: "Test level", desc: "Just a test", level: 3, done: false, }, }); }); // Mark a level as done userRouter.post("/level/:id", async (req, res) => { console.log("STUB(post): /user/level/:id"); // TODO: Stub res.send({ error: "0", data: {}, }); }); // Get the data needed for the dashboard userRouter.get("/dashboard", async (req, res) => { console.log("STUB(post): /user/dashboard"); let users: any[] = []; let nr = 10; for (let i = 0; i < 10; i++) users = users.concat({ username: `Test User ${i}`, score: 100 * i, level: Math.floor(Math.random() * Math.floor(10)), nr: nr--, }); // TODO: Stub res.send({ error: "200", data: { nextLevel: { name: "Test level", desc: "Just a test", level: 3, done: false, }, topTen: users, lastReview: { correct: 0, wrong: 0, }, }, }); }); export default userRouter;