1 var router
= require("express").Router();
2 var UserModel
= require("../models/User");
3 var ChallengeModel
= require('../models/Challenge');
4 var GameModel
= require('../models/Game');
5 var VariantModel
= require('../models/Variant');
6 var access
= require("../utils/access");
7 var params
= require("../config/parameters");
9 // From main hall, start game between players 0 and 1
10 router
.post("/games", access
.logged
, access
.ajax
, (req
,res
) => {
11 const gameInfo
= req
.body
.gameInfo
;
12 if (!gameInfo
.players
.some(p
=> p
.id
== req
.userId
))
13 return res
.json({errmsg: "Cannot start someone else's game"});
14 const cid
= req
.body
.cid
;
15 ChallengeModel
.remove(cid
);
16 const fen
= req
.body
.fen
;
18 gameInfo
.vid
, gameInfo
.fen
, gameInfo
.timeControl
, gameInfo
.players
,
20 access
.checkRequest(res
, err
, ret
, "Cannot create game", () => {
21 const oppIdx
= (gameInfo
.players
[0].id
== req
.userId
? 1 : 0);
22 const oppId
= gameInfo
.players
[oppIdx
].id
;
23 UserModel
.tryNotify(oppId
,
24 "New game: " + params
.siteURL
+ "/game/" + ret
.gid
);
25 res
.json({gameId: ret
.gid
});
31 router
.get("/games", access
.ajax
, (req
,res
) => {
32 const gameId
= req
.query
["gid"];
35 GameModel
.getOne(gameId
, (err
,game
) => {
36 access
.checkRequest(res
, err
, game
, "Game not found", () => {
37 res
.json({game: game
});
43 // Get by (non-)user ID:
44 const userId
= req
.query
["uid"];
45 const excluded
= !!req
.query
["excluded"];
46 GameModel
.getByUser(userId
, excluded
, (err
,games
) => {
48 return res
.json({errmsg: err
.errmsg
|| err
.toString()});
49 res
.json({games: games
});
54 //////////////////////////////////
57 router
.put("/games", access
.logged
, access
.ajax
, (req
,res
) => {
58 let gid
= ObjectId(req
.body
.gid
);
59 let result
= req
.body
.result
;
60 // NOTE: only game-level life update is "gameover"
61 GameModel
.gameOver(gid
, result
, ObjectId(req
.userId
), (err
,game
) => {
62 access
.checkRequest(res
, err
, game
, "Cannot find game", () => {
68 // TODO: if newmove fail, takeback in GUI
69 // TODO: check move structure
70 // TODO: move should contain an optional "message" field ("corr chat" !)
71 router
.post("/moves", access
.logged
, access
.ajax
, (req
,res
) => {
72 let gid
= ObjectId(req
.body
.gid
);
73 let fen
= req
.body
.fen
;
74 let vname
= req
.body
.vname
; //defined only if !!offlineOpp
75 // NOTE: storing the moves encoded lead to double stringify --> error at parsing
76 let move = JSON
.parse(req
.body
.move);
77 GameModel
.addMove(gid
, move, fen
, req
._user
._id
, (err
,game
) => {
78 access
.checkRequest(res
, err
, game
, "Cannot find game", () => {
79 if (!!req
.body
.offlineOpp
)
80 UserModel
.tryNotify(ObjectId(req
.body
.offlineOpp
), gid
, vname
, "New move");
86 module
.exports
= router
;