X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=models%2FProblem.js;h=8f3a302c8d61d6515997ab5a9be5c915cb892265;hb=00f2759e16ec73fa1ecd0254a9c9018530d71892;hp=cdd146e704c5086e33d73332f8547c212d30db0c;hpb=c018b304ba439ca92348dcb65715707f5cfcee05;p=vchess.git diff --git a/models/Problem.js b/models/Problem.js index cdd146e7..8f3a302c 100644 --- a/models/Problem.js +++ b/models/Problem.js @@ -10,63 +10,67 @@ var db = require("../utils/database"); * solution: text */ -exports.create = function(vname, fen, instructions, solution) +exports.create = function(uid, vid, fen, instructions, solution, cb) { db.serialize(function() { - db.get("SELECT id FROM Variants WHERE name = '" + vname + "'", (err,variant) => { - db.run( - "INSERT INTO Problems (added, vid, fen, instructions, solution) VALUES " + - "(" + - Date.now() + "," + - variant.id + "," + - fen + "," + - instructions + "," + - solution + - ")"); + 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); }); }); } -exports.getById = function(id, callback) +exports.getOne = function(id, callback) { db.serialize(function() { - db.get( - "SELECT * FROM Problems " + - "WHERE id ='" + id + "'", - callback); + const query = + "SELECT * " + + "FROM Problems " + + "WHERE id = " + id; + db.get(query, callback); }); } -exports.fetchN = function(vname, directionStr, lastDt, MaxNbProblems, callback) +exports.fetchN = function(vid, uid, type, directionStr, lastDt, MaxNbProblems, callback) { db.serialize(function() { - db.all( + let typeLine = ""; + if (uid > 0) + typeLine = "AND uid " + (type=="others" ? "!=" : "=") + " " + uid; + const query = "SELECT * FROM Problems " + - "WHERE vid = (SELECT id FROM Variants WHERE name = '" + vname + "') " + - " AND added " + directionStr + " " + lastDt + " " + + "WHERE vid = " + vid + + " AND added " + directionStr + " " + lastDt + " " + typeLine + " " + "ORDER BY added " + (directionStr=="<" ? "DESC " : "") + - "LIMIT " + MaxNbProblems, - callback); + "LIMIT " + MaxNbProblems; + db.all(query, callback); }); } -exports.update = function(id, uid, fen, instructions, solution) +// TODO: update fails (but insert is OK) +exports.update = function(id, uid, fen, instructions, solution, cb) { db.serialize(function() { - db.run( - "UPDATE Problems " + - "fen = " + fen + ", " + - "instructions = " + instructions + ", " + - "solution = " + solution + " " + - "WHERE id = " + id + " AND uid = " + uid); + const query = + "UPDATE Problems SET " + + "fen = '" + fen + "', " + + "instructions = ?, " + + "solution = ? " + + "WHERE id = " + id + " AND uid = " + uid; + db.run(query, [instructions,solution], cb); }); } exports.remove = function(id, uid) { db.serialize(function() { - db.run( + const query = "DELETE FROM Problems " + - "WHERE id = " + id + " AND uid = " + uid); + "WHERE id = " + id + " AND uid = " + uid; + db.run(query); }); }