/*
* Structure:
- * _id: problem number (int)
+ * id: problem number (int)
* uid: user id (int)
* vid: variant id (int)
* added: timestamp
* 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);
});
});
}
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);
});
}