mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	optimized User.getUsers
This commit is contained in:
		| @@ -156,6 +156,10 @@ | ||||
| 		db.isSetMember('group:' + groupName + ':members', uid, callback); | ||||
| 	}; | ||||
|  | ||||
| 	Groups.isMembers = function(uids, groupName, callback) { | ||||
| 		db.isSetMembers('group:' + groupName + ':members', uids, callback); | ||||
| 	}; | ||||
|  | ||||
| 	Groups.isMemberOfGroups = function(uid, groups, callback) { | ||||
| 		groups = groups.map(function(groupName) { | ||||
| 			return 'group:' + groupName + ':members'; | ||||
|   | ||||
							
								
								
									
										46
									
								
								src/user.js
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								src/user.js
									
									
									
									
									
								
							| @@ -239,36 +239,32 @@ var bcrypt = require('bcryptjs'), | ||||
| 	}; | ||||
|  | ||||
| 	User.getUsers = function(uids, callback) { | ||||
| 		function loadUserInfo(user, callback) { | ||||
| 			if (!user) { | ||||
| 				return callback(null, user); | ||||
| 			} | ||||
|  | ||||
| 			async.waterfall([ | ||||
| 				function(next) { | ||||
| 					User.isAdministrator(user.uid, next); | ||||
| 		async.parallel({ | ||||
| 			userData: function(next) { | ||||
| 				User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation'], next); | ||||
| 			}, | ||||
| 				function(isAdmin, next) { | ||||
| 					user.status = !user.status ? 'online' : user.status; | ||||
| 					user.administrator = isAdmin; | ||||
| 					user.banned = parseInt(user.banned, 10) === 1; | ||||
| 					db.isSortedSetMember('users:online', user.uid, next); | ||||
| 			isAdmin: function(next) { | ||||
| 				User.isAdministrator(uids, next); | ||||
| 			}, | ||||
| 				function(isMember, next) { | ||||
| 					if (!isMember) { | ||||
| 						user.status = 'offline'; | ||||
| 			isOnline: function(next) { | ||||
| 				db.isSortedSetMembers('users:online', uids, next); | ||||
| 			} | ||||
| 					next(null, user); | ||||
| 				} | ||||
| 			], callback); | ||||
| 		} | ||||
|  | ||||
| 		User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation'], function(err, usersData) { | ||||
| 		}, function(err, results) { | ||||
| 			if (err) { | ||||
| 				return callback(err); | ||||
| 			} | ||||
|  | ||||
| 			async.map(usersData, loadUserInfo, callback); | ||||
| 			results.userData.forEach(function(user, index) { | ||||
| 				if (!user) { | ||||
| 					return; | ||||
| 				} | ||||
| 				user.status = !user.status ? 'online' : user.status; | ||||
| 				user.status = !results.isOnline[index] ? 'offline' : user.status; | ||||
| 				user.administrator = results.isAdmin[index]; | ||||
| 				user.banned = parseInt(user.banned, 10) === 1; | ||||
| 			}); | ||||
|  | ||||
| 			callback(err, results.userData); | ||||
| 		}); | ||||
| 	}; | ||||
|  | ||||
| @@ -410,7 +406,11 @@ var bcrypt = require('bcryptjs'), | ||||
| 	}; | ||||
|  | ||||
| 	User.isAdministrator = function(uid, callback) { | ||||
| 		if (Array.isArray(uid)) { | ||||
| 			groups.isMembers(uid, 'administrators', callback); | ||||
| 		} else { | ||||
| 			groups.isMember(uid, 'administrators', callback); | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	User.isOnline = function(uid, callback) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user