Refactor endgame process, start working on game end (abort)
[vchess.git] / server / routes / challenges.js
CommitLineData
ab4f4bf2 1// AJAX methods to get, create, update or delete a challenge
582df349 2
ab4f4bf2
BA
3let router = require("express").Router();
4const access = require("../utils/access");
5const ChallengeModel = require("../models/Challenge");
052d17ea 6const UserModel = require("../models/User"); //for name check
8d7e2786 7
f05815d7 8router.get("/challenges", (req,res) => {
4edfed6c
BA
9 ChallengeModel.getByUser(req.query["uid"], (err,challenges) => {
10 res.json(err || {challenges:challenges});
11 });
12});
13
052d17ea 14router.post("/challenges", access.logged, access.ajax, (req,res) => {
1f49533d
BA
15 const error = ChallengeModel.checkChallenge(req.body.chall);
16 if (!!error)
17 return res.json({errmsg:error});
18 const challenge =
19 {
20 fen: req.body.chall.fen,
21 timeControl: req.body.chall.timeControl,
22 vid: req.body.chall.vid,
23 uid: req.userId,
24 nbPlayers: req.body.chall.to.length,
25 };
26 ChallengeModel.create(challenge, (err,lastId) => {
27 if (!!err)
28 return res.json(err);
29 if (!!req.body.chall.to[0])
30 {
31 UserModel.getByName(req.body.chall.to, (err,users) => {
32 if (!!err)
33 return res.json(err);
34 if (users.length < req.body.chall.to.length)
35 return res.json({errmsg: "Typo in player(s) name(s)"});
36 ChallengeModel.initializeWillPlay(
37 users.map(u => u.id),
38 lastId["rowid"],
39 (err) => {
40 if (!!err)
41 return res.json(err);
42 res.json({cid: lastId["rowid"]});
43 }
44 );
45 });
46 }
47 else
48 res.json({cid: lastId["rowid"]});
49 });
8d7e2786
BA
50});
51
4edfed6c
BA
52// Nothing to do if challenge is refused (just removal)
53router.put("/challenges", access.logged, access.ajax, (req,res) => {
54 switch (req.body.action)
55 {
56 case "withdraw":
57 // turn WillPlay to false (TODO?)
58 break;
59 case "accept":
60 // turn WillPlay to true; if then challenge is full, launch game
61 ChallengeModel.getSeatCount(req.body.id, (scount) => {
62 if (scount == 1)
63 launchGame(req.body.id, req.userId);
64 else
65 ChallengeModel.setSeat(req.body.id, req.userId);
66 })
67 break;
68 }
69 res.json({});
70});
71
72function launchGame(cid, uid)
73{
74 // TODO: gather challenge infos + WillPlay
75 // Then create game, and remove challenge + WillPlay
76}
77
ab4f4bf2 78//// index
f4f4c03c 79//router.get("/challenges", access.logged, access.ajax, (req,res) => {
1f49533d
BA
80// if (req.query["uid"] != req.user._id)
81// return res.json({errmsg: "Not your challenges"});
82// let uid = ObjectID(req.query["uid"]);
83// ChallengeModel.getByPlayer(uid, (err, challengeArray) => {
84// res.json(err || {challenges: challengeArray});
85// });
ab4f4bf2
BA
86//});
87//
88//function createChallenge(vid, from, to, res)
89//{
1f49533d
BA
90// ChallengeModel.create(vid, from, to, (err, chall) => {
91// res.json(err || {
92// // A challenge can be sent using only name, thus 'to' is returned
93// to: chall.to,
94// cid: chall._id
95// });
96// });
ab4f4bf2 97//}
1f49533d
BA
98
99router.delete("/challenges", access.logged, access.ajax, (req,res) => {
77fd7298 100 const cid = req.query.id;
1f49533d
BA
101 ChallengeModel.remove(cid, req.userId, err => {
102 res.json(err || {});
103 });
104});
8d7e2786
BA
105
106module.exports = router;