Fix challenges retrieval from server
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 29 Nov 2019 13:57:04 +0000 (14:57 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 29 Nov 2019 13:57:04 +0000 (14:57 +0100)
client/src/views/Hall.vue
server/models/User.js
server/models/Variant.js
server/routes/users.js

index fb3ed63..4c80803 100644 (file)
@@ -148,8 +148,10 @@ export default {
           const uids = response.challenges.map(c => { return c.uid });
           ajax("/users",
             "GET",
-            { ids: uids },
-            names => {
+            { ids: uids.join(",") },
+            response2 => {
+              let names = {};
+              response2.users.forEach(u => {names[u.id] = u.name});
               this.challenges = this.challenges.concat(
                 response.challenges.map(c => {
                   // (just players names in fact)
@@ -163,6 +165,23 @@ export default {
           );
         }
       );
+      // TODO: I don't like this code below; improvement?
+      let retryForVnames = setInterval(() => {
+        if (this.st.variants.length > 0) //variants array is loaded
+        {
+          if (this.games.length > 0 && this.games[0].vname == "")
+          {
+            // Fix games' vnames:
+            this.games.forEach(g => { g.vname = this.getVname(g.vid); });
+          }
+          if (this.challenges.length > 0 && this.challenges[0].vname == "")
+          {
+            // Fix challenges' vnames:
+            this.challenges.forEach(c => { c.vname = this.getVname(c.vid); });
+          }
+          clearInterval(retryForVnames);
+        }
+      }, 50);
     }
     // 0.1] Ask server for room composition:
     const funcPollClients = () => {
@@ -207,7 +226,7 @@ export default {
     // TODO: ...filter(...)[0].name, one-line, just remove this function
     getVname: function(vid) {
       const vIdx = this.st.variants.findIndex(v => v.id == vid);
-      return this.st.variants[vIdx].name;
+      return vIdx >= 0 ? this.st.variants[vIdx].name : "";
     },
     getSid: function(pname) {
       const pIdx = this.people.findIndex(pl => pl.name == pname);
index 7a0f70a..6058427 100644 (file)
@@ -63,14 +63,14 @@ const UserModel =
                });
        },
 
-  getByName: function(names, cb) {
-               db.serialize(function() {
-                       const query =
-                               "SELECT id " +
+  getByIds: function(ids, cb) {
+    db.serialize(function() {
+      const query =
+        "SELECT id, name " +
         "FROM Users " +
-                               "WHERE name IN ('" + names.join("','") + "')";
-                       db.all(query, cb);
-               });
+        "WHERE id IN (" + ids + ")";
+      db.all(query, cb);
+    });
   },
 
        /////////
index 233d938..20bce4a 100644 (file)
@@ -9,17 +9,6 @@ var db = require("../utils/database");
 
 const VariantModel =
 {
-       getByName: function(name, callback)
-       {
-               db.serialize(function() {
-                       const query =
-                               "SELECT * " +
-                               "FROM Variants " +
-                               "WHERE name='" + name + "'";
-                       db.get(query, callback);
-               });
-       },
-
        getAll: function(callback)
        {
                db.serialize(function() {
index a9995d7..5b04ddd 100644 (file)
@@ -28,7 +28,12 @@ router.get("/whoami", access.ajax, (req,res) => {
 });
 
 router.get("/users", access.ajax, (req,res) => {
-  // TODO: list all names + id for users of given ID (query "ids")
+  const ids = req.query["ids"];
+  UserModel.getByIds(ids, (err,users) => {
+    if (!!err)
+      return res.json({errmsg: err.toString()});
+    return res.json({users:users});
+  });
 });
 
 // to: object user (to who we send an email)