X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=routes%2Fproblems.js;h=777543b109b65bb2c3896f072bdb120883975123;hb=b955c65b942d09d24b5c3bed0d755d4f2f8f71f1;hp=b94aa60133b1a30742179e89a39daab86f2c2274;hpb=8d7e2786f5a67a1b9a77c742d7951e0efbe8747d;p=vchess.git diff --git a/routes/problems.js b/routes/problems.js index b94aa601..777543b1 100644 --- a/routes/problems.js +++ b/routes/problems.js @@ -6,20 +6,6 @@ const ProblemModel = require("../models/Problem"); const sanitizeHtml = require('sanitize-html'); const MaxNbProblems = 20; -// Fetch N previous or next problems -router.get("/problems/:vname([a-zA-Z0-9]+)", access.ajax, (req,res) => { - const vname = req.params["vname"]; - const directionStr = (req.query.direction == "forward" ? ">" : "<"); - const lastDt = req.query.last_dt; - if (!lastDt.match(/[0-9]+/)) - return res.json({errmsg: "Bad timestamp"}); - ProblemModel.fetchN(vname, directionStr, lastDt, MaxNbProblems, (err,problems) => { - if (!!err) - return res.json(err); - return res.json({problems: problems}); - }); -}); - function sanitizeUserInput(fen, instructions, solution) { if (!fen.match(/^[a-zA-Z0-9, /-]*$/)) @@ -37,30 +23,71 @@ function sanitizeUserInput(fen, instructions, solution) }; } +// Get one problem (TODO: vid unused, here for URL de-ambiguification) +router.get("/problems/:vid([0-9]+)/:id([0-9]+)", access.ajax, (req,res) => { + const pid = req.params["id"]; + ProblemModel.getOne(pid, (err,problem) => { + if (!!err) + return res.json(err); + return res.json({problem: problem}); + }); +}); + +// Fetch N previous or next problems +router.get("/problems/:vid([0-9]+)", access.ajax, (req,res) => { + const vid = req.params["vid"]; + const directionStr = (req.query.direction == "forward" ? ">" : "<"); + const lastDt = req.query.last_dt; + const type = req.query.type; + if (!lastDt.match(/[0-9]+/)) + return res.json({errmsg: "Bad timestamp"}); + if (!["others","mine"].includes(type)) + return res.json({errmsg: "Bad type"}); + ProblemModel.fetchN(vid, req.userId, type, directionStr, lastDt, MaxNbProblems, + (err,problems) => { + if (!!err) + return res.json(err); + return res.json({problems: problems}); + } + ); +}); + // Upload a problem (sanitize inputs) -router.post("/problems/:vname([a-zA-Z0-9]+)", access.logged, access.ajax, (req,res) => { - const vname = req.params["vname"]; - const s = sanitizeUserInput(req.body["fen"], req.body["instructions"], req.body["solution"]); +router.post("/problems/:vid([0-9]+)", access.logged, access.ajax, (req,res) => { + const vid = req.params["vid"]; + const s = sanitizeUserInput( + req.body["fen"], req.body["instructions"], req.body["solution"]); if (typeof s === "string") return res.json({errmsg: s}); - ProblemModel.create(vname, s.fen, s.instructions, s.solution); - res.json({}); + ProblemModel.create(req.userId, vid, s.fen, s.instructions, s.solution, + (err,pid) => { + if (!!err) + return res.json(err); + res.json({id: pid["rowid"]}); + } + ); }); // Update a problem (also sanitize inputs) router.put("/problems/:id([0-9]+)", access.logged, access.ajax, (req,res) => { const pid = req.params["id"]; //problem ID - const s = sanitizeUserInput(req.body["fen"], req.body["instructions"], req.body["solution"]); + const s = sanitizeUserInput( + req.body["fen"], req.body["instructions"], req.body["solution"]); if (typeof s === "string") return res.json({errmsg: s}); - ProblemModel.update(pid, req.user._id, fen, instructions, solution); - res.json({}); + ProblemModel.update(pid, req.userId, s.fen, s.instructions, s.solution, + err => { + if (!!err) + return res.json(err); + res.json({}); + } + ); }); // Delete a problem router.delete("/problems/:id([0-9]+)", access.logged, access.ajax, (req,res) => { const pid = req.params["id"]; //problem ID - ProblemModel.delete(pid, req.user._id); + ProblemModel.remove(pid, req.userId); res.json({}); });