X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=server%2Fmodels%2FGame.js;h=f05d2fec82d8f8955feb93ba7503e39bfded4fdd;hb=81b71035639a4204bd7834c9185ea961755af1cf;hp=5304693096bb11bfffa4cbbc64b20074fd5abe2a;hpb=d807470f965d4d60a7fe6e1320ac7dfd3f0ea03f;p=vchess.git diff --git a/server/models/Game.js b/server/models/Game.js index 53046930..f05d2fec 100644 --- a/server/models/Game.js +++ b/server/models/Game.js @@ -15,7 +15,7 @@ const UserModel = require("./User"); * created: datetime * drawOffer: char ('w','b' or '' for none) * rematchOffer: char (similar to drawOffer) - * randomness: integer + * options: varchar * deletedByWhite: boolean * deletedByBlack: boolean * chatReadWhite: datetime @@ -40,7 +40,6 @@ const GameModel = { return ( g.vid.toString().match(/^[0-9]+$/) && g.cadence.match(/^[0-9dhms +]+$/) && - g.randomness.toString().match(/^[0-2]$/) && g.fen.match(/^[a-zA-Z0-9, /-]*$/) && g.players.length == 2 && g.players.every(p => p.id.toString().match(/^[0-9]+$/)) @@ -57,22 +56,22 @@ const GameModel = { }); }, - create: function(vid, fen, randomness, cadence, players, cb) { + create: function(vid, fen, options, cadence, players, cb) { db.serialize(function() { let query = "INSERT INTO Games " + "(" + - "vid, fenStart, fen, randomness, " + + "vid, fenStart, fen, options, " + "white, black, " + "cadence, created" + ") " + "VALUES " + "(" + - vid + ",'" + fen + "','" + fen + "'," + randomness + "," + + vid + ",'" + fen + "','" + fen + "',?," + players[0].id + "," + players[1].id + "," + "'" + cadence + "'," + Date.now() + ")"; - db.run(query, function(err) { + db.run(query, options, function(err) { cb(err, { id: this.lastID }); }); }); @@ -85,7 +84,7 @@ const GameModel = { let query = "SELECT " + "id, vid, fen, fenStart, cadence, created, " + - "white, black, randomness, score, scoreMsg, " + + "white, black, options, score, scoreMsg, " + "chatReadWhite, chatReadBlack, drawOffer, rematchOffer " + "FROM Games " + "WHERE id = " + id; @@ -133,7 +132,7 @@ const GameModel = { getObserved: function(uid, cursor, cb) { db.serialize(function() { let query = - "SELECT id, vid, cadence, created, score, white, black " + + "SELECT id, vid, cadence, options, created, score, white, black " + "FROM Games " + "WHERE created < " + cursor + " "; if (uid > 0) { @@ -145,6 +144,7 @@ const GameModel = { "ORDER BY created DESC " + "LIMIT 20"; //TODO: 20 hard-coded... db.all(query, (err, games) => { + games = games || []; // Query players names let pids = {}; games.forEach(g => { @@ -152,6 +152,7 @@ const GameModel = { if (!pids[g.black]) pids[g.black] = true; }); UserModel.getByIds(Object.keys(pids), (err2, users) => { + users = users || []; let names = {}; users.forEach(u => { names[u.id] = u.name; }); cb( @@ -162,6 +163,7 @@ const GameModel = { id: g.id, vid: g.vid, cadence: g.cadence, + options: g.options, created: g.created, score: g.score, players: [ @@ -181,10 +183,11 @@ const GameModel = { getRunning: function(uid, cb) { db.serialize(function() { let query = - "SELECT id, vid, cadence, created, white, black " + + "SELECT id, vid, cadence, options, created, white, black " + "FROM Games " + "WHERE score = '*' AND (white = " + uid + " OR black = " + uid + ")"; db.all(query, (err, games) => { + games = games || []; // Get movesCount (could be done in // with next query) query = "SELECT gid, COUNT(*) AS nbMoves " + @@ -201,6 +204,7 @@ const GameModel = { if (!pids[g.black]) pids[g.black] = true; }); UserModel.getByIds(Object.keys(pids), (err2, users) => { + users = users || []; let names = {}; users.forEach(u => { names[u.id] = u.name; }); cb( @@ -211,6 +215,7 @@ const GameModel = { id: g.id, vid: g.vid, cadence: g.cadence, + options: g.options, created: g.created, score: g.score, movesCount: movesCounts[g.id] || 0, @@ -232,7 +237,7 @@ const GameModel = { getCompleted: function(uid, cursor, cb) { db.serialize(function() { let query = - "SELECT id, vid, cadence, created, score, scoreMsg, " + + "SELECT id, vid, cadence, options, created, score, scoreMsg, " + "white, black, deletedByWhite, deletedByBlack " + "FROM Games " + "WHERE " + @@ -253,6 +258,7 @@ const GameModel = { "ORDER BY created DESC " + "LIMIT 20"; db.all(query, (err, games) => { + games = games || []; // Query player names let pids = {}; games.forEach(g => { @@ -260,6 +266,7 @@ const GameModel = { if (!pids[g.black]) pids[g.black] = true; }); UserModel.getByIds(Object.keys(pids), (err2, users) => { + users = users || []; let names = {}; users.forEach(u => { names[u.id] = u.name; }); cb( @@ -270,6 +277,7 @@ const GameModel = { id: g.id, vid: g.vid, cadence: g.cadence, + options: g.options, created: g.created, score: g.score, scoreMsg: g.scoreMsg,