diff --git a/controllers/product.controllers.js b/controllers/product.controllers.js index 9c8cab3..e9813bd 100644 --- a/controllers/product.controllers.js +++ b/controllers/product.controllers.js @@ -236,6 +236,67 @@ const fetchAllProducts = async (req, res) => { return res.status(500).json({ message: 'Server error' }); } }; + + + +/////////////////////////////optional functions///////////////////////////////////// +//GET /api/products/get/optimal/1?products=productA,productB + +const fetchAllProductsOptimal = async (req, res) => { + try { + const page = parseInt(req.params.page) || 1; + const productFilter = req.query.products ? req.query.products.split(',') : []; + const PAGE_SIZE = 5; + + // Build filter + const filter = {}; + if (productFilter.length > 0) { + filter.name = { $in: productFilter }; // Update if your product field is different + } + + // Count and paginate + const totalProducts = await Products.countDocuments(filter); + const totalPages = Math.ceil(totalProducts / PAGE_SIZE); + const skip = (page - 1) * PAGE_SIZE; + + const products = await Products.find(filter) + .skip(skip) + .limit(PAGE_SIZE) + .lean(); + + if (!products || products.length === 0) { + return res.status(404).json({ + status: 404, + message: 'No product to Display', + data: [] + }); + } + + const responseData = products.map(p => ({ + id: p._id, + products: [p.name] // adjust fields as needed + })); + + return res.status(200).json({ + data: responseData, + pagination: { + products: totalProducts, + totalPages, + currentPage: page + }, + filtersApplied: { + ...(productFilter.length > 0 && { products: productFilter }) + } + }); + } catch (err) { + console.error('Error in fetchAllProductsOptimal:', err); + return res.status(500).json({ message: 'Server error' }); + } +}; + + + + //Function to display a product const fetchProduct = async (req, res) => { try { @@ -264,4 +325,4 @@ const fetchProduct = async (req, res) => { return res.status(500).json({ message: 'Server error' }); } } -module.exports = { addProduct, updateProduct, fetchProduct, fetchAllProducts, bulkUpdateProducts }; +module.exports = { addProduct, updateProduct, fetchProduct, fetchAllProducts,fetchAllProductsOptimal, bulkUpdateProducts }; diff --git a/routers/product.js b/routers/product.js index cca190f..dc50d68 100644 --- a/routers/product.js +++ b/routers/product.js @@ -1,7 +1,7 @@ // routes/products.js const express = require('express'); const product = express.Router(); -const { addProduct, updateProduct, fetchAllProducts, fetchProduct, bulkUpdateProducts } = require('../controllers/product.controllers'); +const { addProduct, updateProduct, fetchAllProducts,fetchAllProductsOptimal, fetchProduct, bulkUpdateProducts } = require('../controllers/product.controllers'); const { admintokenValidator, tokenValidator } = require('../middleware/auth/tokenvalidate.js'); const multer = require('multer'); const upload = multer({ storage: multer.memoryStorage() }); @@ -10,6 +10,9 @@ product.post('/add', admintokenValidator, addProduct); // product.post('/bulkAdd', upload.single('file'),admintokenValidator, bulkAddProducts); product.put('/update/:id', admintokenValidator, updateProduct); product.get('/get', tokenValidator, fetchAllProducts); +product.get('/get/optimal/:page', fetchAllProductsOptimal); + + product.get('/get/:id', tokenValidator, fetchProduct); product.post('/bulkupdate',admintokenValidator, bulkUpdateProducts);