mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-01-14 11:22:21 +01:00
338 lines
7.1 KiB
JavaScript
338 lines
7.1 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'),
|
|
User = mongoose.model('User'),
|
|
Maker = mongoose.model('Maker'),
|
|
Torrent = mongoose.model('Torrent'),
|
|
Collection = mongoose.model('Collection'),
|
|
async = require('async'),
|
|
tmdb = require('moviedb')(config.meanTorrentConfig.tmdbConfig.key),
|
|
traceLogCreate = require(path.resolve('./config/lib/tracelog')).create,
|
|
scoreUpdate = require(path.resolve('./config/lib/score')).update;
|
|
|
|
var traceConfig = config.meanTorrentConfig.trace;
|
|
|
|
var mtDebug = require(path.resolve('./config/lib/debug'));
|
|
|
|
/**
|
|
* searchcollection
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.searchcollection = function (req, res) {
|
|
mtDebug.debugGreen('------- API: searchCollection --------------------');
|
|
mtDebug.debugGreen(req.params);
|
|
|
|
tmdb.searchCollection({
|
|
language: req.params.language,
|
|
query: req.query.query
|
|
}, function (err, info) {
|
|
if (err) {
|
|
res.status(900).send(err);
|
|
} else {
|
|
res.json(info);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* collectioninfo
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.collectioninfo = function (req, res) {
|
|
mtDebug.debugGreen('------- API: collectioninfo --------------------');
|
|
mtDebug.debugGreen(req.params);
|
|
|
|
tmdb.collectionInfo({
|
|
id: req.params.id,
|
|
language: req.params.language
|
|
}, function (err, info) {
|
|
if (err) {
|
|
res.status(900).send(err);
|
|
} else {
|
|
res.json(info);
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Create an collection
|
|
*/
|
|
exports.create = function (req, res) {
|
|
if (req.user.isOper) {
|
|
var user = req.user;
|
|
var coll = new Collection(req.body);
|
|
|
|
coll.user = user._id;
|
|
mtDebug.debugRed(coll);
|
|
|
|
coll.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(user);
|
|
|
|
//create trace log
|
|
traceLogCreate(req, traceConfig.action.OperCreateCollection, {
|
|
name: coll.name
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(403).json({
|
|
message: 'ERROR: User is not authorized'
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Show the current collection
|
|
*/
|
|
exports.read = function (req, res) {
|
|
// convert mongoose document to JSON
|
|
var coll = req.collection ? req.collection.toJSON() : {};
|
|
|
|
coll.isCurrentUserOwner = !!(req.user && coll.user && coll.user._id.toString() === req.user._id.toString());
|
|
|
|
res.json(coll);
|
|
};
|
|
|
|
/**
|
|
* Update an collection
|
|
*/
|
|
exports.update = function (req, res) {
|
|
var coll = req.collection;
|
|
|
|
coll.name = req.body.name;
|
|
coll.overview = req.body.overview;
|
|
|
|
coll.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(coll);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* insertIntoCollection
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.insertIntoCollection = function (req, res) {
|
|
var coll = req.collection;
|
|
var torrent = req.torrent;
|
|
|
|
coll.torrents.push(torrent);
|
|
coll.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(coll);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* removeFromCollection
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.removeFromCollection = function (req, res) {
|
|
var coll = req.collection;
|
|
var torrent = req.torrent;
|
|
|
|
coll.torrents.pull(torrent);
|
|
coll.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(coll);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* setRecommendLevel
|
|
* @param req
|
|
* @param res
|
|
*/
|
|
exports.setRecommendLevel = function (req, res) {
|
|
var coll = req.collection;
|
|
|
|
if (req.params.rlevel) {
|
|
coll.recommend_level = req.params.rlevel;
|
|
coll.ordered_at = Date.now();
|
|
|
|
coll.save(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(coll);
|
|
|
|
//create trace log
|
|
traceLogCreate(req, traceConfig.action.AdminCollectionSetRecommendLevel, {
|
|
coll: coll._id,
|
|
recommended: req.params.rlevel
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
return res.status(422).send({
|
|
message: 'PARAMS_RLEVEL_ERROR'
|
|
});
|
|
}
|
|
|
|
};
|
|
|
|
/**
|
|
* Delete an collection
|
|
*/
|
|
exports.delete = function (req, res) {
|
|
var coll = req.collection;
|
|
|
|
coll.remove(function (err) {
|
|
if (err) {
|
|
return res.status(422).send({
|
|
message: errorHandler.getErrorMessage(err)
|
|
});
|
|
} else {
|
|
res.json(coll);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* List of collections
|
|
*/
|
|
exports.list = function (req, res) {
|
|
var skip = 0;
|
|
var limit = 0;
|
|
var tmdb_id = 0;
|
|
var keysA = [];
|
|
var condition = {};
|
|
|
|
if (req.query.skip !== undefined) {
|
|
skip = parseInt(req.query.skip, 10);
|
|
}
|
|
if (req.query.limit !== undefined) {
|
|
limit = parseInt(req.query.limit, 10);
|
|
}
|
|
|
|
if (req.query.tmdb_id !== undefined) {
|
|
tmdb_id = parseInt(req.query.tmdb_id, 10);
|
|
}
|
|
|
|
if (req.query.keys && req.query.keys.length > 0) {
|
|
var keysS = req.query.keys + '';
|
|
var keysT = keysS.split(' ');
|
|
|
|
keysT.forEach(function (it) {
|
|
var ti = new RegExp(it, 'i');
|
|
keysA.push(ti);
|
|
});
|
|
}
|
|
|
|
if (tmdb_id !== 0) {
|
|
condition.tmdb_id = tmdb_id;
|
|
}
|
|
|
|
if (keysA.length > 0) {
|
|
condition.$or = [
|
|
{name: {'$all': keysA}},
|
|
{overview: {'$all': keysA}}
|
|
];
|
|
}
|
|
|
|
var countQuery = function (callback) {
|
|
Collection.count(condition, function (err, count) {
|
|
if (err) {
|
|
callback(err, null);
|
|
} else {
|
|
callback(null, count);
|
|
}
|
|
});
|
|
};
|
|
|
|
var findQuery = function (callback) {
|
|
Collection.find(condition)
|
|
.sort('recommend_level -ordered_at -created_at')
|
|
.populate('user', 'username displayName profileImageURL isVip')
|
|
.populate('torrents')
|
|
.skip(skip)
|
|
.limit(limit)
|
|
.exec(function (err, colls) {
|
|
if (err) {
|
|
callback(err, null);
|
|
} else {
|
|
callback(null, colls);
|
|
}
|
|
});
|
|
};
|
|
|
|
async.parallel([countQuery, findQuery], function (err, results) {
|
|
if (err) {
|
|
return res.status(422).send(err);
|
|
} else {
|
|
res.json({rows: results[1], total: results[0]});
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Collection middleware
|
|
*/
|
|
exports.collectionByID = function (req, res, next, id) {
|
|
|
|
if (!mongoose.Types.ObjectId.isValid(id)) {
|
|
return res.status(400).send({
|
|
message: 'COLLECTION_ID_INVALID'
|
|
});
|
|
}
|
|
|
|
Collection.findById(id)
|
|
.populate('user', 'username displayName profileImageURL isVip')
|
|
.populate({
|
|
path: 'torrents',
|
|
populate: [{
|
|
path: 'user',
|
|
select: 'username displayName profileImageURL isVip'
|
|
}, {
|
|
path: 'maker',
|
|
select: 'name'
|
|
}]
|
|
})
|
|
.exec(function (err, coll) {
|
|
if (err) {
|
|
return next(err);
|
|
} else if (!coll) {
|
|
return res.status(404).send({
|
|
message: 'No collection with that identifier has been found'
|
|
});
|
|
}
|
|
req.collection = coll;
|
|
next();
|
|
});
|
|
};
|