Payment purchase date
This commit is contained in:
parent
375a1fe0b5
commit
3f8776af1e
|
@ -1,197 +1,187 @@
|
|||
const razorpay = require('razorpay') ;
|
||||
const Order = require('../models/Order') ;
|
||||
const User = require('../models/User') ;
|
||||
const CourseType = require('../models/CourseType') ;
|
||||
const Course = require('../models/Course') ;
|
||||
const Student = require('../models/Student') ;
|
||||
const Coupon = require('../models/Coupon') ;
|
||||
const { getAllCoupons } = require('./coupon');
|
||||
const razorpay = require("razorpay");
|
||||
const Order = require("../models/Order");
|
||||
const User = require("../models/User");
|
||||
const CourseType = require("../models/CourseType");
|
||||
const Course = require("../models/Course");
|
||||
const Student = require("../models/Student");
|
||||
const Coupon = require("../models/Coupon");
|
||||
const { getAllCoupons } = require("./coupon");
|
||||
|
||||
//test credentials of razorpay
|
||||
const instance = new razorpay({
|
||||
key_id : process.env.KEY_ID ,
|
||||
key_secret : process.env.KEY_SECRET
|
||||
}) ;
|
||||
key_id: process.env.KEY_ID,
|
||||
key_secret: process.env.KEY_SECRET,
|
||||
});
|
||||
|
||||
module.exports.postVerify =async (req , res , next) => {
|
||||
|
||||
try
|
||||
{
|
||||
module.exports.postVerify = async (req, res, next) => {
|
||||
try {
|
||||
//Secret we put in razorpay
|
||||
const SECRET = 'CantileverLabs' ;
|
||||
const SECRET = "CantileverLabs";
|
||||
|
||||
const crypto = require('crypto')
|
||||
const crypto = require("crypto");
|
||||
|
||||
const shasum = crypto.createHmac('sha256', SECRET) ;
|
||||
shasum.update(JSON.stringify(req.body))
|
||||
const digest = shasum.digest('hex')
|
||||
const shasum = crypto.createHmac("sha256", SECRET);
|
||||
shasum.update(JSON.stringify(req.body));
|
||||
const digest = shasum.digest("hex");
|
||||
|
||||
//if secret is matched
|
||||
if (digest === req.headers['x-razorpay-signature']) {
|
||||
console.log('request is legit')
|
||||
if (digest === req.headers["x-razorpay-signature"]) {
|
||||
console.log("request is legit");
|
||||
// process it
|
||||
const orderId = req.body.payload.payment.entity.order_id ;
|
||||
const orderId = req.body.payload.payment.entity.order_id;
|
||||
//fetching the order from the orderId
|
||||
let order = await Order.findOne({orderId:orderId}) ;
|
||||
let courseId = order.course ;
|
||||
let order = await Order.findOne({ orderId: orderId });
|
||||
let courseId = order.course;
|
||||
//adding the payment detail
|
||||
order.paymentDetail = req.body.payload.payment ;
|
||||
order.paymentDetail = req.body.payload.payment;
|
||||
//making the paymentSuccess as true
|
||||
order.paymentSuccess = true ;
|
||||
order.paymentSuccess = true;
|
||||
|
||||
//now getting the details of user which has bought this course
|
||||
const userId = order.user ;
|
||||
let user = await User.findById(userId) ;
|
||||
let student =await Student.findById(user.student) ;
|
||||
const userId = order.user;
|
||||
let user = await User.findById(userId);
|
||||
let student = await Student.findById(user.student);
|
||||
|
||||
let ind = -1 ;
|
||||
let ind = -1;
|
||||
//checking whether user has already bought this course or not
|
||||
if(student.courses)
|
||||
{
|
||||
ind = student.courses.findIndex(course => String(course.basicInfo) == String(courseId)) ;
|
||||
if (student.courses) {
|
||||
ind = student.courses.findIndex(
|
||||
(course) => String(course.basicInfo) == String(courseId)
|
||||
);
|
||||
}
|
||||
console.log(ind);
|
||||
if(ind == -1)
|
||||
{
|
||||
if (ind == -1) {
|
||||
//adding a new object in the courses array of student
|
||||
let newObj = {
|
||||
basicInfo : courseId ,
|
||||
details : {
|
||||
completed : []
|
||||
}
|
||||
}
|
||||
let courses = [...student.courses] ;
|
||||
courses.push(newObj) ;
|
||||
student.courses = courses ;
|
||||
await student.save() ;
|
||||
await order.save() ;
|
||||
basicInfo: courseId,
|
||||
details: {
|
||||
completed: [],
|
||||
},
|
||||
};
|
||||
let courses = [...student.courses];
|
||||
courses.push(newObj);
|
||||
student.courses = courses;
|
||||
await student.save();
|
||||
await order.save();
|
||||
res.status(200).json({
|
||||
status : 'ok'
|
||||
}) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
status: "ok",
|
||||
});
|
||||
} else {
|
||||
//user has already bought this course
|
||||
res.status(200).json({
|
||||
error:'already paid'
|
||||
})
|
||||
error: "already paid",
|
||||
});
|
||||
}
|
||||
|
||||
//now updating that course in user also
|
||||
//console.log(req.body.payload.payment) ;
|
||||
//require('fs').writeFileSync('payment1.json', JSON.stringify(req.body, null, 4))
|
||||
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// pass it
|
||||
console.log("HELLO IN ERROR");
|
||||
res.status(200).json({
|
||||
error:'error'
|
||||
})
|
||||
error: "error",
|
||||
});
|
||||
}
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} ;
|
||||
|
||||
module.exports.postRazorpay = async (req , res , next) => {
|
||||
try
|
||||
{
|
||||
|
||||
module.exports.postRazorpay = async (req, res, next) => {
|
||||
try {
|
||||
//this route will be called after clicking the payment
|
||||
|
||||
//here this is the id of courseType
|
||||
const courseId = req.body.courseId ;
|
||||
const couponCode = req.body.couponCode ;
|
||||
const userId = req.user._id ;
|
||||
const courseId = req.body.courseId;
|
||||
const couponCode = req.body.couponCode;
|
||||
const userId = req.user._id;
|
||||
|
||||
console.log("Course ID =" ,courseId ," Coupon code =" , couponCode ," user ID =" , userId) ;
|
||||
console.log(
|
||||
"Course ID =",
|
||||
courseId,
|
||||
" Coupon code =",
|
||||
couponCode,
|
||||
" user ID =",
|
||||
userId
|
||||
);
|
||||
|
||||
let user = await User.findById(userId) ;
|
||||
let student =await Student.findById(user.student) ;
|
||||
let course =await CourseType.findById(courseId) ;
|
||||
let user = await User.findById(userId);
|
||||
let student = await Student.findById(user.student);
|
||||
let course = await CourseType.findById(courseId);
|
||||
|
||||
console.log(student.courses);
|
||||
//we are creating a new order associated to it
|
||||
//we are setting the paymentSuccess to be false
|
||||
|
||||
let discount = 0 ;
|
||||
let discount = 0;
|
||||
|
||||
let coupon = await Coupon.findOne({couponCode : couponCode}) ;
|
||||
if(coupon && coupon.numAllowed > 0)
|
||||
{
|
||||
discount = coupon.percentage ;
|
||||
let coupon = await Coupon.findOne({ couponCode: couponCode });
|
||||
if (coupon && coupon.numAllowed > 0) {
|
||||
discount = coupon.percentage;
|
||||
}
|
||||
|
||||
let ind = -1 ;
|
||||
let ind = -1;
|
||||
//checking whether user has already bought this course or not
|
||||
if(student.courses)
|
||||
{
|
||||
ind = student.courses.findIndex(course => String(course.basicInfo) == String(courseId)) ;
|
||||
if (student.courses) {
|
||||
ind = student.courses.findIndex(
|
||||
(course) => String(course.basicInfo) == String(courseId)
|
||||
);
|
||||
}
|
||||
console.log(ind);
|
||||
if(ind == -1)
|
||||
{
|
||||
if (ind == -1) {
|
||||
let order = new Order({
|
||||
course : courseId ,
|
||||
user : userId ,
|
||||
paymentSuccess : false
|
||||
}) ;
|
||||
course: courseId,
|
||||
user: userId,
|
||||
paymentSuccess: false,
|
||||
date_purchased: Date.now().toString(),
|
||||
});
|
||||
|
||||
order = await order.save() ;
|
||||
order = await order.save();
|
||||
|
||||
const payment_capture = 1 ;
|
||||
const payment_capture = 1;
|
||||
|
||||
//setting the amount according to the course
|
||||
let amount = Number(course.amount) ;
|
||||
let amount = Number(course.amount);
|
||||
|
||||
amount = amount - amount*discount/100 ;
|
||||
amount = amount - (amount * discount) / 100;
|
||||
|
||||
amount = Math.ceil(amount) ;
|
||||
amount = Math.ceil(amount);
|
||||
|
||||
const options = {amount : (amount*100).toString()
|
||||
, currency : "INR"
|
||||
, receipt : order._id.toString()
|
||||
, payment_capture
|
||||
} ;
|
||||
const options = {
|
||||
amount: (amount * 100).toString(),
|
||||
currency: "INR",
|
||||
receipt: order._id.toString(),
|
||||
payment_capture,
|
||||
};
|
||||
|
||||
//this is a razorpay feature
|
||||
const response = await instance.orders.create(options) ;
|
||||
const response = await instance.orders.create(options);
|
||||
|
||||
order.orderId = response.id ;
|
||||
await order.save() ;
|
||||
order.orderId = response.id;
|
||||
await order.save();
|
||||
res.status(200).json({
|
||||
id:response.id ,
|
||||
currency : response.currency ,
|
||||
amount : response.amount ,
|
||||
name:(user.firstName + " " + user.lastName) ,
|
||||
email:user.email ,
|
||||
receipt : response.receipt
|
||||
id: response.id,
|
||||
currency: response.currency,
|
||||
amount: response.amount,
|
||||
name: user.firstName + " " + user.lastName,
|
||||
email: user.email,
|
||||
receipt: response.receipt,
|
||||
});
|
||||
if(coupon && coupon.numAllowed > 0)
|
||||
{
|
||||
coupon.numAllowed = coupon.numAllowed - 1 ;
|
||||
await coupon.save() ;
|
||||
if (coupon && coupon.numAllowed > 0) {
|
||||
coupon.numAllowed = coupon.numAllowed - 1;
|
||||
await coupon.save();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
//user has already bought this course
|
||||
res.status(500).json({
|
||||
error:'already paid'
|
||||
})
|
||||
error: "already paid",
|
||||
});
|
||||
}
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
res.status(500).json({
|
||||
error : "error"
|
||||
})
|
||||
error: "error",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
const mongoose = require('mongoose') ;
|
||||
const mongoose = require("mongoose");
|
||||
|
||||
const Schema = mongoose.Schema ;
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
const orderSchema = new Schema({
|
||||
user : {
|
||||
type:mongoose.Types.ObjectId ,
|
||||
ref:'User' ,
|
||||
required:true
|
||||
} ,
|
||||
course : {
|
||||
type: mongoose.Types.ObjectId ,
|
||||
ref : 'CourseType' ,
|
||||
required : true
|
||||
user: {
|
||||
type: mongoose.Types.ObjectId,
|
||||
ref: "User",
|
||||
required: true,
|
||||
},
|
||||
paymentSuccess : {
|
||||
type:Boolean ,
|
||||
required : true
|
||||
} ,
|
||||
paymentDetail : {
|
||||
type:Object
|
||||
} ,
|
||||
orderId : {
|
||||
type : String
|
||||
}
|
||||
}) ;
|
||||
course: {
|
||||
type: mongoose.Types.ObjectId,
|
||||
ref: "CourseType",
|
||||
required: true,
|
||||
},
|
||||
paymentSuccess: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
paymentDetail: {
|
||||
type: Object,
|
||||
},
|
||||
orderId: {
|
||||
type: String,
|
||||
},
|
||||
date_purchased: { type: Date },
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Order' , orderSchema) ;
|
||||
module.exports = mongoose.model("Order", orderSchema);
|
||||
|
|
Loading…
Reference in New Issue