From 24f4851530a1475888788cbf6a7ab916bf5bd1da Mon Sep 17 00:00:00 2001 From: Usman Akram Date: Tue, 23 Jan 2024 17:23:30 +0500 Subject: [PATCH 1/4] middleware --- middlewares/sessionAuth.js | 5 ++- models/Product.js | 1 + routes/shop.js | 37 ++++++++++++++-------- views/layouts/partials/header.ejs | 11 +++++++ views/site/category.ejs | 51 +++++++++++++++++++++++++++++++ views/site/homepage.ejs | 4 +-- 6 files changed, 94 insertions(+), 15 deletions(-) create mode 100644 views/site/category.ejs diff --git a/middlewares/sessionAuth.js b/middlewares/sessionAuth.js index 8640487..141a0d9 100644 --- a/middlewares/sessionAuth.js +++ b/middlewares/sessionAuth.js @@ -1,5 +1,8 @@ -//sets user variable for pug files +//sets user variable for ejs files +let Category = require("../models/Category"); async function sessionAuth(req, res, next) { + let allCategories = await Category.find(); + res.locals.allCategories = allCategories; res.locals.user = req.session.user; res.locals.isAdmin = false; if (req.session.user) { diff --git a/models/Product.js b/models/Product.js index f3f53b5..49945ad 100644 --- a/models/Product.js +++ b/models/Product.js @@ -6,6 +6,7 @@ const productSchema = mongoose.Schema({ department: String, description: String, image: String, + category: { type: mongoose.Types.ObjectId, ref: "Category" }, }); const Product = mongoose.model("Product", productSchema); module.exports = Product; diff --git a/routes/shop.js b/routes/shop.js index 27262c5..0104234 100644 --- a/routes/shop.js +++ b/routes/shop.js @@ -1,6 +1,7 @@ var express = require("express"); var router = express.Router(); var Product = require("../models/Product"); +var Category = require("../models/Category"); router.get("/cart", async function (req, res, next) { let cart = req.cookies.cart; if (!cart) cart = []; @@ -21,8 +22,9 @@ router.get("/add-cart/:id", function (req, res, next) { req.flash("success", "Product Added To Cart"); res.redirect("/"); }); - -router.get("/:page?", async function (req, res, next) { +router.get("/collections/:slug/:page?", async function (req, res, next) { + let category = await Category.findOne({ slug: req.params.slug }); + if (!category) return next(); let page = Number(req.params.page); let pageSize = 10; let skip = (page - 1) * pageSize; @@ -30,27 +32,38 @@ router.get("/:page?", async function (req, res, next) { if (!skip) skip = 0; // return res.send({ page, pageSize, skip }); - let products = await Product.find().skip(skip).limit(pageSize); - let totalProducts = await Product.countDocuments(); + let products = await Product.find({ category: category._id }) + .skip(skip) + .limit(pageSize); + let totalProducts = await Product.countDocuments({ category: category._id }); let totalPages = Math.ceil(totalProducts / pageSize); - return res.render("site/homepage", { + + return res.render("site/category", { pagetitle: "Awesome Products", products, page, pageSize, totalPages, + category, }); }); - -router.get("/:Catagory?", async function (req, res, next) { - let Catagory = Number(req.params.page); - let Catagoies_items = [shirts, pants, begs, trousels, dresses]; +router.get("/:page?", async function (req, res, next) { + let page = Number(req.params.page); + let pageSize = 10; + let skip = (page - 1) * pageSize; + if (!page) page = 1; + if (!skip) skip = 0; // return res.send({ page, pageSize, skip }); + let products = await Product.find().skip(skip).limit(pageSize); + let totalProducts = await Product.countDocuments(); + let totalPages = Math.ceil(totalProducts / pageSize); return res.render("site/homepage", { - pagetitle: "All Catagories", - Catagory, - Catagoies_items, + pagetitle: "Awesome Products", + products, + page, + pageSize, + totalPages, }); }); diff --git a/views/layouts/partials/header.ejs b/views/layouts/partials/header.ejs index 0fc1f87..cd482d2 100644 --- a/views/layouts/partials/header.ejs +++ b/views/layouts/partials/header.ejs @@ -17,6 +17,17 @@ + + + +
  • Server Side Rendered Calculator
  • Ajax Calculator
  • Server Side Category Crud
  • +
  • Cookies Example
  • +
  • Session Example