Commit | Line | Data |
---|---|---|
ab4f4bf2 | 1 | // AJAX methods to get, create, update or delete a challenge |
582df349 | 2 | |
ab4f4bf2 BA |
3 | let router = require("express").Router(); |
4 | const access = require("../utils/access"); | |
5 | const ChallengeModel = require("../models/Challenge"); | |
052d17ea | 6 | const UserModel = require("../models/User"); //for name check |
8d7e2786 | 7 | |
f05815d7 | 8 | router.get("/challenges", (req,res) => { |
4edfed6c BA |
9 | ChallengeModel.getByUser(req.query["uid"], (err,challenges) => { |
10 | res.json(err || {challenges:challenges}); | |
11 | }); | |
12 | }); | |
13 | ||
052d17ea | 14 | router.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) |
53 | router.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 | ||
72 | function 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 | |
99 | router.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 | |
106 | module.exports = router; |