Skip to content

Instantly share code, notes, and snippets.

@vaske
Created October 1, 2014 20:17
Show Gist options
  • Save vaske/64a918a9448f6fa2429c to your computer and use it in GitHub Desktop.
Save vaske/64a918a9448f6fa2429c to your computer and use it in GitHub Desktop.
route
app.put('/api/v1/user/:id', auth.adminApi, function(req, res, next) {
db.User.find(req.params.id).then(function( user ) {
var fields = ['locked', 'isAdmin', 'isMuted', 'isMod', 'tickets', 'unverified', 'isTrusted'];
var bpOrig = user.bits;
var gpOrig = user.points;
var logs;
req.body.locked = req.body.locked == 'locked';
req.body.isAdmin = req.body.admin == "admin";
req.body.isMod = req.body.mod == "mod";
req.body.isMuted = req.body.isMuted == "isMuted";
req.body.unverified = req.body.unverified == "unverified";
req.body.isTrusted = req.body.isTrusted == "isTrusted";
req.body.stats = req.body.stats || {};
req.body.stats.rating = parseInt(req.body.stats.rating, 10);
var promises = [];
// keep origin bits/points
user.bits = bpOrig;
user.points = gpOrig;
var update = user.updateAttributes(req.body, fields);
promises.push(update);
if( typeof( req.body.bits ) != 'undefined' && parseInt(req.body.bits, 10) !== 0 ) {
var amount = parseInt(req.body.bits, 10),
code = req.body.bitsCode ? req.body.bitsCode : 'admin_update',
promise;
if (amount > 0) {
// third argument is 0, pointType = 0 = bits
promise = PointsController.awardPoints(user, amount, 0, {code: code});
}
if (amount < 0) {
amount = Math.abs(amount);
// third argument is 0, pointType = 0 = bits
promise = PointsController.takePoints(user, amount, 0, {code: code});
}
promises.push(promise);
}
if( typeof( req.body.points ) != 'undefined' && parseInt(req.body.points, 10) !== 0 ) {
var amount = parseInt(req.body.points, 10),
code = req.body.pointsCode ? req.body.pointsCode : 'admin_update',
promise;
if (amount > 0) {
// third argument is 1, pointType = 1 = points
promise = PointsController.awardPoints(user, amount, 1, {code: code});
}
if (amount < 0) {
amount = Math.abs(amount);
// third argument is 1, pointType = 1 = points
promise = PointsController.takePoints(user, amount, 1, {code: code});
}
promises.push(promise);
}
if (req.body.statsCode) {
var statsPromise = GameStats.get(user, req.body.statsCode)
.then(function (stats) {
return stats.updateAttributes(req.body.stats, ['rating']);
});
promises.push(statsPromise);
}
if (req.body.isMuted) {
promises.push(chat.removeUserMessages(user));
}
return Promise.all(promises);
}).spread(function(user) {
primus.me(user);
res.json(user.safe(true));
})
.catch(next);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment