├── .gitignore ├── screenshot.png ├── views ├── error.ejs ├── pages │ ├── careers.ejs │ ├── about-us.ejs │ ├── shipping-policy.ejs │ └── contact-us.ejs ├── partials │ ├── pagination.ejs │ ├── categories-navbar.ejs │ ├── footer.ejs │ └── header.ejs ├── user │ ├── signin.ejs │ ├── signup.ejs │ └── profile.ejs └── shop │ ├── product.ejs │ ├── checkout.ejs │ ├── shopping-cart.ejs │ ├── index.ejs │ └── home.ejs ├── public ├── images │ ├── dept0.jpg │ ├── dept1.jpg │ ├── dept2.jpg │ ├── slide1.jpg │ ├── slide2.jpg │ ├── slide3.jpg │ ├── shop-icon.png │ ├── banner-purses.jpg │ ├── banner-totes.jpg │ ├── banner-travel.jpg │ ├── banner-admin-page.jpg │ ├── banner-backpacks.jpg │ ├── banner-briefcases.jpg │ ├── banner-mini-bags.jpg │ ├── banner-all-products.jpg │ └── banner-large-handbags.jpg ├── javascripts │ ├── main.js │ ├── map.js │ └── checkout.js └── stylesheets │ └── style.css ├── models ├── category.js ├── user.js ├── product.js ├── cart.js └── order.js ├── middleware └── index.js ├── components ├── admin-imgPath-component.jsx ├── admin-dashboard-component.jsx └── admin-order-component.jsx ├── config ├── db.js ├── passport.js └── validator.js ├── seedDB ├── category-seed.js └── products-seed.js ├── package.json ├── routes ├── pages.js ├── products.js ├── user.js ├── admin.js └── index.js ├── app.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .env 3 | /.adminbro -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/screenshot.png -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 |
<%= error.stack %>4 | -------------------------------------------------------------------------------- /public/images/dept0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/dept0.jpg -------------------------------------------------------------------------------- /public/images/dept1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/dept1.jpg -------------------------------------------------------------------------------- /public/images/dept2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/dept2.jpg -------------------------------------------------------------------------------- /public/images/slide1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/slide1.jpg -------------------------------------------------------------------------------- /public/images/slide2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/slide2.jpg -------------------------------------------------------------------------------- /public/images/slide3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/slide3.jpg -------------------------------------------------------------------------------- /public/images/shop-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/shop-icon.png -------------------------------------------------------------------------------- /public/images/banner-purses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-purses.jpg -------------------------------------------------------------------------------- /public/images/banner-totes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-totes.jpg -------------------------------------------------------------------------------- /public/images/banner-travel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-travel.jpg -------------------------------------------------------------------------------- /public/images/banner-admin-page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-admin-page.jpg -------------------------------------------------------------------------------- /public/images/banner-backpacks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-backpacks.jpg -------------------------------------------------------------------------------- /public/images/banner-briefcases.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-briefcases.jpg -------------------------------------------------------------------------------- /public/images/banner-mini-bags.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-mini-bags.jpg -------------------------------------------------------------------------------- /public/images/banner-all-products.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-all-products.jpg -------------------------------------------------------------------------------- /public/images/banner-large-handbags.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maryamaljanabi/bestbags-nodejs-ecommerce/HEAD/public/images/banner-large-handbags.jpg -------------------------------------------------------------------------------- /public/javascripts/main.js: -------------------------------------------------------------------------------- 1 | // fade out for flash messages 2 | setTimeout(function () { 3 | $("#flash-msg").fadeOut("slow"); 4 | }, 3000); 5 | 6 | setTimeout(function () { 7 | $("#success").fadeOut("slow"); 8 | }, 3000); 9 | 10 | setTimeout(function () { 11 | $("#error").fadeOut("slow"); 12 | }, 3000); 13 | -------------------------------------------------------------------------------- /public/javascripts/map.js: -------------------------------------------------------------------------------- 1 | mapboxgl.accessToken = 2 | "pk.eyJ1IjoibS0xMzVhIiwiYSI6ImNrOGsyb3ZqaDBkemkzcW10emc1eXoyNngifQ.NuSNrMKqrpdm-jxvPpx0_Q"; 3 | const lat = 48.8606; 4 | const lng = 2.3376; 5 | 6 | const map = new mapboxgl.Map({ 7 | container: "map", 8 | style: "mapbox://styles/mapbox/streets-v11", 9 | zoom: 8, 10 | center: [lng, lat], 11 | }); 12 | 13 | const marker = new mapboxgl.Marker().setLngLat([lng, lat]).addTo(map); 14 | -------------------------------------------------------------------------------- /models/category.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const Schema = mongoose.Schema; 3 | const slug = require("mongoose-slug-updater"); 4 | 5 | mongoose.plugin(slug); 6 | 7 | const categorySchema = Schema({ 8 | title: { 9 | type: String, 10 | required: true, 11 | }, 12 | slug: { 13 | type: String, 14 | unique: true, 15 | slug: "title", 16 | }, 17 | }); 18 | 19 | module.exports = mongoose.model("Category", categorySchema); 20 | -------------------------------------------------------------------------------- /middleware/index.js: -------------------------------------------------------------------------------- 1 | let middlewareObject = {}; 2 | 3 | //a middleware to check if a user is logged in or not 4 | middlewareObject.isNotLoggedIn = (req, res, next) => { 5 | if (!req.isAuthenticated()) { 6 | return next(); 7 | } 8 | res.redirect("/"); 9 | }; 10 | 11 | middlewareObject.isLoggedIn = (req, res, next) => { 12 | if (req.isAuthenticated()) { 13 | return next(); 14 | } 15 | res.redirect("/user/signin"); 16 | }; 17 | 18 | module.exports = middlewareObject; 19 | -------------------------------------------------------------------------------- /components/admin-imgPath-component.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Label } from "admin-bro"; 3 | 4 | const imgStyle = { 5 | width: "30em", 6 | border: "2px solid gray", 7 | borderRadius: "11px", 8 | margin: "1em auto", 9 | }; 10 | 11 | const AdminShowImage = (props) => { 12 | const { record, property } = props; 13 | return ( 14 |
9 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores nam 10 | voluptatem adipisci sed amet ipsa quod reiciendis eos. Magnam ad 11 | sapiente aut a libero aliquam veritatis incidunt molestiae tempora? 12 |
13 |
14 | If you are interested in working with us, please send your CV to the
15 | following email and we will get back to you.
16 |
17 |
18 | hr@email.com
19 |
20 |
37 | 9 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores nam 10 | voluptatem adipisci sed amet ipsa quod reiciendis eos. Magnam ad 11 | sapiente aut a libero aliquam veritatis incidunt molestiae tempora? 12 |
13 |14 | Maxime! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore 15 | autem assumenda vel laudantium quo ipsum omnis earum nostrum, excepturi 16 | quibusdam, dicta cupiditate voluptatibus aperiam molestiae? Facilis 17 | ipsum esse eligendi nobis. 18 |
19 |33 | Don't have an account? Sign Up! 34 |
35 |