From e1a0ba340ccad75832e83bab6a17a87cccccb2f3 Mon Sep 17 00:00:00 2001 From: Julien Gautier Date: Thu, 11 Jan 2024 16:53:43 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20routes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/api/aeronefs.js | 68 +++++++++++- routes/api/applications.js | 2 +- routes/api/canopies.js | 218 ++++++++++++++++++++++++++++++++++++- routes/api/dropzones.js | 96 +++++++++++++--- routes/api/jumps.js | 154 ++++++++++++++++++++++---- routes/api/users.js | 8 +- 6 files changed, 503 insertions(+), 43 deletions(-) diff --git a/routes/api/aeronefs.js b/routes/api/aeronefs.js index 49281db..36e96bf 100644 --- a/routes/api/aeronefs.js +++ b/routes/api/aeronefs.js @@ -7,7 +7,7 @@ const auth = require('../auth'); router.get('/', auth.required, function (req, res, next) { - var limit = 20; + var limit = 25; var offset = 0; if (typeof req.query.limit !== 'undefined') { limit = req.query.limit; @@ -37,6 +37,11 @@ router.get('/', auth.required, function (req, res, next) { '$sum': 1 } } + }, { + '$sort': + { + '_id': 1 + }, } ]; Promise.all([ @@ -62,7 +67,68 @@ router.get('/', auth.required, function (req, res, next) { */ }).catch(next); }).catch(next); +}); +router.get('/allByDate', auth.required, function (req, res, next) { + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var limit = 50; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$project': { + '_id': 0, + 'aeronef': 1, + 'imat': 1, + 'year': { + '$year': '$date' + } + } + }, { + '$group': { + '_id': { + 'aeronef': '$aeronef', + 'imat': '$imat', + 'year': '$year' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': { + '_id': 1 + } + } + ]; + + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var aeronefs = result; + //console.log(aeronefs); + return res.json({ + aeronefs: aeronefs, + aeronefsCount: aeronefs.length + }); + }).catch(next); + }).catch(next); }); module.exports = router; diff --git a/routes/api/applications.js b/routes/api/applications.js index b90528f..dc0bb56 100644 --- a/routes/api/applications.js +++ b/routes/api/applications.js @@ -22,7 +22,7 @@ router.param('application', function (req, res, next, slug) { router.get('/', auth.required, function (req, res, next) { var query = {}; - var limit = 20; + var limit = 25; var offset = 0; if (typeof req.query.limit !== 'undefined') { diff --git a/routes/api/canopies.js b/routes/api/canopies.js index 677004a..1ac2458 100644 --- a/routes/api/canopies.js +++ b/routes/api/canopies.js @@ -5,9 +5,43 @@ var router = require('express').Router(), User = mongoose.model('User'); const auth = require('../auth'); - router.get('/', auth.required, function (req, res, next) { - var limit = 20; + var query = {}; + var limit = 25; + 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.slug !== 'undefined') { + query.slug = req.query.slug; + } + + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + if (user.role == 'Admin') { + return res.sendStatus(403); + } + Jump.find(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var canopies = result; + return res.json({ + canopies: canopies, + canopiesCount: canopies.length + }); + }).catch(next); + }).catch(next); +}); + +router.get('/allBySize', auth.required, function (req, res, next) { + var limit = 25; var offset = 0; if (typeof req.query.limit !== 'undefined') { limit = req.query.limit; @@ -30,13 +64,17 @@ router.get('/', auth.required, function (req, res, next) { }, { '$group': { '_id': { - 'voile': '$voile', 'taille': '$taille' }, 'count': { '$sum': 1 } } + }, { + '$sort': + { + '_id': 1 + }, } ]; Promise.all([ @@ -52,7 +90,181 @@ router.get('/', auth.required, function (req, res, next) { }); }).catch(next); }).catch(next); +}); +router.get('/allByYear', auth.required, function (req, res, next) { + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var limit = 25; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$project': { + '_id': 0, + 'taille': 1, + 'year': { + '$year': '$date' + } + } + }, { + '$group': { + '_id': { + 'taille': '$taille', + 'year': '$year' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': { + '_id': 1 + } + } + ]; + + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var canopies = result; + //console.log(dropzones); + return res.json({ + canopies: canopies, + canopiesCount: canopies.length + }); + }).catch(next); + }).catch(next); +}); + +router.get('/allModelBySize', auth.required, function (req, res, next) { + var limit = 25; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$group': { + '_id': { + 'taille': '$taille', + 'voile': '$voile' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': + { + '_id': 1 + }, + } + ]; + Promise.all([ + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + ]).then(function (results) { + var canopies = results[0]; + return res.json({ + canopies: canopies, + canopiesCount: canopies.length + }); + }).catch(next); + }).catch(next); +}); + +router.get('/allModelByYear', auth.required, function (req, res, next) { + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var limit = 25; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$project': { + '_id': 0, + 'voile': 1, + 'taille': 1, + 'year': { + '$year': '$date' + } + } + }, { + '$group': { + '_id': { + 'taille': '$taille', + 'voile': '$voile', + 'year': '$year' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': { + '_id': 1 + } + } + ]; + + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var canopies = result; + //console.log(dropzones); + return res.json({ + canopies: canopies, + canopiesCount: canopies.length + }); + }).catch(next); + }).catch(next); }); module.exports = router; diff --git a/routes/api/dropzones.js b/routes/api/dropzones.js index ebe5fcf..7d27d3c 100644 --- a/routes/api/dropzones.js +++ b/routes/api/dropzones.js @@ -7,19 +7,18 @@ const auth = require('../auth'); router.get('/', auth.required, function (req, res, next) { - 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; - } - User.findById(req.payload.id).then(function (user) { if (!user) { return res.sendStatus(401); } + var limit = 25; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } var query = [ { '$match': { @@ -37,22 +36,87 @@ router.get('/', auth.required, function (req, res, next) { '$sum': 1 } } + }, { + '$sort': + { + '_id': 1 + }, } ]; - Promise.all([ - Jump.aggregate(query) - .limit(Number(limit)) - .skip(Number(offset)) - .exec() - ]).then(function (results) { - var dropzones = results[0]; + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var dropzones = result; return res.json({ dropzones: dropzones, dropzonesCount: dropzones.length }); }).catch(next); }).catch(next); +}); +router.get('/allByDate', auth.required, function (req, res, next) { + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var limit = 25; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$project': { + '_id': 0, + 'lieu': 1, + 'oaci': 1, + 'year': { + '$year': '$date' + } + } + }, { + '$group': { + '_id': { + 'lieu': '$lieu', + 'oaci': '$oaci', + 'year': '$year' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': { + '_id': 1 + } + } + ]; + + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var dropzones = result; + //console.log(dropzones); + return res.json({ + dropzones: dropzones, + dropzonesCount: dropzones.length + }); + }).catch(next); + }).catch(next); }); module.exports = router; diff --git a/routes/api/jumps.js b/routes/api/jumps.js index 2202d5b..b16b88a 100644 --- a/routes/api/jumps.js +++ b/routes/api/jumps.js @@ -17,9 +17,12 @@ router.param('jump', function (req, res, next, slug) { }).catch(next); }); +/** + * return all jumps + */ router.get('/', auth.required, function (req, res, next) { var query = {}; - var limit = 20; + var limit = 25; var offset = 0; if (typeof req.query.limit !== 'undefined') { limit = req.query.limit; @@ -51,7 +54,7 @@ router.get('/', auth.required, function (req, res, next) { Jump.find(query) .limit(Number(limit)) .skip(Number(offset)) - .sort({ numero: 'asc' }) + .sort({ numero: 'desc' }) .populate('author') .exec(), Jump.count(query).exec(), @@ -71,8 +74,71 @@ router.get('/', auth.required, function (req, res, next) { }).catch(next); }); +router.get('/allByDate', auth.required, function (req, res, next) { + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + var limit = 120; + var offset = 0; + if (typeof req.query.limit !== 'undefined') { + limit = req.query.limit; + } + if (typeof req.query.offset !== 'undefined') { + offset = req.query.offset; + } + var query = [ + { + '$match': { + '$expr': { + '$eq': [ '$author' , { '$toObjectId': user._id.toString() } ] + } + } + }, { + '$project': { + '_id': 0, + 'year': { + '$year': '$date' + }, + 'month': { + '$month': '$date' + } + } + }, { + '$group': { + '_id': { + 'year': '$year', + 'month': '$month' + }, + 'count': { + '$sum': 1 + } + } + }, { + '$sort': { + '_id': 1 + } + } + ]; + + Jump.aggregate(query) + .limit(Number(limit)) + .skip(Number(offset)) + .exec() + .then(function (result) { + var jumps = result; + //console.log(jumps); + return res.json({ + jumps: jumps, + jumpsCount: jumps.length + }); + }).catch(next); + }).catch(next); +}); + + router.get('/feed', auth.required, function (req, res, next) { - var limit = 20; + var limit = 25; var offset = 0; if (typeof req.query.limit !== 'undefined') { limit = req.query.limit; @@ -106,6 +172,64 @@ router.get('/feed', auth.required, function (req, res, next) { }); }); +/** + * return last jump + */ +router.get('/last', auth.required, function (req, res, next) { + + User.findById(req.payload.id).then(function (user) { + if (!user) { + return res.sendStatus(401); + } + /*Jump.findOne({ slug: slug }) + .populate('author') + .then(function (jump) { + if (!jump) { + return res.sendStatus(404); + } + req.jump = jump; + return next(); + }).catch(next);*/ + Jump.find({}) + .limit(1) + .skip(0) + .sort({ numero: 'desc' }) + .populate('author') + .exec() + .then(function (jumps) { + if (!jumps) { + return res.sendStatus(404); + } + req.lastjump = jumps[0]; + if (req.lastjump.author._id.toString() !== req.payload.id.toString()) { + return res.sendStatus(403); + } + return res.json({ jump: req.lastjump.toJSONFor(user) }); + }).catch(next); + }).catch(next); +}); +/** + * return a jump + */ +router.get('/:jump', auth.required, function (req, res, next) { + Promise.all([ + req.payload ? User.findById(req.payload.id) : null + /*req.jump.populate('author')*/ + ]).then(function (results) { + var user = results[0]; + if (!user) { + return res.sendStatus(401); + } + if (req.jump.author._id.toString() !== req.payload.id.toString()) { + return res.sendStatus(403); + } + return res.json({ jump: req.jump.toJSONFor(user) }); + }).catch(next); +}); + +/** + * save a jump + */ router.post('/', auth.required, function (req, res, next) { Promise.all([ req.payload ? User.findById(req.payload.id) : null @@ -128,23 +252,9 @@ router.post('/', auth.required, function (req, res, next) { }).catch(next); }); -// return a jump -router.get('/:jump', auth.required, function (req, res, next) { - Promise.all([ - req.payload ? User.findById(req.payload.id) : null - /*req.jump.populate('author')*/ - ]).then(function (results) { - var user = results[0]; - if (!user) { - return res.sendStatus(401); - } - if (req.jump.author._id.toString() !== req.payload.id.toString()) { - return res.sendStatus(403); - } - return res.json({ jump: req.jump.toJSONFor(user) }); - }).catch(next); -}); - +/** + * update a jump + */ router.put('/:jump', auth.required, function (req, res, next) { Promise.all([ req.payload ? User.findById(req.payload.id) : null @@ -217,7 +327,9 @@ router.put('/:jump', auth.required, function (req, res, next) { }).catch(next); }); -// delete jump +/** + * delete a jump + */ router.delete('/:jump', auth.required, function (req, res, next) { User.findById(req.payload.id).then(function (user) { if (!user) { diff --git a/routes/api/users.js b/routes/api/users.js index 4108f35..d218cda 100644 --- a/routes/api/users.js +++ b/routes/api/users.js @@ -36,6 +36,9 @@ router.put('/user', auth.required, function (req, res, next) { if (typeof req.body.user.licence !== 'undefined') { user.licence = req.body.user.licence; } + if (typeof req.body.user.poids !== 'undefined') { + user.poids = req.body.user.poids; + } if (typeof req.body.user.image !== 'undefined') { user.image = req.body.user.image; } @@ -106,8 +109,11 @@ router.post('/users', function (req, res, next) { if (typeof req.body.user.licence !== 'undefined') { user.licence = req.body.user.licence; } + if (typeof req.body.user.poids !== 'undefined') { + user.poids = req.body.user.poids; + } user.setPassword(req.body.user.password); - user.role = 'User'; // valeurs possibles : 'User' or 'Admin' + user.role = 'User'; user.save().then(function () { return res.json({ user: user.toAuthJSON() });