mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-01-15 11:52:23 +01:00
327 lines
8.2 KiB
JavaScript
327 lines
8.2 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Module dependencies
|
|
*/
|
|
var path = require('path'),
|
|
config = require(path.resolve('./config/config')),
|
|
mongoose = require('mongoose'),
|
|
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
|
|
moment = require('moment'),
|
|
Medal = mongoose.model('Medal'),
|
|
objectId = require('mongodb').ObjectId,
|
|
async = require('async'),
|
|
traceLogCreate = require(path.resolve('./config/lib/tracelog')).create,
|
|
history = require(path.resolve('./config/lib/history')),
|
|
scoreUpdate = require(path.resolve('./config/lib/score')).update;
|
|
|
|
var traceConfig = config.meanTorrentConfig.trace;
|
|
var historyConfig = config.meanTorrentConfig.history;
|
|
var medalsConfig = config.meanTorrentConfig.medals;
|
|
var scoreConfig = config.meanTorrentConfig.score;
|
|
|
|
var mtDebug = require(path.resolve('./config/lib/debug'));
|
|
|
|
/**
|
|
* getMedalsCount
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.getMedalsCount = function (req, res) {
|
|
var medalName = undefined;
|
|
|
|
if (req.query.mName !== undefined) {
|
|
medalName = req.query.mName;
|
|
Medal.count({medalName: medalName}, function (err, count) {
|
|
res.json([{
|
|
_id: medalName,
|
|
count: count
|
|
}]);
|
|
});
|
|
} else {
|
|
Medal.aggregate([{
|
|
$group: {
|
|
_id: '$medalName',
|
|
count: {$sum: 1}
|
|
}
|
|
}]).exec(function (err, counts) {
|
|
res.json(counts);
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* viewMedal
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.viewMedal = function (req, res) {
|
|
var medalsAll = medalsConfig.type;
|
|
var medal = undefined;
|
|
medalsAll.forEach(function (md) {
|
|
if (md.name === req.params.medalName) {
|
|
medal = md;
|
|
}
|
|
});
|
|
|
|
if (medal.cats !== 'workers' || medalsConfig.showWorkerUsersListToAll || req.user.isOper) {
|
|
var skip = 0;
|
|
var limit = 0;
|
|
|
|
if (req.query.skip !== undefined) {
|
|
skip = parseInt(req.query.skip, 10);
|
|
}
|
|
if (req.query.limit !== undefined) {
|
|
limit = parseInt(req.query.limit, 10);
|
|
}
|
|
|
|
var countQuery = function (callback) {
|
|
Medal.count({
|
|
medalName: req.params.medalName
|
|
}, function (err, count) {
|
|
if (err) {
|
|
callback(err, null);
|
|
} else {
|
|
callback(null, count);
|
|
}
|
|
});
|
|
};
|
|
|
|
var findQuery = function (callback) {
|
|
Medal.find({
|
|
medalName: req.params.medalName
|
|
}).populate('user', 'username displayName profileImageURL isVip score uploaded downloaded')
|
|
.skip(skip)
|
|
.limit(limit)
|
|
.sort('createdAt')
|
|
.exec(function (err, medals) {
|
|
if (err) {
|
|
callback(err, null);
|
|
} else {
|
|
callback(null, medals);
|
|
}
|
|
});
|
|
};
|
|
|
|
async.parallel([countQuery, findQuery], function (err, results) {
|
|
if (err) {
|
|
mtDebug.debugRed(err);
|
|
return res.status(422).send(err);
|
|
} else {
|
|
res.json({rows: results[1], total: results[0]});
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(403).json({
|
|
message: 'ERROR: User is not authorized'
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* requestMedal
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.requestMedal = function (req, res) {
|
|
var user = req.user;
|
|
var medalsAll = medalsConfig.type;
|
|
var medal = undefined;
|
|
medalsAll.forEach(function (md) {
|
|
if (md.name === req.params.medalName) {
|
|
medal = md;
|
|
}
|
|
});
|
|
|
|
if (medal.passHelp === 'self') {
|
|
Medal.count({
|
|
user: objectId(user._id),
|
|
medalName: req.params.medalName
|
|
}, function (err, count) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else if (count > 0) {
|
|
return res.status(422).json({
|
|
message: 'SERVER.USER_ALREADY_HAS_THIS_MEDAL'
|
|
});
|
|
} else {
|
|
if (!medal.score || user.score >= medal.score) {
|
|
var newMedal = new Medal({
|
|
user: user,
|
|
medalName: req.params.medalName,
|
|
addBy: user
|
|
});
|
|
|
|
newMedal.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(newMedal);
|
|
|
|
// add medalName to user
|
|
user.update({
|
|
$addToSet: {medals: req.params.medalName}
|
|
}).exec();
|
|
//score update
|
|
var act = scoreConfig.action.scoreToRequestMedal;
|
|
act.params = {
|
|
medalDesc: 'MEDALS.DESC.' + medal.prefix.toUpperCase()
|
|
};
|
|
scoreUpdate(req, user, act, -(medal.score));
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(422).send({
|
|
message: 'SERVER.SCORE_NOT_ENOUGH'
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(403).json({
|
|
message: 'ERROR: User is not authorized'
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* getUserMedals
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.getUserMedals = function (req, res) {
|
|
Medal.find({
|
|
user: objectId(req.params.userId)
|
|
})
|
|
.sort('createdAt')
|
|
.exec(function (err, medals) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(medals);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* addToUser
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.addToUser = function (req, res) {
|
|
var user = req.model;
|
|
|
|
if (user._id.equals(req.user._id) || req.user.isOper) {
|
|
Medal.count({
|
|
user: objectId(user._id),
|
|
medalName: req.params.medalName
|
|
}, function (err, count) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else if (count > 0) {
|
|
return res.status(422).json({
|
|
message: 'SERVER.USER_ALREADY_HAS_THIS_MEDAL'
|
|
});
|
|
} else {
|
|
var medal = new Medal({
|
|
user: user,
|
|
medalName: req.params.medalName,
|
|
addBy: req.user
|
|
});
|
|
|
|
medal.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(medal);
|
|
|
|
// add medalName to user
|
|
user.update({
|
|
$addToSet: {medals: req.params.medalName}
|
|
}).exec();
|
|
//create trace log
|
|
traceLogCreate(req, traceConfig.action.adminAddUserMedal, {
|
|
user: user._id,
|
|
medalName: req.params.medalName
|
|
});
|
|
// write history
|
|
history.insert(user._id, historyConfig.action.adminAddUserMedal, {
|
|
medalName: req.params.medalName,
|
|
by: req.user._id
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(403).json({
|
|
message: 'ERROR: User is not authorized'
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* removeFromUser
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.removeFromUser = function (req, res) {
|
|
var user = req.model;
|
|
|
|
if (user._id.equals(req.user._id) || req.user.isOper) {
|
|
Medal.findOne({
|
|
user: objectId(user._id),
|
|
medalName: req.params.medalName
|
|
}, function (err, medal) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else if (!medal) {
|
|
return res.status(422).json({
|
|
message: 'SERVER.USER_HAS_NOT_THIS_MEDAL'
|
|
});
|
|
} else {
|
|
medal.remove(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(medal);
|
|
|
|
// add medalName to user
|
|
user.update({
|
|
$pull: {medals: req.params.medalName}
|
|
}).exec();
|
|
//create trace log
|
|
traceLogCreate(req, traceConfig.action.adminRemoveUserMedal, {
|
|
user: user._id,
|
|
medalName: req.params.medalName
|
|
});
|
|
// write history
|
|
history.insert(user._id, historyConfig.action.adminRemoveUserMedal, {
|
|
medalName: req.params.medalName,
|
|
by: req.user._id
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(403).json({
|
|
message: 'ERROR: User is not authorized'
|
|
});
|
|
}
|
|
};
|