* vid: integer (variant id)
* fenStart: varchar (initial position)
* fen: varchar (current position)
- * mainTime: integer
- * addTime: integer (increment)
+ * timeControl: string
* score: varchar (result)
*
* Structure table Players:
const GameModel =
{
- // mainTime and increment in milliseconds
- create: function(vid, fen, mainTime, increment, players, cb)
+ create: function(vid, fen, timeControl, players, cb)
{
db.serialize(function() {
let query =
- "INSERT INTO Games (vid, fen, mainTime, addTime) " +
- "VALUES (" + vid + ",'" + fen + "'," + mainTime + "," + increment + ")";
- db.run(insertQuery, err => {
+ "INSERT INTO Games (vid, fenStart, score, timeControl) " +
+ "VALUES (" + vid + ",'" + fen + "','*','" + timeControl + "')";
+ db.run(query, function(err) {
if (!!err)
return cb(err);
- db.get("SELECT last_insert_rowid() AS rowid", (err2,lastId) => {
- players.forEach(p => {
- query =
- "INSERT INTO Players VALUES " +
- "(" + lastId["rowid"] + "," + p.id + "," + p.color + "," + mainTime + ")";
- db.run(query, cb);
- });
- });
+ players.forEach((p,idx) => {
+ const color = (idx==0 ? "w" : "b");
+ query =
+ "INSERT INTO Players VALUES " +
+ // Remaining time = -1 means "unstarted"
+ "(" + this.lastID + "," + p.id + ",'" + color + "', -1)";
+ db.run(query);
+ });
+ cb(null, {gid: this.lastID});
});
});
},
{
db.serialize(function() {
let query =
- "SELECT v.name AS vname, g.fen, g.fenStart, g.score " +
- "FROM Games g " +
- "JOIN Variants v " +
- " ON g.vid = v.id "
+ "SELECT * " +
+ "FROM Games " +
"WHERE id = " + id;
db.get(query, (err,gameInfo) => {
if (!!err)
return cb(err);
query =
- "SELECT p.uid AS id, p.color, p.rtime, u.name " +
- "FROM Players p " +
- "JOIN Users u " +
- " ON p.uid = u.id " +
- "WHERE p.gid = " + id;
- db.run(query, (err2,players) => {
+ "SELECT uid, color, rtime " +
+ "FROM Players " +
+ "WHERE gid = " + id;
+ db.all(query, (err2,players) => {
if (!!err2)
return cb(err2);
query =
- "SELECT move AS desc, message, played, idx, color " +
+ "SELECT move, message, played, idx, color " +
"FROM Moves " +
"WHERE gid = " + id;
- db.run(query, (err3,moves) => {
+ db.all(query, (err3,moves) => {
if (!!err3)
return cb(err3);
- const game = {
- id: id,
- vname: gameInfo.vname,
- fenStart: gameInfo.fenStart,
- fen: gameInfo.fen,
- score: gameInfo.score,
- players: players,
- moves: moves,
- };
+ const game = Object.assign({},
+ gameInfo,
+ {
+ players: players,
+ moves: moves
+ }
+ );
return cb(null, game);
});
});
db.run(query, (err,gameIds) => {
if (!!err)
return cb(err);
+ gameIds = gameIds || []; //might be empty
let gameArray = [];
gameIds.forEach(gidRow => {
GameModel.getOne(gidRow["gid"], (err2,game) => {
});
},
+ getPlayers: function(id, cb)
+ {
+ db.serialize(function() {
+ const query =
+ "SELECT id " +
+ "FROM Players " +
+ "WHERE gid = " + id;
+ db.all(query, (err,players) => {
+ return cb(err, players);
+ });
+ });
+ },
+
+ // obj can have fields move, fen and/or score
+ update: function(id, obj, cb)
+ {
+ db.serialize(function() {
+ let query =
+ "UPDATE Games " +
+ "SET ";
+ if (!!obj.move)
+ query += "move = " + obj.move + ","; //TODO: already stringified?!
+ if (!!obj.fen)
+ query += "fen = " + obj.fen + ",";
+ if (!!obj.score)
+ query += "score = " + obj.score + ",";
+ query = query.slice(0,-1); //remove last comma
+ query += " WHERE gameId = " + id;
+ db.run(query, (err) => {
+ cb(err);
+ });
+ });
+ },
+
remove: function(id)
{
db.parallelize(function() {