Commit | Line | Data |
---|---|---|
00f2759e BA |
1 | var 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 | ||
24 | exports.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 | |
46 | exports.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 | ||
89 | exports.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 | } |