Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
3799338
chapter 52
rupeshtiwari Apr 18, 2020
7fa33ea
chapter 51 & 52
rupeshtiwari Apr 18, 2020
e3b38bc
chapter 53
rupeshtiwari Apr 18, 2020
17c4c71
Merge branch 'master' of https://github.com/rupeshtiwari/product-mart…
rupeshtiwari May 11, 2020
056f38e
cart summary
rupeshtiwari May 12, 2020
32e1597
Merge branch 'master' of https://github.com/rupeshtiwari/product-mart…
rupeshtiwari May 12, 2020
5a214a4
added cart summary page
rupeshtiwari May 12, 2020
b85b31d
Merge branch 'master' of https://github.com/rupeshtiwari/product-mart…
rupeshtiwari May 13, 2020
4e3d437
update and delte
rupeshtiwari May 13, 2020
13220b2
Merge branch 'master' of https://github.com/rupeshtiwari/product-mart…
rupeshtiwari May 18, 2020
e6efc97
showing coming soon dialog
rupeshtiwari May 18, 2020
9c7962e
finishing
rupeshtiwari May 18, 2020
d965489
Merge branch 'master' of
rupeshtiwari May 19, 2020
973d284
merged
rupeshtiwari May 19, 2020
bdc5031
#chapter 59 Coding to make paypal working
rupeshtiwari May 19, 2020
4c8a74b
ServerSide: Submit Order
rupeshtiwari May 19, 2020
6a5796d
submit order
rupeshtiwari May 20, 2020
cf28a13
fixing refresh and retaining user
rupeshtiwari May 20, 2020
4150c75
Merge branch 'practice-retainuser-afterlogin' of https://github.com/r…
rupeshtiwari May 20, 2020
f50d147
fixing submit order
rupeshtiwari May 20, 2020
6df6350
fixed login logout refresh
rupeshtiwari May 20, 2020
cc6b49f
fixing paypal
rupeshtiwari May 20, 2020
264dca6
order success
rupeshtiwari May 20, 2020
d8acf21
chapter 64 Making Responsive Thank you Page
rupeshtiwari May 21, 2020
433ded7
chapter 65,66,67
rupeshtiwari May 22, 2020
8f68a3a
chapter 67
rupeshtiwari May 22, 2020
ef25717
submit order
rupeshtiwari May 25, 2020
1226cef
finishing order history
rupeshtiwari May 26, 2020
9dca8c3
order details page
rupeshtiwari May 26, 2020
f7d0189
sending emails
rupeshtiwari May 26, 2020
3721962
checin
rupeshtiwari Nov 4, 2020
8d4aeb0
Update package.json
rupeshtiwari Nov 4, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@ NODE_ENV = development
PORT = 4050
MONGODB_URI = mongodb://localhost/productmart
MONGOOSE_DEBUG = true
JWT_SECRET=1580d64d-b71f-43d5-8e3b-02330b63175e
JWT_SECRET=1580d64d-b71f-43d5-8e3b-02330b63175e
EMAIL_ID=''
EMAIL_SERVICE='gmail'
EMAIL_PASSWORD=''
20 changes: 20 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Server",
"port": 9229,
"cwd": "${workspaceFolder}",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"server:debug"
]
}
]
}
32 changes: 15 additions & 17 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
{
"workbench.colorCustomizations": {
"activityBar.background": "#73407e",
"activityBar.activeBackground": "#73407e",
"activityBar.activeBorder": "#94874b",
"activityBar.foreground": "#e7e7e7",
"activityBar.inactiveForeground": "#e7e7e799",
"activityBarBadge.background": "#94874b",
"activityBarBadge.foreground": "#15202b",
"titleBar.activeBackground": "#542f5c",
"titleBar.inactiveBackground": "#542f5c99",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveForeground": "#e7e7e799",
"statusBar.background": "#542f5c",
"statusBarItem.hoverBackground": "#73407e",
"statusBar.foreground": "#e7e7e7",
"statusBar.border": "#542f5c",
"titleBar.border": "#542f5c"
"activityBar.background": "#e2b486",
"activityBar.activeBackground": "#e2b486",
"activityBar.activeBorder": "#1f8150",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#1f8150",
"activityBarBadge.foreground": "#e7e7e7",
"titleBar.activeBackground": "#d89b5d",
"titleBar.inactiveBackground": "#d89b5d99",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveForeground": "#15202b99",
"statusBar.background": "#d89b5d",
"statusBarItem.hoverBackground": "#ce8234",
"statusBar.foreground": "#15202b"
},
"peacock.color": "#542f5c"
"peacock.color": "#d89b5d"
}
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "product-mart",
"version": "1.0.0",
"version": "1.0.1",
"engines": {
"node": "10.x"
},
Expand All @@ -18,7 +18,7 @@
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"debug": "node --nolazy --inspect-brk=9229 server"
"server:debug": "node --nolazy --inspect-brk=9229 server"
},
"private": true,
"dependencies": {
Expand Down Expand Up @@ -48,6 +48,7 @@
"mongoose": "^5.5.7",
"morgan": "^1.9.1",
"node-pre-gyp": "^0.14.0",
"nodemailer": "^6.4.6",
"passport": "^0.4.0",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
Expand Down
5 changes: 4 additions & 1 deletion server/config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@ module.exports = {
port: envVars.MONGO_PORT,
isDebug: envVars.MONGOOSE_DEBUG
},
jwtSecret : envVars.JWT_SECRET
jwtSecret : envVars.JWT_SECRET,
emailId : envVars.EMAIL_ID,
emailService: envVars.EMAIL_SERVICE,
emailPassword: envVars.EMAIL_PASSWORD,
};
46 changes: 46 additions & 0 deletions server/controllers/order.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const Order = require("../models/order.model");
const User = require("../models/user.model");

const { sendEmail } = require("../services/email-sender.service");

async function submitOrder(order) {
// make a mogoose db call to save order in db
console.log(`Creating Order`, order);

const createdOrder = await new Order(order).save();

const user = await User.findById(createdOrder.userId);

sendEmail(createdOrder, user);

console.log(`Order created successfully for user ${user.id}`, createdOrder);

return createdOrder;
}

async function getOrderById(orderId) {
console.log(`Searching order for order`, orderId);

return await Order.findById(orderId);
}

async function getOrderByUserId(userId) {
console.log(`Searching order for user`, userId);

return await Order.find({
userId,
});
}

async function getAllOrders() {
console.log(`Fetching all orders`);

return await Order.find({});
}

module.exports = {
submitOrder,
getOrderById,
getAllOrders,
getOrderByUserId,
};
25 changes: 14 additions & 11 deletions server/middleware/passport.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,39 @@
const passport = require('passport');
const LocalStrategy = require('passport-local');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJWT = require('passport-jwt').ExtractJwt;
const passport = require("passport");
const LocalStrategy = require("passport-local");
const JwtStrategy = require("passport-jwt").Strategy;
const ExtractJWT = require("passport-jwt").ExtractJwt;

const config = require('../config/config');
const userController = require('../controllers/user.controller');
const config = require("../config/config");
const userController = require("../controllers/user.controller");

const localLogin = new LocalStrategy(
{
usernameFeild: 'email'
usernameField: "email",
},
async (email, password, done) => {
const user = userController.getUserByEmailIdAndPassword(email, password);
const user = await userController.getUserByEmailIdAndPassword(
email,
password
);
return user
? done(null, user)
: done(null, false, {
error: 'Your login details are not valid. Please try again'
error: "Your login details are not valid. Please try again",
});
}
);

const jwtLogin = new JwtStrategy(
{
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey: config.jwtSecret
secretOrKey: config.jwtSecret,
},
async (payload, done) => {
const user = await userController.getUserById(payload._id);
return user
? done(null, user)
: done(null, false, {
error: 'Your login details are not valid. Please try again'
error: "Your login details are not valid. Please try again",
});
}
);
Expand Down
62 changes: 62 additions & 0 deletions server/models/order.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
userId: {
type: String,
required: true,
},
orderTotal: {
type: Number,
required: true,
},
orderSubTotal: {
type: Number,
required: true,
},
itemsCount: {
type: Number,
required: true,
},
shippingCost: {
type: Number,
required: true,
},
estimatedTax: {
type: Number,
required: true,
},
deliveryDate: {
type: Date,
default: Date.now,
},
shippingAddress: {
type: String,
required: true,
},
itemList: [
{
id: "string",
price: "number",
name: "string",
imgUrl: "string",
quantity: "number",
itemTotal: "number",
},
],

cartId: {
type: String,
required: true,
},
paymentId: {
type: String,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
versionKey: false,
});

module.exports = mongoose.model("Order", UserSchema);
27 changes: 9 additions & 18 deletions server/routes/auth.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@ const asyncHandler = require("express-async-handler");
const userController = require("../controllers/user.controller");
const authController = require("../controllers/auth.controller");
const passport = require("../middleware/passport");

const router = express.Router();

// localhost:4050/api/auth/register
router.post("/register", asyncHandler(insert), login);
router.post("/login", asyncHandler(getUserByEmailIdAndPassword), login);
// localhost:4050/api/auth/login
router.post(
"/login",
passport.authenticate("local", { session: false }),
login
);

router.get("/findme", passport.authenticate("jwt", { session: false }), login);

async function insert(req, res, next) {
Expand All @@ -19,26 +24,12 @@ async function insert(req, res, next) {
next();
}

async function getUserByEmailIdAndPassword(req, res, next) {
const user = req.body;
console.log(`searching user for `, user);

const savedUser = await userController.getUserByEmailIdAndPassword(
user.email,
user.password
);

req.user = savedUser;

next();
}

function login(req, res) {
const user = req.user;
const {user } = req;
const token = authController.generateToken(user);
res.json({
user,
token
token,
});
}

Expand Down
9 changes: 6 additions & 3 deletions server/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
const express = require('express');
const authRoutes = require('./auth.route');
const express = require("express");
const authRoutes = require("./auth.route");
const orderRoutes = require("./order.route");
const router = express.Router();

// localhost:4050/api/auth
router.use('/auth', authRoutes);
router.use("/auth", authRoutes);
// localhost:4050/api/orders
router.use("/orders", orderRoutes);

module.exports = router;
Loading