make getUsers handle usernames and ids

This commit is contained in:
Ryan Tharp 2020-01-06 23:55:30 +00:00
parent 17b9ec9b36
commit a175c05012

View file

@ -19,29 +19,51 @@ const getUser = (userid) => {
}); });
}; };
const getUsers = (userids) => { const getUsers = async (userids) => {
return new Promise((res, rej) => { const count = userids.length;
let results = []; let results = [];
let requests = 0;
let responses = 0;
let next200 = userids.splice(0, 200); let next200 = userids.splice(0, 200);
const promises = [];
while(next200.length) { while(next200.length) {
requests++;
// allow them to overlap // partition next200
cache.getUsers(next200, {}, (users, err) => { const [intList, userList] = next200.reduce((result, user) => {
const isUsername = user[0] === '@';
result[isUsername ? 1 : 0].push(isUsername ? user.substr(1) : user)
return result
}, [[], []]);
// handle integer lookups
if (intList.length) {
promises.push(new Promise( (resolve, reject) => {
cache.getUsers(intList, {}, (users, err) => {
if (err) { if (err) {
return rej(err); return reject(err);
} }
results = results.concat(users); results = results.concat(users);
responses++; return resolve(results);
if (requests === responses) {
return res(results);
}
}); });
}));
}
// handle username lookups
userList.forEach(username => {
promises.push(new Promise((resolve, reject) => {
cache.getUserID(username, (userObj, err) => {
if (err) {
return reject(err);
}
results = results.concat([userObj]);
return resolve(results);
});
}));
});
next200 = userids.splice(0, 200); next200 = userids.splice(0, 200);
} }
}); // console.log('getUsers awaiting', promises.length, 'promises for', count, 'user object lookups');
await Promise.all(promises);
return results; // array of model constructors
}; };
const validGlobal = (token, res, cb) => { const validGlobal = (token, res, cb) => {