Draft Game and Challenge models
[vchess.git] / models / Game.js
CommitLineData
00f2759e
BA
1var db = require("../utils/database");
2
3/*
4 * Structure table Games:
5 * id: game id (int)
6 * vid: integer (variant id)
7 * fen: varchar (initial position)
8 * mainTime: integer
9 * increment: integer
10 * score: varchar (result)
11 *
12 * Structure table Players:
13 * gid: ref game id
14 * uid: ref user id
15 * color: character
16 *
17 * Structure table Moves:
18 * move: varchar (description)
19 * played: datetime
20 * idx: integer
21 * color: character
22 */
23
24exports.create = function(vid, fen, mainTime, increment, players, cb)
25{
26 db.serialize({
27 let query =
28 "INSERT INTO Games (vid, fen, mainTime, increment) " +
29 "VALUES (" + vid + ",'" + fen + "'," + mainTime + "," + increment + ")";
30 db.run(insertQuery, err => {
31 if (!!err)
32 return cb(err);
33 db.get("SELECT last_insert_rowid() AS rowid", (err2,lastId) => {
34 players.forEach(p => {
35 query =
36 "INSERT INTO Players VALUES " +
37 "(" + lastId["rowid"] + "," + p.id + "," + p.color + ")";
38 db.run(query, cb);
39 });
40 });
41 });
42 });
43}
44
45// TODO: queries here could be async, and wait for all to complete
46exports.getOne = function(id, cb)
47{
48 db.serialize(function() {
49 let query =
50 "SELECT v.name AS vname, g.fen, g.score " +
51 "FROM Games g " +
52 "JOIN Variants v " +
53 " ON g.vid = v.id "
54 "WHERE id = " + id;
55 db.get(query, (err,gameInfo) => {
56 if (!!err)
57 return cb(err);
58 query =
59 "SELECT p.uid AS id, p.color, u.name " +
60 "FROM Players p " +
61 "JOIN Users u " +
62 " ON p.uid = u.id " +
63 "WHERE p.gid = " + id;
64 db.run(query, (err2,players) => {
65 if (!!err2)
66 return cb(err2);
67 query =
68 "SELECT move AS desc, played, idx, color " +
69 "FROM Moves " +
70 "WHERE gid = " + id;
71 db.run(query, (err3,moves) => {
72 if (!!err3)
73 return cb(err3);
74 const game = {
75 id: id,
76 vname: gameInfo.vname,
77 fen: gameInfo.fen,
78 score: gameInfo.score,
79 players: players,
80 moves: moves,
81 };
82 return cb(null, game);
83 });
84 });
85 });
86 });
87}
88
89exports.remove = function(id)
90{
91 db.parallelize(function() {
92 let query =
93 "DELETE FROM Games " +
94 "WHERE id = " + id;
95 db.run(query);
96 query =
97 "DELETE FROM Players " +
98 "WHERE gid = " + id;
99 db.run(query);
100 query =
101 "DELETE FROM Moves " +
102 "WHERE gid = " + id;
103 db.run(query);
104 });
105}