Files
2023-09-12 21:43:57 +02:00

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;