X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=server%2Fmodels%2FProblem.js;fp=server%2Fmodels%2FProblem.js;h=75c2e146965853222abc86f86daff08c8dac680e;hb=89021f181ac0689bbc785ce0ebd9a910e66352b0;hp=0000000000000000000000000000000000000000;hpb=83c6c2c96e7d34c79db20827f56b51040ef39392;p=vchess.git diff --git a/server/models/Problem.js b/server/models/Problem.js new file mode 100644 index 00000000..75c2e146 --- /dev/null +++ b/server/models/Problem.js @@ -0,0 +1,106 @@ +var db = require("../utils/database"); + +/* + * Structure: + * id: integer + * added: datetime + * uid: user id (int) + * vid: variant id (int) + * fen: varchar (optional) + * instruction: text + * solution: text + */ + +const ProblemModel = +{ + checkProblem: function(p) + { + if (!p.vid.toString().match(/^[0-9]+$/)) + return "Wrong variant ID"; + if (!p.fen.match(/^[a-zA-Z0-9, /-]*$/)) + return "Bad FEN string"; + return ""; + }, + + create: function(p, cb) + { + db.serialize(function() { + const query = + "INSERT INTO Problems " + + "(added, uid, vid, fen, instruction, solution) " + + "VALUES " + + "(" + Date.now() + "," + p.uid + ",'" + p.fen + "',?,?)"; + db.run(query, p.instruction, p.solution, function(err) { + return cb(err, {pid: this.lastID}); + }); + }); + }, + + getAll: function(cb) + { + db.serialize(function() { + const query = + "SELECT * " + + "FROM Problems"; + db.all(query, (err,problems) => { + return cb(err, problems); + }); + }); + }, + + getOne: function(id, cb) + { + db.serialize(function() { + const query = + "SELECT * " + + "FROM Problems " + + "WHERE id = " + id; + db.get(query, (err,problem) => { + return cb(err, problem); + }); + }); + }, + + update: function(id, prob) + { + db.serialize(function() { + let query = + "UPDATE Problems " + + "SET " + + "vid = " + prob.vid + "," + + "fen = " + prob.fen + "," + + "instruction = " + prob.instruction + "," + + "solution = " + prob.solution + " " + + "WHERE id = " + id; + db.run(query); + }); + }, + + remove: function(id) + { + db.serialize(function() { + const query = + "DELETE FROM Problems " + + "WHERE id = " + id; + db.run(query); + }); + }, + + safeRemove: function(id, uid, cb) + { + db.serialize(function() { + const query = + "SELECT 1 " + + "FROM Problems " + + "WHERE id = " + id + " AND uid = " + uid; + db.get(query, (err,prob) => { + if (!prob) + return cb({errmsg: "Not your problem"}); + ProvlemModel.remove(id); + cb(null); + }); + }); + }, +} + +module.exports = ProblemModel;