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;