From 28673688fb9d40e160540614767bfc020f6a5239 Mon Sep 17 00:00:00 2001 From: Smile Date: Tue, 20 Aug 2024 18:14:47 +0100 Subject: [PATCH] Lis --- .../vehicle/controller/vehicle.controller.js | 14 +++- feature/vehicle/route/vehicle.route.js | 18 +++-- package.json | 3 +- shared/middleware/advanced-result.js | 74 +++++++++++++++++++ 4 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 shared/middleware/advanced-result.js diff --git a/feature/vehicle/controller/vehicle.controller.js b/feature/vehicle/controller/vehicle.controller.js index 6c13593..bfd8216 100644 --- a/feature/vehicle/controller/vehicle.controller.js +++ b/feature/vehicle/controller/vehicle.controller.js @@ -3,8 +3,16 @@ const VehicleModel = require("../model/vehicle.model") //getAll module.exports.getAll = (async (req, res)=>{ - const vehicles = await VehicleModel.find(); - res.status(200).json({success: true, data : vehicles}); + + + //const vehicles = await VehicleModel.find({ mark: { $regex: search, $options: 'i' }}); + /* + const search = req.query.search + const vehicles = await VehicleModel.find({ $or:[{mark: { $regex: search, $options: 'i' }}, + {model: { $regex: search, $options: 'i' }}, {matricule: { $regex: search, $options: 'i' }}] }); + */ + //res.status(200).json({success: true, data : vehicles}); + res.status(200).json(res.advancedResults); }) //getById @@ -46,6 +54,6 @@ module.exports.delete = (async (req, res)=>{ return; } - await VehicleModel.deleteOne(req.params.id); + await VehicleModel.deleteOne({_id:req.params.id}); res.status(200).json({success: true, data :{} }); }) \ No newline at end of file diff --git a/feature/vehicle/route/vehicle.route.js b/feature/vehicle/route/vehicle.route.js index 82922f5..0ca14c0 100644 --- a/feature/vehicle/route/vehicle.route.js +++ b/feature/vehicle/route/vehicle.route.js @@ -1,21 +1,27 @@ const express = require("express"); const router = express.Router(); -const vehicleController = require("../controller/vehicle.controller") - +const vehicleController = require("../controller/vehicle.controller"); +const VehicleModel = require("../model/vehicle.model"); +const advancedResults = require("../../../shared/middleware/advanced-result") //get All -router.route('/').get(vehicleController.getAll); +//router.route('/').get(vehicleController.getAll); + +router + .route('/') + .get(advancedResults(VehicleModel), vehicleController.getAll) // path , ref et nom de l'entité + //getById -router.route('/').get(vehicleController.getById); +router.route('/:id').get(vehicleController.getById); //create router.route('/').post(vehicleController.create); //update -router.route('/').put(vehicleController.update); +router.route('/:id').put(vehicleController.update); //delete -router.route('/').delete(vehicleController.delete); +router.route('/:id').delete(vehicleController.delete); module.exports = router \ No newline at end of file diff --git a/package.json b/package.json index 01f90f3..aaec40e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon server" + "dev": "nodemon server", + "riche" : "nodemon server" }, "author": "Coryas", "license": "ISC", diff --git a/shared/middleware/advanced-result.js b/shared/middleware/advanced-result.js new file mode 100644 index 0000000..7578503 --- /dev/null +++ b/shared/middleware/advanced-result.js @@ -0,0 +1,74 @@ + +const advancedResult =(model)=> async (req, res, next) => { + //search : l'information que je cherche + //fields : les colonnes je veux utiliser pour la recherche + const fields = req.query.fields; + const search = req.query.search; + let page = req.query.page; + let limit = req.query.limit; + + + let find = {} + //Recherche + if (fields) { + + //Recherche l'element search dans le tableau de propriété fields + const query = { + $or: fields.map(property => ({ + [property]: {$regex: search, $options: 'i'} + })) + }; + + find = { + $and: [ + find, + query, + ] + }; + } + + //Pagination + page = parseInt(page, 10) || 1; + limit = parseInt(limit, 10) || 3000; + const startIndex = (page - 1) * limit; //1, 1-1 = 0 + const endIndex = page * limit; + const total = await model.find(find).countDocuments(); + + //declaration + let query = model.find(find); + + query = query.skip(startIndex).limit(limit); // (5,8) 5,6,7,8,9,10,11, 12 + + //exécuté + let results = await query; + const pagination = {}; + + if (endIndex < total) { + pagination.next = { + page: page + 1, + limit + }; + } + + if (startIndex > 0) { + pagination.prev = { + page: page - 1, + limit + }; + } + + res.advancedResults = { + success: true, + count: results.length, + pagination: pagination, + data: results, + startIndex: startIndex + 1, + endIndex: results.length, + totalRecords: total, + limit: Number(limit), + page: page + }; + next(); +}; + +module.exports = advancedResult; \ No newline at end of file