mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-30 18:46:01 +01:00
added getObjectsFields methods to db class, changed getUsers methods to use the new method, refactor to user.js and mongo.js
This commit is contained in:
@@ -111,7 +111,7 @@ define(function() {
|
|||||||
|
|
||||||
function onUsersLoaded(users, emptyContainer) {
|
function onUsersLoaded(users, emptyContainer) {
|
||||||
templates.preload_template('users', function() {
|
templates.preload_template('users', function() {
|
||||||
templates['useres'].parse({users:[]});
|
templates['users'].parse({users:[]});
|
||||||
var html = templates.prepare(templates['users'].blocks['users']).parse({
|
var html = templates.prepare(templates['users'].blocks['users']).parse({
|
||||||
users: users
|
users: users
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -130,7 +130,11 @@ accountsController.getAccount = function(req, res, next) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
user.isFollowing(callerUID, userData.theirid, function (isFollowing) {
|
user.isFollowing(callerUID, userData.theirid, function (err, isFollowing) {
|
||||||
|
if(err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
posts.getPostsByUid(callerUID, userData.theirid, 0, 9, function (err, userPosts) {
|
posts.getPostsByUid(callerUID, userData.theirid, 0, 9, function (err, userPosts) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ topicsController.get = function(req, res, next) {
|
|||||||
if (parseInt(topicData.deleted, 10) === 1 && parseInt(topicData.expose_tools, 10) === 0) {
|
if (parseInt(topicData.deleted, 10) === 1 && parseInt(topicData.expose_tools, 10) === 0) {
|
||||||
return next(new Error('Topic deleted'), null);
|
return next(new Error('Topic deleted'), null);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
topicData.currentPage = page;
|
topicData.currentPage = page;
|
||||||
|
}
|
||||||
next(err, topicData);
|
next(err, topicData);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -100,6 +100,26 @@
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fieldToString(field) {
|
||||||
|
if(field === null || field === undefined) {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof field !== 'string') {
|
||||||
|
field = field.toString();
|
||||||
|
}
|
||||||
|
// if there is a '.' in the field name it inserts subdocument in mongo, replace '.'s with \uff0E
|
||||||
|
field = field.replace(/\./g, '\uff0E');
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
function toString(value) {
|
||||||
|
if(value === null || value === undefined) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.toString();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Exported functions
|
// Exported functions
|
||||||
@@ -235,11 +255,7 @@
|
|||||||
|
|
||||||
module.setObjectField = function(key, field, value, callback) {
|
module.setObjectField = function(key, field, value, callback) {
|
||||||
var data = {};
|
var data = {};
|
||||||
if(typeof field !== 'string') {
|
field = fieldToString(field);
|
||||||
field = field.toString();
|
|
||||||
}
|
|
||||||
// if there is a '.' in the field name it inserts subdocument in mongo, replace '.'s with \uff0E
|
|
||||||
field = field.replace(/\./g, '\uff0E');
|
|
||||||
data[field] = value;
|
data[field] = value;
|
||||||
db.collection('objects').update({_key:key}, {$set:data}, {upsert:true, w: 1}, function(err, result) {
|
db.collection('objects').update({_key:key}, {$set:data}, {upsert:true, w: 1}, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
@@ -271,51 +287,69 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.getObjectField = function(key, field, callback) {
|
module.getObjectField = function(key, field, callback) {
|
||||||
if(typeof field !== 'string') {
|
field = fieldToString(field);
|
||||||
field = field.toString();
|
|
||||||
}
|
|
||||||
field = field.replace(/\./g, '\uff0E');
|
|
||||||
module.getObjectFields(key, [field], function(err, data) {
|
module.getObjectFields(key, [field], function(err, data) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, data[field]);
|
callback(null, data ? data[field] : null);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.getObjectFields = function(key, fields, callback) {
|
module.getObjectFields = function(key, fields, callback) {
|
||||||
|
module.getObjectsFields([key], fields, function(err, items) {
|
||||||
|
callback(err, items ? items[0] : null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.getObjectsFields = function(keys, fields, callback) {
|
||||||
|
|
||||||
var _fields = {
|
var _fields = {
|
||||||
_id: 0
|
_id: 0,
|
||||||
|
_key: 1
|
||||||
};
|
};
|
||||||
for(var i=0; i<fields.length; ++i) {
|
|
||||||
if (typeof fields[i] !== 'string') {
|
|
||||||
fields[i] = fields[i].toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
fields[i] = fields[i].replace(/\./g, '\uff0E');
|
for(var i=0; i<fields.length; ++i) {
|
||||||
|
fields[i] = fieldToString(fields[i]);
|
||||||
_fields[fields[i]] = 1;
|
_fields[fields[i]] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keys = keys.map(function(key) {
|
||||||
|
return { _key : key};
|
||||||
|
});
|
||||||
|
|
||||||
db.collection('objects').findOne({_key:key}, _fields, function(err, item) {
|
db.collection('objects').find({$or: keys}, _fields).toArray(function(err, items) {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(item === null) {
|
if (items === null) {
|
||||||
|
items = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
var returnData = [],
|
||||||
|
index = 0,
|
||||||
|
item;
|
||||||
|
|
||||||
|
for (var i=0; i<keys.length; ++i) {
|
||||||
|
|
||||||
|
if (items[index] && items[index]._key === keys[i]._key) {
|
||||||
|
item = items[index];
|
||||||
|
index++;
|
||||||
|
} else {
|
||||||
item = {};
|
item = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i=0; i<fields.length; ++i) {
|
returnData.push(item);
|
||||||
if(item[fields[i]] === null || item[fields[i]] === undefined) {
|
for (var k=0; k<fields.length; ++k) {
|
||||||
item[fields[i]] = null;
|
if (item[fields[k]] === null || item[fields[k]] === undefined) {
|
||||||
|
item[fields[k]] = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, item);
|
callback(null, returnData);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -341,18 +375,17 @@
|
|||||||
|
|
||||||
var values = [];
|
var values = [];
|
||||||
for(var key in data) {
|
for(var key in data) {
|
||||||
|
if (data && data.hasOwnProperty(key)) {
|
||||||
values.push(data[key]);
|
values.push(data[key]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
callback(null, values);
|
callback(null, values);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.isObjectField = function(key, field, callback) {
|
module.isObjectField = function(key, field, callback) {
|
||||||
var data = {};
|
var data = {};
|
||||||
if(typeof field !== 'string') {
|
field = fieldToString(field);
|
||||||
field = field.toString();
|
|
||||||
}
|
|
||||||
field = field.replace(/\./g, '\uff0E');
|
|
||||||
data[field] = '';
|
data[field] = '';
|
||||||
db.collection('objects').findOne({_key:key}, {fields:data}, function(err, item) {
|
db.collection('objects').findOne({_key:key}, {fields:data}, function(err, item) {
|
||||||
if(err) {
|
if(err) {
|
||||||
@@ -364,11 +397,8 @@
|
|||||||
|
|
||||||
module.deleteObjectField = function(key, field, callback) {
|
module.deleteObjectField = function(key, field, callback) {
|
||||||
var data = {};
|
var data = {};
|
||||||
if(typeof field !== 'string') {
|
field = fieldToString(field);
|
||||||
field = field.toString();
|
data[field] = '';
|
||||||
}
|
|
||||||
field = field.replace(/\./g, '\uff0E');
|
|
||||||
data[field] = "";
|
|
||||||
db.collection('objects').update({_key:key}, {$unset : data}, function(err, result) {
|
db.collection('objects').update({_key:key}, {$unset : data}, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
callback(err, result);
|
callback(err, result);
|
||||||
@@ -386,10 +416,7 @@
|
|||||||
|
|
||||||
module.incrObjectFieldBy = function(key, field, value, callback) {
|
module.incrObjectFieldBy = function(key, field, value, callback) {
|
||||||
var data = {};
|
var data = {};
|
||||||
if(typeof field !== 'string') {
|
field = fieldToString(field);
|
||||||
field = field.toString();
|
|
||||||
}
|
|
||||||
field = field.replace(/\./g, '\uff0E');
|
|
||||||
data[field] = value;
|
data[field] = value;
|
||||||
|
|
||||||
db.collection('objects').findAndModify({_key:key}, {}, {$inc: data}, {new:true, upsert:true}, function(err, result) {
|
db.collection('objects').findAndModify({_key:key}, {}, {$inc: data}, {new:true, upsert:true}, function(err, result) {
|
||||||
@@ -408,10 +435,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
value.forEach(function(element, index, array) {
|
value.forEach(function(element, index, array) {
|
||||||
array[index] = element ? element.toString() : element;
|
array[index] = toString(element);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
db.collection('objects').update({_key: key}, { $addToSet: { members: { $each: value } } }, { upsert: true, w: 1 }, function(err, result) {
|
db.collection('objects').update({_key: key}, { $addToSet: { members: { $each: value } } }, { upsert: true, w: 1 }, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
callback(err, result);
|
callback(err, result);
|
||||||
@@ -425,7 +451,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
value.forEach(function(element, index, array) {
|
value.forEach(function(element, index, array) {
|
||||||
array[index] = element ? element.toString() : element;
|
array[index] = toString(element);
|
||||||
});
|
});
|
||||||
|
|
||||||
db.collection('objects').update( { _key: key }, { $pullAll: { members: value } }, function(err, result) {
|
db.collection('objects').update( { _key: key }, { $pullAll: { members: value } }, function(err, result) {
|
||||||
@@ -436,9 +462,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.isSetMember = function(key, value, callback) {
|
module.isSetMember = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
db.collection('objects').findOne({_key:key, members: value}, function(err, item) {
|
db.collection('objects').findOne({_key:key, members: value}, function(err, item) {
|
||||||
callback(err, item !== null && item !== undefined);
|
callback(err, item !== null && item !== undefined);
|
||||||
@@ -447,9 +471,7 @@
|
|||||||
|
|
||||||
module.isMemberOfSets = function(sets, value, callback) {
|
module.isMemberOfSets = function(sets, value, callback) {
|
||||||
|
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
db.collection('objects').find({_key: {$in : sets}, members: value}).toArray(function(err, result) {
|
db.collection('objects').find({_key: {$in : sets}, members: value}).toArray(function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
@@ -525,9 +547,7 @@
|
|||||||
// sorted sets
|
// sorted sets
|
||||||
|
|
||||||
module.sortedSetAdd = function(key, score, value, callback) {
|
module.sortedSetAdd = function(key, score, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
var data = {
|
var data = {
|
||||||
score: parseInt(score, 10),
|
score: parseInt(score, 10),
|
||||||
value: value
|
value: value
|
||||||
@@ -541,9 +561,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.sortedSetRemove = function(key, value, callback) {
|
module.sortedSetRemove = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
db.collection('objects').remove({_key:key, value:value}, function(err, result) {
|
db.collection('objects').remove({_key:key, value:value}, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
@@ -640,9 +658,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.sortedSetRank = function(key, value, callback) {
|
module.sortedSetRank = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
module.getSortedSetRange(key, 0, -1, function(err, result) {
|
module.getSortedSetRange(key, 0, -1, function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -657,9 +673,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.sortedSetRevRank = function(key, value, callback) {
|
module.sortedSetRevRank = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
module.getSortedSetRevRange(key, 0, -1, function(err, result) {
|
module.getSortedSetRevRange(key, 0, -1, function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -676,18 +690,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.sortedSetScore = function(key, value, callback) {
|
module.sortedSetScore = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
db.collection('objects').findOne({_key:key, value: value}, {fields:{score:1}}, function(err, result) {
|
db.collection('objects').findOne({_key:key, value: value}, {fields:{score:1}}, function(err, result) {
|
||||||
if(err) {
|
callback(err, result ? result.score : null);
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
if(result) {
|
|
||||||
return callback(null, result.score);
|
|
||||||
}
|
|
||||||
|
|
||||||
callback(err, null);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -698,9 +703,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.sortedSetsScore = function(keys, value, callback) {
|
module.sortedSetsScore = function(keys, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
db.collection('objects').find({_key:{$in:keys}, value: value}).toArray(function(err, result) {
|
db.collection('objects').find({_key:{$in:keys}, value: value}).toArray(function(err, result) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@@ -720,9 +723,7 @@
|
|||||||
|
|
||||||
// lists
|
// lists
|
||||||
module.listPrepend = function(key, value, callback) {
|
module.listPrepend = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
module.isObjectField(key, 'array', function(err, exists) {
|
module.isObjectField(key, 'array', function(err, exists) {
|
||||||
if(err) {
|
if(err) {
|
||||||
@@ -746,9 +747,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.listAppend = function(key, value, callback) {
|
module.listAppend = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
db.collection('objects').update({ _key: key }, { $push: { array: value } }, {upsert:true, w:1}, function(err, result) {
|
db.collection('objects').update({ _key: key }, { $push: { array: value } }, {upsert:true, w:1}, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
callback(err, result);
|
callback(err, result);
|
||||||
@@ -782,9 +781,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.listRemoveAll = function(key, value, callback) {
|
module.listRemoveAll = function(key, value, callback) {
|
||||||
if(value !== null && value !== undefined) {
|
value = toString(value);
|
||||||
value = value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
db.collection('objects').update({_key: key }, { $pull: { array: value } }, function(err, result) {
|
db.collection('objects').update({_key: key }, { $pull: { array: value } }, function(err, result) {
|
||||||
if(typeof callback === 'function') {
|
if(typeof callback === 'function') {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
return reds.client || (reds.client = redisClient);
|
return reds.client || (reds.client = redisClient);
|
||||||
};
|
};
|
||||||
|
|
||||||
postSearch = reds.createSearch('nodebbpostsearch'),
|
postSearch = reds.createSearch('nodebbpostsearch');
|
||||||
topicSearch = reds.createSearch('nodebbtopicsearch');
|
topicSearch = reds.createSearch('nodebbtopicsearch');
|
||||||
|
|
||||||
var db = parseInt(nconf.get('redis:database'), 10);
|
var db = parseInt(nconf.get('redis:database'), 10);
|
||||||
@@ -69,7 +69,9 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(typeof callback === 'function') {
|
||||||
callback();
|
callback();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.close = function() {
|
module.close = function() {
|
||||||
@@ -221,18 +223,34 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.getObjectFields = function(key, fields, callback) {
|
module.getObjectFields = function(key, fields, callback) {
|
||||||
redisClient.hmget(key, fields, function(err, data) {
|
module.getObjectsFields([key], fields, function(err, results) {
|
||||||
|
callback(err, results ? results[0]: null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.getObjectsFields = function(keys, fields, callback) {
|
||||||
|
var multi = redisClient.multi();
|
||||||
|
|
||||||
|
for(var x=0; x<keys.length; ++x) {
|
||||||
|
multi.hmget.apply(multi, [keys[x]].concat(fields));
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeObject(array) {
|
||||||
|
var obj = {};
|
||||||
|
|
||||||
|
for (var i = 0, ii = fields.length; i < ii; ++i) {
|
||||||
|
obj[fields[i]] = array[i];
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
multi.exec(function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var returnData = {};
|
results = results.map(makeObject);
|
||||||
|
callback(null, results);
|
||||||
for (var i = 0, ii = fields.length; i < ii; ++i) {
|
|
||||||
returnData[fields[i]] = data[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
callback(null, returnData);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,5 +52,9 @@ module.exports = function(app, middleware, controllers) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get('/test', function(req, res) {
|
||||||
|
res.send(200);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -230,7 +230,7 @@ SocketPosts.getFavouritedUsers = function(socket, pid, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var max = 5; //hardcoded
|
var max = 5; //hardcoded
|
||||||
var usernames = "";
|
var finalText = "";
|
||||||
|
|
||||||
var pid_uids = data[0];
|
var pid_uids = data[0];
|
||||||
var rest_amount = 0;
|
var rest_amount = 0;
|
||||||
@@ -240,15 +240,15 @@ SocketPosts.getFavouritedUsers = function(socket, pid, callback) {
|
|||||||
pid_uids = pid_uids.slice(0, max);
|
pid_uids = pid_uids.slice(0, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.getUsernamesByUids(pid_uids, function(err, result) {
|
user.getUsernamesByUids(pid_uids, function(err, usernames) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
usernames = result.join(', ') + (rest_amount > 0
|
finalText = usernames.join(', ') + (rest_amount > 0
|
||||||
? " and " + rest_amount + (rest_amount > 1 ? " others" : " other")
|
? " and " + rest_amount + (rest_amount > 1 ? " others" : " other")
|
||||||
: "");
|
: "");
|
||||||
callback(null, usernames);
|
callback(null, finalText);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
236
src/user.js
236
src/user.js
@@ -168,32 +168,51 @@ var bcrypt = require('bcryptjs'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getMultipleUserFields = function(uids, fields, callback) {
|
User.getMultipleUserFields = function(uids, fields, callback) {
|
||||||
if (uids.length === 0) {
|
|
||||||
|
if (!Array.isArray(uids) || !uids.length) {
|
||||||
return callback(null, []);
|
return callback(null, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFields(uid, next) {
|
var keys = uids.map(function(uid) {
|
||||||
User.getUserFields(uid, fields, next);
|
return 'user:' + uid;
|
||||||
}
|
});
|
||||||
|
|
||||||
async.map(uids, getFields, callback);
|
db.getObjectsFields(keys, fields, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getUserData = function(uid, callback) {
|
User.getUserData = function(uid, callback) {
|
||||||
db.getObject('user:' + uid, function(err, data) {
|
User.getUsersData([uid], function(err, users) {
|
||||||
|
callback(err, users ? users[0] : null);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
User.getUsersData = function(uids, callback) {
|
||||||
|
|
||||||
|
if (!Array.isArray(uids) || !uids.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
var keys = uids.map(function(uid) {
|
||||||
|
return 'user:' + uid;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjects(keys, function(err, users) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data) {
|
users.forEach(function(user) {
|
||||||
if (data.password) {
|
if (user) {
|
||||||
data.password = null;
|
if (user.password) {
|
||||||
data.hasPassword = true;
|
user.password = null;
|
||||||
|
user.hasPassword = true;
|
||||||
} else {
|
} else {
|
||||||
data.hasPassword = false;
|
user.hasPassword = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback(err, data);
|
});
|
||||||
|
|
||||||
|
callback(null, users);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -508,36 +527,48 @@ var bcrypt = require('bcryptjs'),
|
|||||||
|
|
||||||
db.getSortedSetRevRange(set, start, stop, function(err, uids) {
|
db.getSortedSetRevRange(set, start, stop, function(err, uids) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err, null);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUserData(uid, callback) {
|
User.getUsersData(uids, function(err, users) {
|
||||||
User.getUserData(uid, function(err, userData) {
|
if (err) {
|
||||||
if(!userData.status) {
|
return callback(err);
|
||||||
userData.status = 'online';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
User.isAdministrator(uid, function(err, isAdmin) {
|
async.map(users, function(user, next) {
|
||||||
if (userData) {
|
if (!user) {
|
||||||
userData.administrator = isAdmin ? '1':'0';
|
return next(null, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.status) {
|
||||||
|
user.status = 'online';
|
||||||
|
}
|
||||||
|
|
||||||
|
User.isAdministrator(user.uid, function(err, isAdmin) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
user.administrator = isAdmin ? '1':'0';
|
||||||
|
|
||||||
if(set === 'users:online') {
|
if(set === 'users:online') {
|
||||||
return callback(null, userData);
|
return next(null, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
db.sortedSetScore('users:online', user.uid, function(err, score) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.sortedSetScore('users:online', uid, function(err, score) {
|
|
||||||
if(!score) {
|
if(!score) {
|
||||||
userData.status = 'offline';
|
user.status = 'offline';
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, userData);
|
next(null, user);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}, callback);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
async.map(uids, getUserData, callback);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -568,24 +599,25 @@ var bcrypt = require('bcryptjs'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getUsersCSV = function(callback) {
|
User.getUsersCSV = function(callback) {
|
||||||
var csvContent = "";
|
var csvContent = '';
|
||||||
|
|
||||||
db.getObjectValues('username:uid', function(err, uids) {
|
db.getObjectValues('username:uid', function(err, uids) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
async.each(uids, function(uid, next) {
|
User.getMultipleUserFields(uids, ['email', 'username'], function(err, usersData) {
|
||||||
User.getUserFields(uid, ['email', 'username'], function(err, userData) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
csvContent += userData.email + ',' + userData.username + ',' + uid + '\n';
|
usersData.forEach(function(user, index) {
|
||||||
next();
|
if (user) {
|
||||||
|
csvContent += user.email + ',' + user.username + ',' + uids[index] + '\n';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}, function(err) {
|
|
||||||
callback(err, csvContent);
|
callback(null, csvContent);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -604,9 +636,9 @@ var bcrypt = require('bcryptjs'),
|
|||||||
query = query.toLowerCase();
|
query = query.toLowerCase();
|
||||||
|
|
||||||
var usernames = Object.keys(usernamesHash),
|
var usernames = Object.keys(usernamesHash),
|
||||||
results = [];
|
uids = [];
|
||||||
|
|
||||||
results = usernames.filter(function(username) {
|
uids = usernames.filter(function(username) {
|
||||||
return username.toLowerCase().indexOf(query) === 0;
|
return username.toLowerCase().indexOf(query) === 0;
|
||||||
})
|
})
|
||||||
.slice(0, 10)
|
.slice(0, 10)
|
||||||
@@ -617,7 +649,10 @@ var bcrypt = require('bcryptjs'),
|
|||||||
return usernamesHash[username];
|
return usernamesHash[username];
|
||||||
});
|
});
|
||||||
|
|
||||||
User.getDataForUsers(results, function(err, userdata) {
|
User.getUsersData(uids, function(err, userdata) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
var diff = process.hrtime(start);
|
var diff = process.hrtime(start);
|
||||||
var timing = (diff[0] * 1e3 + diff[1] / 1e6).toFixed(1);
|
var timing = (diff[0] * 1e3 + diff[1] / 1e6).toFixed(1);
|
||||||
callback(null, {timing: timing, users: userdata});
|
callback(null, {timing: timing, users: userdata});
|
||||||
@@ -657,70 +692,48 @@ var bcrypt = require('bcryptjs'),
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
User.follow = function(uid, followid, callback) {
|
User.follow = function(uid, followuid, callback) {
|
||||||
db.setAdd('following:' + uid, followid, function(err, data) {
|
toggleFollow('follow', uid, followuid, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
User.unfollow = function(uid, unfollowuid, callback) {
|
||||||
|
toggleFollow('unfollow', uid, unfollowuid, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
function toggleFollow(type, uid, theiruid, callback) {
|
||||||
|
var command = type === 'follow' ? 'setAdd' : 'setRemove';
|
||||||
|
db[command]('following:' + uid, theiruid, function(err) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
db[command]('followers:' + theiruid, uid, callback);
|
||||||
db.setAdd('followers:' + followid, uid, callback);
|
|
||||||
});
|
});
|
||||||
};
|
|
||||||
|
|
||||||
User.unfollow = function(uid, unfollowid, callback) {
|
|
||||||
db.setRemove('following:' + uid, unfollowid, function(err, data) {
|
|
||||||
if(err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
db.setRemove('followers:' + unfollowid, uid, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
User.getFollowing = function(uid, callback) {
|
User.getFollowing = function(uid, callback) {
|
||||||
db.getSetMembers('following:' + uid, function(err, userIds) {
|
getFollow('following:' + uid, callback);
|
||||||
if(err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
User.getDataForUsers(userIds, callback);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getFollowers = function(uid, callback) {
|
User.getFollowers = function(uid, callback) {
|
||||||
db.getSetMembers('followers:' + uid, function(err, userIds) {
|
getFollow('followers:' + uid, callback);
|
||||||
if(err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
User.getDataForUsers(userIds, callback);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getFollowingCount = function(uid, callback) {
|
function getFollow(set, callback) {
|
||||||
db.getSetMembers('following:' + uid, function(err, userIds) {
|
db.getSetMembers(set, function(err, uids) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
userIds = userIds.filter(function(value) {
|
User.getUsersData(uids, callback);
|
||||||
return parseInt(value, 10) !== 0;
|
|
||||||
});
|
|
||||||
callback(null, userIds.length);
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
User.getFollowingCount = function(uid, callback) {
|
||||||
|
db.setCount('following:' + uid, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getFollowerCount = function(uid, callback) {
|
User.getFollowerCount = function(uid, callback) {
|
||||||
db.getSetMembers('followers:' + uid, function(err, userIds) {
|
db.setCount('followers:' + uid, callback);
|
||||||
if(err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
userIds = userIds.filter(function(value) {
|
|
||||||
return parseInt(value, 10) !== 0;
|
|
||||||
});
|
|
||||||
callback(null, userIds.length);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getFollowStats = function (uid, callback) {
|
User.getFollowStats = function (uid, callback) {
|
||||||
@@ -734,22 +747,6 @@ var bcrypt = require('bcryptjs'),
|
|||||||
}, callback);
|
}, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getDataForUsers = function(uids, callback) {
|
|
||||||
|
|
||||||
if (!uids || !Array.isArray(uids) || uids.length === 0) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserData(uid, next) {
|
|
||||||
if(parseInt(uid, 10) === 0) {
|
|
||||||
return next(null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
User.getUserData(uid, next);
|
|
||||||
}
|
|
||||||
|
|
||||||
async.map(uids, getUserData, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
User.sendPostNotificationToFollowers = function(uid, tid, pid) {
|
User.sendPostNotificationToFollowers = function(uid, tid, pid) {
|
||||||
User.getUserField(uid, 'username', function(err, username) {
|
User.getUserField(uid, 'username', function(err, username) {
|
||||||
@@ -773,13 +770,7 @@ var bcrypt = require('bcryptjs'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.isFollowing = function(uid, theirid, callback) {
|
User.isFollowing = function(uid, theirid, callback) {
|
||||||
db.isSetMember('following:' + uid, theirid, function(err, isMember) {
|
db.isSetMember('following:' + uid, theirid, callback);
|
||||||
if (!err) {
|
|
||||||
callback(isMember);
|
|
||||||
} else {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.exists = function(userslug, callback) {
|
User.exists = function(userslug, callback) {
|
||||||
@@ -809,29 +800,17 @@ var bcrypt = require('bcryptjs'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getUsernamesByUids = function(uids, callback) {
|
User.getUsernamesByUids = function(uids, callback) {
|
||||||
|
User.getMultipleUserFields(uids, ['username'], function(err, users) {
|
||||||
if (!Array.isArray(uids)) {
|
if (err) {
|
||||||
return callback(null, []);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUserName(uid, next) {
|
users = users.map(function(user) {
|
||||||
User.getUserField(uid, 'username', next);
|
return user.username;
|
||||||
}
|
});
|
||||||
|
|
||||||
async.map(uids, getUserName, callback);
|
callback(null, users);
|
||||||
};
|
});
|
||||||
|
|
||||||
User.getUserSlugsByUids = function(uids, callback) {
|
|
||||||
|
|
||||||
if (!Array.isArray(uids)) {
|
|
||||||
return callback(null, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserSlug(uid, next) {
|
|
||||||
User.getUserField(uid, 'userslug', next);
|
|
||||||
}
|
|
||||||
|
|
||||||
async.map(uids, getUserSlug, callback);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.getUsernameByUserslug = function(slug, callback) {
|
User.getUsernameByUserslug = function(slug, callback) {
|
||||||
@@ -846,12 +825,7 @@ var bcrypt = require('bcryptjs'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
User.getUidByEmail = function(email, callback) {
|
User.getUidByEmail = function(email, callback) {
|
||||||
db.getObjectField('email:uid', email, function(err, data) {
|
db.getObjectField('email:uid', email, callback);
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
callback(null, data);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
User.isModerator = function(uid, cid, callback) {
|
User.isModerator = function(uid, cid, callback) {
|
||||||
|
|||||||
Reference in New Issue
Block a user