X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=server%2Fmodels%2FProblem.js;fp=server%2Fmodels%2FProblem.js;h=a1f99031297f962ebdbf3b59cec20353bc966f7f;hb=625022fdcf750f0aff8fcd699f7e9b89730e1d10;hp=0000000000000000000000000000000000000000;hpb=b955c65b942d09d24b5c3bed0d755d4f2f8f71f1;p=vchess.git diff --git a/server/models/Problem.js b/server/models/Problem.js new file mode 100644 index 00000000..a1f99031 --- /dev/null +++ b/server/models/Problem.js @@ -0,0 +1,81 @@ +var db = require("../utils/database"); + +/* + * Structure: + * id: problem number (int) + * uid: user id (int) + * vid: variant id (int) + * added: timestamp + * instructions: text + * solution: text + */ + +const ProblemModel = +{ + create: function(uid, vid, fen, instructions, solution, cb) + { + db.serialize(function() { + const insertQuery = + "INSERT INTO Problems (added, uid, vid, fen, instructions, solution) " + + "VALUES (" + Date.now() + "," + uid + "," + vid + ",'" + fen + "',?,?)"; + db.run(insertQuery, [instructions, solution], err => { + if (!!err) + return cb(err); + db.get("SELECT last_insert_rowid() AS rowid", cb); + }); + }); + }, + + getOne: function(id, callback) + { + db.serialize(function() { + const query = + "SELECT * " + + "FROM Problems " + + "WHERE id = " + id; + db.get(query, callback); + }); + }, + + fetchN: function(vid, uid, type, directionStr, lastDt, MaxNbProblems, callback) + { + db.serialize(function() { + let typeLine = ""; + if (uid > 0) + typeLine = "AND uid " + (type=="others" ? "!=" : "=") + " " + uid; + const query = + "SELECT * FROM Problems " + + "WHERE vid = " + vid + + " AND added " + directionStr + " " + lastDt + " " + typeLine + " " + + "ORDER BY added " + (directionStr=="<" ? "DESC " : "") + + "LIMIT " + MaxNbProblems; + db.all(query, callback); + }); + }, + + // TODO: update fails (but insert is OK) + update: function(id, uid, fen, instructions, solution, cb) + { + db.serialize(function() { + const query = + "UPDATE Problems SET " + + "fen = '" + fen + "', " + + "instructions = ?, " + + "solution = ? " + + "WHERE id = " + id + " AND uid = " + uid; + db.run(query, [instructions,solution], cb); + }); + }, + + remove: function(id, uid) + { + db.serialize(function() { + const query = + "DELETE FROM Problems " + + "WHERE id = " + id + " AND uid = " + uid; + db.run(query); + }); + }, +} + +module.exports = ProblemModel;