X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=models%2FProblem.js;h=78586761ced8ca548706a341504b570cf85ec13d;hp=0c800901c4256014b546a9ee7e3e4af1ddf25f08;hb=fd08ab2c5b8931bb8c95cf7e9f2f95122647f991;hpb=8d7e2786f5a67a1b9a77c742d7951e0efbe8747d diff --git a/models/Problem.js b/models/Problem.js index 0c800901..78586761 100644 --- a/models/Problem.js +++ b/models/Problem.js @@ -2,7 +2,7 @@ var db = require("../utils/database"); /* * Structure: - * _id: problem number (int) + * id: problem number (int) * uid: user id (int) * vid: variant id (int) * added: timestamp @@ -10,19 +10,25 @@ var db = require("../utils/database"); * solution: text */ +// TODO: callback ? exports.create = function(vname, fen, instructions, solution) { db.serialize(function() { - db.get("SELECT id FROM Variants WHERE name = '" + vname + "'", (err,variant) => { - db.run( + const vidQuery = + "SELECT id " + + "FROM Variants " + + "WHERE name = '" + vname + "'"; + db.get(vidQuery, (err,variant) => { + const insertQuery = "INSERT INTO Problems (added, vid, fen, instructions, solution) VALUES " + "(" + Date.now() + "," + - variant._id + "," + + variant.id + "," + fen + "," + instructions + "," + solution + - ")"); + ")"; + db.run(insertQuery); }); }); } @@ -30,43 +36,59 @@ exports.create = function(vname, fen, instructions, solution) exports.getById = function(id, callback) { db.serialize(function() { - db.get( + const query = "SELECT * FROM Problems " + - "WHERE id ='" + id + "'", - callback); + "WHERE id ='" + id + "'"; + db.get(query, callback); }); } -exports.fetchN = function(vname, directionStr, lastDt, MaxNbProblems, callback) +exports.getOne = function(vname, pid, callback) { db.serialize(function() { - db.all( + const query = + "SELECT * " + + "FROM Problems " + + "WHERE id = " + pid; + db.get(query, callback); + }); +} + +exports.fetchN = function(vname, uid, type, directionStr, lastDt, MaxNbProblems, callback) +{ + db.serialize(function() { + let typeLine = ""; + if (uid > 0) + typeLine = "AND id " + (type=="others" ? "!=" : "=") + " " + uid; + const query = "SELECT * FROM Problems " + "WHERE vid = (SELECT id FROM Variants WHERE name = '" + vname + "') " + - " AND added " + directionStr + " " + lastDt + " " + + " 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) { db.serialize(function() { - db.run( + const query = "UPDATE Problems " + "fen = " + fen + ", " + "instructions = " + instructions + ", " + "solution = " + solution + " " + - "WHERE id = " + id + " AND uid = " + uid); + "WHERE id = " + id + " AND uid = " + uid; + db.run(query); }); } 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); }); }