X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=server%2Fmodels%2FChallenge.js;h=de2818baac3d461356ba60e4b8357b719450b44f;hb=77fd729819118d491ff91c1d99960add2ef9cff3;hp=96db0a2b431ad5237d8b08b4bcfceca3c4155212;hpb=625022fdcf750f0aff8fcd699f7e9b89730e1d10;p=vchess.git diff --git a/server/models/Challenge.js b/server/models/Challenge.js index 96db0a2b..de2818ba 100644 --- a/server/models/Challenge.js +++ b/server/models/Challenge.js @@ -8,35 +8,59 @@ var db = require("../utils/database"); * vid: variant id (int) * nbPlayers: integer * fen: varchar (optional) - * mainTime: integer - * addTime: integer + * timeControl: string (3m+2s, 7d+1d ...) * * Structure table WillPlay: * cid: ref challenge id * uid: ref user id + * yes: boolean (false means "not decided yet") */ const ChallengeModel = { - // fen cannot be undefined; TODO: generate fen on server instead + checkChallenge: function(c) + { + if (!c.vid.match(/^[0-9]+$/)) + return "Wrong variant ID"; + + if (!c.timeControl.match(/^[0-9dhms +]+$/)) + return "Wrong characters in time control"; + + if (!c.fen.match(/^[a-zA-Z0-9, /-]+$/)) + return "Bad FEN string"; + }, + + initializeWillPlay: function(uids, cid, cb) + { + let query = "INSERT INTO WillPlay VALUES "; + for (let i=0; i { if (!!err) return cb(err); db.get("SELECT last_insert_rowid() AS rowid", (err2,lastId) => { - query = + query = "INSERT INTO WillPlay VALUES " + - "(" + lastId["rowid"] + "," + c.uid + ")"; - db.run(query, (err,ret) => { - cb(err, lastId); //all we need is the challenge ID - }); + "(true," + lastId["rowid"] + "," + c.uid + ")"; + db.run(query, (err,ret) => { + cb(err, lastId); //all we need is the challenge ID + }); }); }); }); @@ -71,8 +95,7 @@ const ChallengeModel = nbPlayers: challengeInfo.nbPlayers, players: players, //currently in fen: challengeInfo.fen, - mainTime: challengeInfo.mainTime, - increment: challengeInfo.addTime, + timeControl: challengeInfo.timeControl, }; return cb(null, challenge); }); @@ -103,17 +126,22 @@ const ChallengeModel = }); }, - remove: function(id) + remove: function(id, uid) { - db.parallelize(function() { + db.serialize(function() { let query = "DELETE FROM Challenges " + - "WHERE id = " + id; - db.run(query); - query = - "DELETE FROM WillPlay " + - "WHERE cid = " + id; - db.run(query); + "WHERE id = " + id + " AND uid = " + uid; + db.run(query, (err,ret) => { + if (!err && ret >= 1) + { + // Also remove matching WillPlay entries if a challenge was deleted + query = + "DELETE FROM WillPlay " + + "WHERE cid = " + id; + db.run(query); + } + }); }); }, }