mirror of
https://github.com/oxen-io/session-open-group-server-legacy.git
synced 2023-12-13 21:10:18 +01:00
make getUsers handle usernames and ids
This commit is contained in:
parent
17b9ec9b36
commit
a175c05012
1 changed files with 43 additions and 21 deletions
|
@ -19,29 +19,51 @@ const getUser = (userid) => {
|
|||
});
|
||||
};
|
||||
|
||||
const getUsers = (userids) => {
|
||||
return new Promise((res, rej) => {
|
||||
const getUsers = async (userids) => {
|
||||
const count = userids.length;
|
||||
let results = [];
|
||||
let requests = 0;
|
||||
let responses = 0;
|
||||
let next200 = userids.splice(0, 200);
|
||||
const promises = [];
|
||||
while(next200.length) {
|
||||
requests++;
|
||||
|
||||
// allow them to overlap
|
||||
cache.getUsers(next200, {}, (users, err) => {
|
||||
// partition next200
|
||||
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) {
|
||||
return rej(err);
|
||||
return reject(err);
|
||||
}
|
||||
results = results.concat(users);
|
||||
responses++;
|
||||
if (requests === responses) {
|
||||
return res(results);
|
||||
}
|
||||
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) => {
|
||||
|
|
Loading…
Reference in a new issue