Some advances. TODO: test board.js, and then game.js, and then implement room.js
[vchess.git] / models / Problem.js
index 0c80090..7858676 100644 (file)
@@ -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);
        });
 }