| @@ -6,7 +6,9 @@ async function handler(req, res) { | |||
| await dbConnect(); | |||
| const pageIndex = req.query.page; | |||
| const pageIndex = req.query.pageIndex; | |||
| const category = req.query.category === 'All' ? '' : req.query.category; | |||
| const filterType = req.query.filterType; | |||
| if (pageIndex < 1) { | |||
| res.status(422).json({ | |||
| @@ -18,13 +20,17 @@ async function handler(req, res) { | |||
| switch (method) { | |||
| case 'GET': { | |||
| try { | |||
| const productCount = await Product.countDocuments(); | |||
| const productCount = await Product.find({ | |||
| category: { $regex: category }, | |||
| }).countDocuments(); | |||
| if (productCount === 0) { | |||
| res.status(200).json({ | |||
| message: 'There are currently no products in our database.', | |||
| product: [], | |||
| productCount: 0, | |||
| next: null, | |||
| previous: null, | |||
| }); | |||
| break; | |||
| } | |||
| @@ -33,18 +39,34 @@ async function handler(req, res) { | |||
| throw new Error('Page does not exist!'); | |||
| } | |||
| const product = await Product.find({}) | |||
| const product = await Product.find({ category: { $regex: category } }) | |||
| .skip((pageIndex - 1) * 9) | |||
| .limit(9); | |||
| .limit(9) | |||
| .sort(filterType === 'asc' ? 'name' : '-name '); | |||
| if (!product) { | |||
| throw new Error('There are currently no products in our database.'); | |||
| } | |||
| const previousUrl = | |||
| pageIndex > 1 | |||
| ? `https://localhost:3000/api/product?pageIndex=${ | |||
| parseInt(pageIndex) - 1 | |||
| }` | |||
| : null; | |||
| const nextUrl = | |||
| pageIndex * 9 < productCount | |||
| ? `https://localhost:3000/api/product?pageIndex=${ | |||
| parseInt(pageIndex) + 1 | |||
| }` | |||
| : null; | |||
| res.status(200).json({ | |||
| message: 'All products from our database were fetched successfully.', | |||
| product, | |||
| productCount, | |||
| next: nextUrl, | |||
| previous: previousUrl, | |||
| }); | |||
| } catch (error) { | |||
| res.status(400).json({ message: error.message }); | |||