From d279de1c68f3590b64e6f1d908b783085920e129 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Wed, 5 May 2021 18:26:43 +0530 Subject: [PATCH 1/7] Made route field in courses --- controllers/course.js | 26 +++++++++++++++++++++++++- controllers/payment.js | 2 +- models/Course.js | 4 ++++ routes/course.js | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/controllers/course.js b/controllers/course.js index b4b8317..ec6dd44 100644 --- a/controllers/course.js +++ b/controllers/course.js @@ -8,6 +8,7 @@ module.exports.postAddCourse = async (req , res , next) => { let name = req.body.name ; let mentor = req.body.mentor ; let totalLectures = req.body.totalLectures ; + let route = req.body.route if(name) { name = name.trim() ; @@ -16,6 +17,10 @@ module.exports.postAddCourse = async (req , res , next) => { { mentor = mentor.trim() ; } + if(route) + { + route = route.trim() ; + } if(totalLectures) { totalLectures = Number(totalLectures) ; @@ -24,7 +29,8 @@ module.exports.postAddCourse = async (req , res , next) => { let course = new Course({ name : name , mentor : mentor , - totalLectures : totalLectures + totalLectures : totalLectures , + route : route }) ; ; course = await course.save() ; @@ -147,3 +153,21 @@ module.exports.getTierCourse = async (req , res , next) => { }) } } + + +module.exports.getFromRoute = async (req , res , next) => { + try{ + const route = req.query.route ; + const course = await Course.findOne({route :route}).populate("types.tier1").populate("types.tier2").populate("types.tier3") ; + console.log(course); + res.json({ + course : course + }) + } + catch(err) + { + res.json({ + error : "error" + }) + } +} \ No newline at end of file diff --git a/controllers/payment.js b/controllers/payment.js index 7c0210d..453bb41 100644 --- a/controllers/payment.js +++ b/controllers/payment.js @@ -103,7 +103,7 @@ module.exports.postRazorpay = async (req , res , next) => { //this route will be called after clicking the payment //here this is the id of courseType - const courseId = req.body.courseId || "6074201a4f355c3e4830dfe0" ; + const courseId = req.body.courseId ; const userId = req.user._id ; let user = await User.findById(userId) ; let student =await Student.findById(user.student) ; diff --git a/models/Course.js b/models/Course.js index 7a3f328..c37b7e9 100644 --- a/models/Course.js +++ b/models/Course.js @@ -15,6 +15,10 @@ const courseSchema = new Schema({ type : Number , required : true } , + route: { + type : String , + required : true + } , meetings : [ { startTime : { diff --git a/routes/course.js b/routes/course.js index afb025b..bd8dc15 100644 --- a/routes/course.js +++ b/routes/course.js @@ -19,4 +19,6 @@ router.post('/getTierCourse' , courseController.getTierCourse) ; //It is a post request router.post('/getMeetSchedule' ,isAuth , courseController.getMeetSchedule) ; +router.get('/getFromRoute' , courseController.getFromRoute) ; + module.exports = router ; \ No newline at end of file From 31e7944eed86d7095f79fe28ee7239063d3d933f Mon Sep 17 00:00:00 2001 From: hardcodder Date: Wed, 5 May 2021 18:29:02 +0530 Subject: [PATCH 2/7] Made route field in courses --- controllers/course.js | 1 - 1 file changed, 1 deletion(-) diff --git a/controllers/course.js b/controllers/course.js index ec6dd44..a758911 100644 --- a/controllers/course.js +++ b/controllers/course.js @@ -154,7 +154,6 @@ module.exports.getTierCourse = async (req , res , next) => { } } - module.exports.getFromRoute = async (req , res , next) => { try{ const route = req.query.route ; From 35062f5068a022579e3c9eec166465c290f8bca1 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Wed, 5 May 2021 19:04:23 +0530 Subject: [PATCH 3/7] Updated Coupon --- app.js | 4 ++- controllers/coupon.js | 64 +++++++++++++++++++++++++++++++++++++++++++ models/Coupon.js | 14 +++++++--- routes/Coupon.js | 49 ++++++--------------------------- 4 files changed, 85 insertions(+), 46 deletions(-) create mode 100644 controllers/coupon.js diff --git a/app.js b/app.js index c081f70..ffcfaee 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,7 @@ const profileRoute = require('./routes/profile') ; const paymentRoute = require('./routes/payment') ; const courseRoute = require('./routes/course') ; const adminRoute = require('./routes/admin') ; +const couponRoute = require('./routes/Coupon') ; const port=process.env.PORT || 5000; const cors = require('cors') ; @@ -75,7 +76,7 @@ require('./models/Coupon') // req.logout() ; // res.redirect('/') ; // }) -app.use(require('./routes/Coupon')) + app.use(authRoute) ; app.use(profileRoute) ; @@ -86,6 +87,7 @@ app.use(courseRoute) ; app.use(adminRoute) ; +app.use(couponRoute) ; mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true ,useFindAndModify:false}). then(result => { diff --git a/controllers/coupon.js b/controllers/coupon.js new file mode 100644 index 0000000..2220624 --- /dev/null +++ b/controllers/coupon.js @@ -0,0 +1,64 @@ +const Coupon = require("../models/Coupon"); + +module.exports.getAllCoupons = async (req , res , next) => { + try + { + const coupons = await Coupon.find() ; + console.log(coupons) ; + res.json({ + coupons : coupons + }) ; + } + catch(err) + { + console.log(err) ; + } +} + +module.exports.addCoupon = async (req , res , next) => { + try + { + const couponCode = req.body.couponCode ; + const percentage = req.body.percentage ; + const numAllowed = req.body.numAllowed ; + + let coupon = await Coupon.findOne({couponCode : couponCode}) ; + if(coupon) + { + res.json({ + error:"coupon already Exist" + }) + } + else + { + let coupon = new Coupon({ + couponCode : couponCode , + percentage : percentage , + numAllowed : numAllowed + }) ; + coupon = await coupon.save() ; + res.json({ + message: "Created Successfully" + }) + } + } + catch(err) + { + console.log(err); + } +} + +module.exports.deleteCoupon = async (req , res, next) => { + try + { + const couponCode = req.body.couponCode ; + await Coupon.deleteOne({couponCode : couponCode}) ; + res.json({ + message: "Deleted Successfully" + }) + } + catch(err) + { + console.log(err); + } +} \ No newline at end of file diff --git a/models/Coupon.js b/models/Coupon.js index e69ad70..fc50617 100644 --- a/models/Coupon.js +++ b/models/Coupon.js @@ -1,11 +1,17 @@ const mongoose=require('mongoose') const CouponSchema=new mongoose.Schema({ - coupon_code:{ - type:String + couponCode:{ + type:String, + required:true }, percentage:{ - type:String + type:Number , + required:true + }, + numAllowed:{ + type:Number , + required:true } }) -module.exports=mongoose.model("Coupon",CouponSchema) \ No newline at end of file +module.exports = mongoose.model('Coupon' , CouponSchema) ; \ No newline at end of file diff --git a/routes/Coupon.js b/routes/Coupon.js index 7813150..e44e90c 100644 --- a/routes/Coupon.js +++ b/routes/Coupon.js @@ -1,48 +1,15 @@ const express = require("express"); +const couponController = require('../controllers/coupon') ; + +const isAuth = require('../middleware/requirelogin') ; +const isAdmin = require('../middleware/isAdmin') ; + const router = express.Router(); -const mongoose = require("mongoose"); -const Coupon = mongoose.model("Coupon"); -router.get("/get-coupon", (req, res) => { - Coupon.find().then((result) => { - res.status(200).json({ coupon: result }); - console.log(result); - }); -}); +router.get("/getAllCoupons",isAuth , isAdmin , couponController.getAllCoupons); -router.post("/set-coupon", (req, res) => { - const { percentage, coupon_code } = req.body; - const coupon = new Coupon({ - coupon_code, - percentage, - }); - coupon.save().then((result) => { - res.status(200).json({ message: "Coupon set Successfully" }); - }); -}); +router.post("/addCoupon", isAuth , isAdmin ,couponController.addCoupon); -router.delete("/delete-coupon", (req, res) => { - Coupon.remove({ _id: req.body.id }).then((result) => { - res.status(200).json({ message: "Coupon Deleted" }); - }); -}); - -router.put("/update-coupon", (req, res) => { - const {coupon_code,percentage} =req.body; - Coupon.findByIdAndUpdate( - req.body._id, - { - $set: { - coupon_code,percentage - } - }, - { new: true }) - .then((result) => { - res.status(200).json({ message: result }); - }) - .catch((err) => { - console.log(err); - }); -}); +router.post("/deleteCoupon", isAuth , isAdmin ,couponController.deleteCoupon); module.exports = router; From cd04f9b9e9297504b7b524ce9abfa2412082e477 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Wed, 5 May 2021 19:24:40 +0530 Subject: [PATCH 4/7] Added Discount --- controllers/payment.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/controllers/payment.js b/controllers/payment.js index 453bb41..394a24f 100644 --- a/controllers/payment.js +++ b/controllers/payment.js @@ -3,7 +3,9 @@ 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 Student = require('../models/Student') ; +const Coupon = require('../models/Coupon') ; +const { getAllCoupons } = require('./coupon'); //test credentials of razorpay const instance = new razorpay({ @@ -104,6 +106,7 @@ module.exports.postRazorpay = async (req , res , next) => { //here this is the id of courseType const courseId = req.body.courseId ; + const couponCode = req.body.couponCode ; const userId = req.user._id ; let user = await User.findById(userId) ; let student =await Student.findById(user.student) ; @@ -113,6 +116,13 @@ module.exports.postRazorpay = async (req , res , next) => { //we are creating a new order associated to it //we are setting the paymentSuccess to be false + let discount = 0 ; + + let coupon = await Coupon.findOne({couponCode : couponCode}) ; + if(coupon && coupon.numAllowed > 0) + { + discount = coupon.percentage ; + } let ind = -1 ; //checking whether user has already bought this course or not @@ -134,7 +144,11 @@ module.exports.postRazorpay = async (req , res , next) => { const payment_capture = 1 ; //setting the amount according to the course - const amount = Number(course.amount) ; + let amount = Number(course.amount) ; + + amount = amount - amount*discount/100 ; + + amount = Math.ceil(amount) ; const options = {amount : (amount*100).toString() , currency : "INR" @@ -155,6 +169,11 @@ module.exports.postRazorpay = async (req , res , next) => { email:user.email , receipt : response.receipt }); + if(coupon && coupon.numAllowed > 0) + { + coupon.numAllowed = coupon.numAllowed - 1 ; + await coupon.save() ; + } } else { From f7abe2f46ce30f7d4edc0436e2624666e01b8f73 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Thu, 6 May 2021 00:18:21 +0530 Subject: [PATCH 5/7] Added queries , clickedSections , numLogins --- app.js | 5 ++- controllers/auth.js | 9 ++++- controllers/course.js | 27 +++++++++++++ controllers/query.js | 91 +++++++++++++++++++++++++++++++++++++++++++ models/User.js | 6 +++ models/query.js | 32 +++++++++++++++ routes/course.js | 2 + routes/query.js | 15 +++++++ 8 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 controllers/query.js create mode 100644 models/query.js create mode 100644 routes/query.js diff --git a/app.js b/app.js index ffcfaee..2b05bf2 100644 --- a/app.js +++ b/app.js @@ -7,6 +7,7 @@ const paymentRoute = require('./routes/payment') ; const courseRoute = require('./routes/course') ; const adminRoute = require('./routes/admin') ; const couponRoute = require('./routes/Coupon') ; +const queryRoute = require('./routes/query') ; const port=process.env.PORT || 5000; const cors = require('cors') ; @@ -87,7 +88,9 @@ app.use(courseRoute) ; app.use(adminRoute) ; -app.use(couponRoute) ; +app.use(couponRoute) ; + +app.use(queryRoute) ; mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true ,useFindAndModify:false}). then(result => { diff --git a/controllers/auth.js b/controllers/auth.js index 645d127..d61d12d 100644 --- a/controllers/auth.js +++ b/controllers/auth.js @@ -66,11 +66,18 @@ module.exports.postSignin = async (req , res , next) => { if(isMatched) { const token = jwt.sign({_id:user._id},JWT_secret) + if(!user.numLoggedIn) + { + user.numLoggedIn = 0 ; + } + user.numLoggedIn = user.numLoggedIn + 1 ; res.json( { - token:token + token:token , + isAdmin : user.isAdmin } ) + await user.save() ; } else { diff --git a/controllers/course.js b/controllers/course.js index a758911..9840e17 100644 --- a/controllers/course.js +++ b/controllers/course.js @@ -1,5 +1,6 @@ const Course = require('../models/Course') ; const CourseType = require('../models/CourseType') ; +const User = require('../models/User') ; module.exports.postAddCourse = async (req , res , next) => { try @@ -169,4 +170,30 @@ module.exports.getFromRoute = async (req , res , next) => { error : "error" }) } +} + +module.exports.addClick = async (req , res , next) => { + try + { + const route = req.body.route ; + const userId = req.user._id ; + let user = await User.findById(userId) ; + let clicked = {...user.clicked} ; + if(!clicked[route]) + { + clicked[route] = 0 ; + } + clicked[route] = clicked[route] + 1 ; + user.clicked = clicked ; + await user.save() ; + res.json({ + data : "added click" + }) ; + } + catch(err) + { + res.json({ + error : err + }) + } } \ No newline at end of file diff --git a/controllers/query.js b/controllers/query.js new file mode 100644 index 0000000..c4eca85 --- /dev/null +++ b/controllers/query.js @@ -0,0 +1,91 @@ +const Query = require('../models/query') ; + +module.exports.addQuery = async (req , res , next)=> { + try + { + let firstName = req.body.firstName || " " ; + let lastName = req.body.lastName || " " ; + let email = req.body.email ; + let query = req.body.query || " " ; + let other = req.body.other || false ; + let queryModel = await Query.findOne({email:email , query:query}) ; + if(queryModel) + { + if(!queryModel.numAsked) + { + queryModel.numAsked = 0 ; + } + + queryModel.numAsked = queryModel.numAsked + 1 ; + await queryModel.save() ; + } + else + { + queryModel = new Query ({ + firstName : firstName , + lastName : lastName , + email : email, + query : query , + numAsked : 1 , + other : other + }) ; + await queryModel.save() ; + } + res.json({ + message : "Saved Query" + }) ; + + } + catch(err) + { + res.json({ + error : err + }) ; + } +} + +module.exports.getQueries = async (req , res , next) => { + try + { + const queries = await Query.find() ; + res.json({ + queries : queries + }) + } + catch(err) + { + res.json({ + error : err + }) + } +} + +module.exports.getOtherQueries = async (req , res , next) => { + try{ + const queries = await Query.find({other : true}) ; + res.json({ + queries : queries + }) + } + catch(err){ + res.json({ + error : err + }) + } +} + +module.exports.getTypeQueries = async (req , res , next) => { + try{ + const type = req.body.type ; + const queries = await Query.find({type:type}) ; + res.json({ + queries : queries + }) + } + catch(err) + { + res.json({ + error:err + }) + } +} \ No newline at end of file diff --git a/models/User.js b/models/User.js index 205349f..d454439 100644 --- a/models/User.js +++ b/models/User.js @@ -27,6 +27,12 @@ const userSchema = new Schema({ } , isAdmin : { type : Boolean + } , + numLoggedIn : { + type : Number + } , + clicked : { + type : Object } //need to add isAdmin }) ; diff --git a/models/query.js b/models/query.js new file mode 100644 index 0000000..03cceaa --- /dev/null +++ b/models/query.js @@ -0,0 +1,32 @@ +const mongoose = require('mongoose') ; + +const Schema = mongoose.Schema ; + +const querySchema = new Schema({ + firstName : { + type :String , + required : true + } , + lastName : { + type:String , + required: true + } , + email : { + type:String , + required: true + } , + query : { + type:String , + required : true + } , + numAsked : { + type:Number , + required : true + } , + other : { + type : Boolean , + require : true + } +}) ; + +module.exports = mongoose.model('Query' , querySchema) ; \ No newline at end of file diff --git a/routes/course.js b/routes/course.js index bd8dc15..f763e05 100644 --- a/routes/course.js +++ b/routes/course.js @@ -21,4 +21,6 @@ router.post('/getMeetSchedule' ,isAuth , courseController.getMeetSchedule) ; router.get('/getFromRoute' , courseController.getFromRoute) ; +router.post('/addClick' , isAuth , courseController.addClick) ; + module.exports = router ; \ No newline at end of file diff --git a/routes/query.js b/routes/query.js new file mode 100644 index 0000000..9ad8e51 --- /dev/null +++ b/routes/query.js @@ -0,0 +1,15 @@ +const express = require('express') ; + +const queryController = require('../controllers/query') ; + +const router = express.Router() ; + +router.post('/addQuery' , queryController.addQuery) ; + +router.get('/getAllQueries' , queryController.getQueries) ; + +router.get('/getOtherQueries' , queryController.getOtherQueries) ; + +router.post('/getTypeQueries' , queryController.getTypeQueries) ; + +module.exports = router ; \ No newline at end of file From 9400a61e838d58153c0c9d68ff18d4624996ddb9 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Fri, 7 May 2021 19:08:11 +0530 Subject: [PATCH 6/7] Added graduation Year to query Schema --- controllers/query.js | 2 ++ models/query.js | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/controllers/query.js b/controllers/query.js index c4eca85..7f7848b 100644 --- a/controllers/query.js +++ b/controllers/query.js @@ -8,6 +8,7 @@ module.exports.addQuery = async (req , res , next)=> { let email = req.body.email ; let query = req.body.query || " " ; let other = req.body.other || false ; + let graduationYear = req.body.graduationYear ; let queryModel = await Query.findOne({email:email , query:query}) ; if(queryModel) { @@ -27,6 +28,7 @@ module.exports.addQuery = async (req , res , next)=> { email : email, query : query , numAsked : 1 , + graduationYear : graduationYear , other : other }) ; await queryModel.save() ; diff --git a/models/query.js b/models/query.js index 03cceaa..69edf0f 100644 --- a/models/query.js +++ b/models/query.js @@ -26,6 +26,10 @@ const querySchema = new Schema({ other : { type : Boolean , require : true + } , + graduationYear : { + type : Number , + required :true } }) ; From 87af5c7be881606aa07ec212af868ecc8f302d06 Mon Sep 17 00:00:00 2001 From: hardcodder Date: Fri, 7 May 2021 19:16:15 +0530 Subject: [PATCH 7/7] Added phone number and fullname to query Schema --- controllers/query.js | 8 ++++---- models/query.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/controllers/query.js b/controllers/query.js index 7f7848b..8dc4c39 100644 --- a/controllers/query.js +++ b/controllers/query.js @@ -3,8 +3,8 @@ const Query = require('../models/query') ; module.exports.addQuery = async (req , res , next)=> { try { - let firstName = req.body.firstName || " " ; - let lastName = req.body.lastName || " " ; + let fullName = req.body.fullName || " " ; + let phoneNumber = req.body.phoneNumber ; let email = req.body.email ; let query = req.body.query || " " ; let other = req.body.other || false ; @@ -23,8 +23,8 @@ module.exports.addQuery = async (req , res , next)=> { else { queryModel = new Query ({ - firstName : firstName , - lastName : lastName , + fullName : fullName , + phoneNumber : phoneNumber , email : email, query : query , numAsked : 1 , diff --git a/models/query.js b/models/query.js index 69edf0f..1da09ba 100644 --- a/models/query.js +++ b/models/query.js @@ -3,13 +3,13 @@ const mongoose = require('mongoose') ; const Schema = mongoose.Schema ; const querySchema = new Schema({ - firstName : { + fullName : { type :String , required : true } , - lastName : { - type:String , - required: true + phoneNumber : { + type : String , + required : true } , email : { type:String ,