X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=models%2FChallenge.js;h=96db0a2b431ad5237d8b08b4bcfceca3c4155212;hb=b955c65b942d09d24b5c3bed0d755d4f2f8f71f1;hp=adb40224b873209fa7fa239c702077d73117f51f;hpb=00f2759e16ec73fa1ecd0254a9c9018530d71892;p=vchess.git diff --git a/models/Challenge.js b/models/Challenge.js index adb40224..96db0a2b 100644 --- a/models/Challenge.js +++ b/models/Challenge.js @@ -7,76 +7,115 @@ var db = require("../utils/database"); * uid: user id (int) * vid: variant id (int) * nbPlayers: integer + * fen: varchar (optional) + * mainTime: integer + * addTime: integer * * Structure table WillPlay: * cid: ref challenge id * uid: ref user id */ -exports.create = function(uid, vid, nbPlayers, cb) +const ChallengeModel = { - db.serialize({ - let query = - "INSERT INTO Challenges (added, uid, vid, nbPlayers) " + - "VALUES (" + Date.now() + "," + uid + "," + vid + "," + nbPlayers + ")"; - db.run(insertQuery, err => { - if (!!err) - return cb(err); - db.get("SELECT last_insert_rowid() AS rowid", (err2,lastId) => { + // fen cannot be undefined; TODO: generate fen on server instead + create: function(c, cb) + { + db.serialize(function() { + let query = + "INSERT INTO Challenges " + + "(added, uid, vid, nbPlayers, fen, mainTime, addTime) VALUES " + + "(" + Date.now() + "," + c.uid + "," + c.vid + "," + c.nbPlayers + + ",'" + c.fen + "'," + c.mainTime + "," + c.increment + ")"; + db.run(query, err => { + if (!!err) + return cb(err); + db.get("SELECT last_insert_rowid() AS rowid", (err2,lastId) => { + query = + "INSERT INTO WillPlay VALUES " + + "(" + lastId["rowid"] + "," + c.uid + ")"; + db.run(query, (err,ret) => { + cb(err, lastId); //all we need is the challenge ID + }); + }); + }); + }); + }, + + getOne: function(id, cb) + { + db.serialize(function() { + let query = + "SELECT * " + + "FROM Challenges c " + + "JOIN Variants v " + + " ON c.vid = v.id " + "WHERE id = " + id; + db.get(query, (err,challengeInfo) => { + if (!!err) + return cb(err); query = - "INSERT INTO WillPlay VALUES " + - "(" + lastId["rowid"] + "," + uid + ")"; - db.run(query, cb); + "SELECT w.uid AS id, u.name " + + "FROM WillPlay w " + + "JOIN Users u " + + " ON w.uid = u.id " + + "WHERE w.cid = " + id; + db.run(query, (err2,players) => { + if (!!err2) + return cb(err2); + const challenge = { + id: id, + uid: challengeInfo.uid, + vname: challengeInfo.name, + added: challengeInfo.added, + nbPlayers: challengeInfo.nbPlayers, + players: players, //currently in + fen: challengeInfo.fen, + mainTime: challengeInfo.mainTime, + increment: challengeInfo.addTime, + }; + return cb(null, challenge); }); }); }); - }); -} + }, -exports.getOne = function(id, cb) -{ - db.serialize(function() { - let query = - "SELECT * " + - "FROM Challenges c " + - "JOIN Variants v " + - " ON c.vid = v.id " - "WHERE id = " + id; - db.get(query, (err,challengeInfo) => { - if (!!err) - return cb(err); - query = - "SELECT w.uid AS id, u.name " + - "FROM WillPlay w " + - "JOIN Users u " + - " ON w.uid = u.id " + - "WHERE w.cid = " + id; - db.run(query, (err2,players) => { - if (!!err2) - return cb(err2); - const challenge = { - id: id, - vname: challengeInfo.name, - added: challengeInfo.added, - nbPlayers: challengeInfo.nbPlayers, - players: players, //currently in - }; - return cb(null, challenge); + getByUser: function(uid, cb) + { + db.serialize(function() { + const query = + "SELECT cid " + + "FROM WillPlay " + + "WHERE uid = " + uid; + db.run(query, (err,challIds) => { + if (!!err) + return cb(err); + let challenges = []; + challIds.forEach(cidRow => { + ChallengeModel.getOne(cidRow["cid"], (err2,chall) => { + if (!!err2) + return cb(err2); + challenges.push(chall); + }); + }); + return cb(null, challenges); }); }); - }); -} + }, -exports.remove = function(id) -{ - db.parallelize(function() { - let query = - "DELETE FROM Challenges " + - "WHERE id = " + id; - db.run(query); - query = - "DELETE FROM WillPlay " + - "WHERE cid = " + id; - db.run(query); - }); + remove: function(id) + { + db.parallelize(function() { + let query = + "DELETE FROM Challenges " + + "WHERE id = " + id; + db.run(query); + query = + "DELETE FROM WillPlay " + + "WHERE cid = " + id; + db.run(query); + }); + }, } + +module.exports = ChallengeModel;