64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
var router = require('express').Router(),
|
|
mongoose = require('mongoose'),
|
|
Metal = mongoose.model('Metal');
|
|
const auth = require('../auth');
|
|
|
|
// Preload metal objects on routes with ':code'
|
|
router.param('code', function (req, res, next, code) {
|
|
Metal.findOne({ code: code })
|
|
.then(function (metal) {
|
|
if (!metal) {
|
|
return res.sendStatus(404);
|
|
}
|
|
req.metal = metal;
|
|
return next();
|
|
}).catch(next);
|
|
});
|
|
|
|
router.get('/', auth.required, function (req, res, next) {
|
|
var query = {};
|
|
var limit = 20;
|
|
var offset = 0;
|
|
if (typeof req.query.limit !== 'undefined') {
|
|
limit = req.query.limit;
|
|
}
|
|
if (typeof req.query.offset !== 'undefined') {
|
|
offset = req.query.offset;
|
|
}
|
|
if (typeof req.query.code !== 'undefined') {
|
|
query.code = req.query.code;
|
|
}
|
|
if (typeof req.query.color !== 'undefined') {
|
|
query.color = req.query.color;
|
|
}
|
|
if (typeof req.query.ordering !== 'undefined') {
|
|
query.ordering = req.query.ordering;
|
|
}
|
|
if (typeof req.query.title !== 'undefined') {
|
|
query.title = req.query.title;
|
|
}
|
|
Promise.all([
|
|
Metal.find(query)
|
|
.limit(Number(limit))
|
|
.skip(Number(offset))
|
|
.exec(),
|
|
Metal.count(query).exec()
|
|
]).then(function (results) {
|
|
var metals = results[0];
|
|
var metalsCount = results[1];
|
|
|
|
return res.json({
|
|
metals: metals.map(function (metal) {
|
|
return metal.toJSONFor();
|
|
}),
|
|
metalsCount: metalsCount
|
|
});
|
|
}).catch(next);
|
|
});
|
|
|
|
// return a metal
|
|
router.get('/:code', auth.required, function (req, res, next) {
|
|
return res.json({ metal: req.metal.toJSONFor() });
|
|
});
|
|
|
|
module.exports = router; |