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 next200 = userids.splice(0, 200);
let responses = 0; const promises = [];
let next200 = userids.splice(0, 200); 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) => {
if (err) { const isUsername = user[0] === '@';
return rej(err); result[isUsername ? 1 : 0].push(isUsername ? user.substr(1) : user)
} return result
results = results.concat(users); }, [[], []]);
responses++;
if (requests === responses) { // handle integer lookups
return res(results); if (intList.length) {
} promises.push(new Promise( (resolve, reject) => {
}); cache.getUsers(intList, {}, (users, err) => {
next200 = userids.splice(0, 200); if (err) {
return reject(err);
}
results = results.concat(users);
return resolve(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);
}
// 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) => {