From: Benjamin Auder Date: Fri, 29 Nov 2019 13:57:04 +0000 (+0100) Subject: Fix challenges retrieval from server X-Git-Url: https://git.auder.net/app_dev.php/DESCRIPTION?a=commitdiff_plain;h=ed9c9c3741ec8b03cf899eae529216a2520bba0d;p=vchess.git Fix challenges retrieval from server --- diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue index fb3ed630..4c80803a 100644 --- a/client/src/views/Hall.vue +++ b/client/src/views/Hall.vue @@ -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); diff --git a/server/models/User.js b/server/models/User.js index 7a0f70a7..60584275 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -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); + }); }, ///////// diff --git a/server/models/Variant.js b/server/models/Variant.js index 233d938b..20bce4a9 100644 --- a/server/models/Variant.js +++ b/server/models/Variant.js @@ -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() { diff --git a/server/routes/users.js b/server/routes/users.js index a9995d7f..5b04ddd1 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -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)