Some thoughts in views/Hall.js
[vchess.git] / server / routes / challenges.js
index 1348cf4..2ae1327 100644 (file)
@@ -15,83 +15,37 @@ router.post("/challenges", access.logged, access.ajax, (req,res) => {
   const error = ChallengeModel.checkChallenge(req.body.chall);
   if (!!error)
     return res.json({errmsg:error});
-  const challenge =
+  let challenge =
   {
     fen: req.body.chall.fen,
     timeControl: req.body.chall.timeControl,
     vid: req.body.chall.vid,
     uid: req.userId,
-    nbPlayers: req.body.chall.to.length,
+    to: req.body.chall.to, //string: user name (may be empty)
   };
-  ChallengeModel.create(challenge, (err,lastId) => {
-    if (!!err)
-      return res.json(err);
-    if (!!req.body.chall.to[0])
-    {
-      UserModel.getByName(req.body.chall.to, (err,users) => {
-        if (!!err)
-          return res.json(err);
-        if (users.length < req.body.chall.to.length)
-          return res.json({errmsg: "Typo in player(s) name(s)"});
-        ChallengeModel.initializeWillPlay(
-          users.map(u => u.id),
-          lastId["rowid"],
-          (err) => {
-            if (!!err)
-              return res.json(err);
-            res.json({cid: lastId["rowid"]});
-          }
-        );
-      });
-    }
-    else
-      res.json({cid: lastId["rowid"]});
-  });
-});
-
-// Nothing to do if challenge is refused (just removal)
-router.put("/challenges", access.logged, access.ajax, (req,res) => {
-  // Accept challenge: turn WillPlay to true; if then challenge is full, launch game
-  ChallengeModel.getSeatCount(req.body.id, (scount) => {
-    if (scount == 1)
-      launchGame(req.body.id, req.userId);
-    else
-      ChallengeModel.setSeat(req.body.id, req.userId);
-  });
-  res.json({});
+  const insertChallenge = () => {
+    ChallengeModel.create(challenge, (err) => {
+      if (!!err)
+        return res.json(err);
+    });
+  };
+  if (!!req.body.chall.to)
+  {
+    UserModel.getOne("name", challenge.to, (err,user) => {
+      if (!!err || !user)
+        return res.json(err | {errmsg: "Typo in player name"});
+      challenge.to = user.id; //ready now to insert challenge
+    });
+    insertChallenge();
+  }
+  else
+    insertChallenge();
 });
 
-function launchGame(cid, uid)
-{
-  // TODO: gather challenge infos + WillPlay
-  // Then create game, and remove challenge + WillPlay
-}
-
-//// index
-//router.get("/challenges", access.logged, access.ajax, (req,res) => {
-//  if (req.query["uid"] != req.user._id)
-//    return res.json({errmsg: "Not your challenges"});
-//  let uid = ObjectID(req.query["uid"]);
-//  ChallengeModel.getByPlayer(uid, (err, challengeArray) => {
-//    res.json(err || {challenges: challengeArray});
-//  });
-//});
-//
-//function createChallenge(vid, from, to, res)
-//{
-//  ChallengeModel.create(vid, from, to, (err, chall) => {
-//    res.json(err || {
-//      // A challenge can be sent using only name, thus 'to' is returned
-//      to: chall.to,
-//      cid: chall._id
-//    });
-//  });
-//}
-
 router.delete("/challenges", access.logged, access.ajax, (req,res) => {
   const cid = req.query.id;
   ChallengeModel.remove(cid, req.userId, err => {
-    res.json(err || {});
+    res.json(err || {}); //TODO: just "return err" because is empty if no errors
   });
 });