Merge branch 'yashrajverma' of https://www.github.com/yashrajverma/Cantilever-Labs into yashrajverma

This commit is contained in:
yashrajverma 2021-05-11 19:53:39 +05:30
commit 288dabe85c
13 changed files with 429 additions and 36 deletions

41
app.js
View File

@ -1,3 +1,4 @@
const express = require("express");
const mongoose = require("mongoose");
const bodyparser = require("body-parser");
@ -9,6 +10,21 @@ const adminRoute = require("./routes/admin");
const port = process.env.PORT || 5000;
const cors = require("cors");
const express = require('express') ;
const mongoose = require('mongoose') ;
const bodyparser = require('body-parser') ;
const authRoute = require('./routes/auth') ;
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 queryRoute = require('./routes/query') ;
const port=process.env.PORT || 5000;
const cors = require('cors') ;
//const passport = require('passport');
//const cookieSession = require('cookie-session') ;
//require('./passport-setup') ;
@ -74,6 +90,7 @@ require("./models/Coupon");
// req.logout() ;
// res.redirect('/') ;
// })
app.use(require("./routes/Coupon"));
app.use(authRoute);
@ -98,5 +115,29 @@ mongoose
});
})
.catch((err) => {
app.use(authRoute) ;
app.use(profileRoute) ;
app.use(paymentRoute) ;
app.use(courseRoute) ;
app.use(adminRoute) ;
app.use(couponRoute) ;
app.use(queryRoute) ;
mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true ,useFindAndModify:false}).
then(result => {
console.log('connected');
app.listen(port,()=>{
console.log("server is running on port",port);
}) ;
})
.catch(err => {
console.log(err);
});

View File

@ -78,6 +78,7 @@ module.exports.postSignin = async (req, res, next) => {
}
};
module.exports.sendOTP = (req, res, next) => {
//uNNYosMopvvCW9RTR1tRWJmYC test
//llVKD53ve6QRpbCKOHzWBADaS live
@ -89,6 +90,43 @@ module.exports.sendOTP = (req, res, next) => {
} else {
messagebird.verify.create(
phoneNumber,
module.exports.postSignin = async (req , res , next) => {
try
{
//we need email and password as input
let email = req.body.email ;
let password = req.body.password ;
let user = await User.findOne({email : email}) ;
if(user)
{
const isMatched = await bcrypt.compare(password , user.password) ;
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 ,
isAdmin : user.isAdmin
}
)
await user.save() ;
}
else
{
res.json({
message:"email and password doesn't match" ,
type:"error"
})
}
}
else
{
template: "Your verification code is %token",
},

64
controllers/coupon.js Normal file
View File

@ -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);
}
}

View File

@ -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
@ -8,6 +9,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 +18,10 @@ module.exports.postAddCourse = async (req , res , next) => {
{
mentor = mentor.trim() ;
}
if(route)
{
route = route.trim() ;
}
if(totalLectures)
{
totalLectures = Number(totalLectures) ;
@ -24,7 +30,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 +154,46 @@ 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"
})
}
}
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
})
}
}

View File

@ -4,6 +4,8 @@ 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({
@ -103,7 +105,8 @@ 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 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
{

93
controllers/query.js Normal file
View File

@ -0,0 +1,93 @@
const Query = require('../models/query') ;
module.exports.addQuery = async (req , res , next)=> {
try
{
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 ;
let graduationYear = req.body.graduationYear ;
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 ({
fullName : fullName ,
phoneNumber : phoneNumber ,
email : email,
query : query ,
numAsked : 1 ,
graduationYear : graduationYear ,
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
})
}
}

View File

@ -1,16 +1,29 @@
const mongoose=require('mongoose')
const CouponSchema=new mongoose.Schema({
coupon_code:{
couponCode:{
type:String,
required:true
},
percentage:{
type:String,
required:true
},
remainingTimes:{
type:Number
type:Number ,
required:true
},
numAllowed:{
type:Number ,
required:true
}
})
module.exports=mongoose.model("Coupon",CouponSchema)
module.exports = mongoose.model('Coupon' , CouponSchema) ;

View File

@ -15,6 +15,10 @@ const courseSchema = new Schema({
type : Number ,
required : true
} ,
route: {
type : String ,
required : true
} ,
meetings : [
{
startTime : {

View File

@ -3,6 +3,7 @@ const crypto = require("crypto");
const Schema = mongoose.Schema;
const userSchema = new Schema({
firstName: {
type: String,
required: true,
@ -36,4 +37,39 @@ const userSchema = new Schema({
//need to add isAdmin
});
firstName : {
type :String ,
required : true
} ,
lastName : {
type:String ,
required: true
} ,
email : {
type:String ,
required: true
} ,
password : {
type : String
} ,
googleId : {
type : String
} ,
student : {
type : mongoose.Types.ObjectId ,
ref: 'Student'
} ,
isAdmin : {
type : Boolean
} ,
numLoggedIn : {
type : Number
} ,
clicked : {
type : Object
}
//need to add isAdmin
}) ;
module.exports = mongoose.model("User", userSchema);

36
models/query.js Normal file
View File

@ -0,0 +1,36 @@
const mongoose = require('mongoose') ;
const Schema = mongoose.Schema ;
const querySchema = new Schema({
fullName : {
type :String ,
required : true
} ,
phoneNumber : {
type : String ,
required : true
} ,
email : {
type:String ,
required: true
} ,
query : {
type:String ,
required : true
} ,
numAsked : {
type:Number ,
required : true
} ,
other : {
type : Boolean ,
require : true
} ,
graduationYear : {
type : Number ,
required :true
}
}) ;
module.exports = mongoose.model('Query' , querySchema) ;

View File

@ -1,14 +1,11 @@
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const Coupon = mongoose.model("Coupon");
const couponController = require('../controllers/coupon') ;
const isAuth = require('../middleware/requirelogin') ;
const isAdmin = require('../middleware/isAdmin') ;
const router = express.Router();
router.get("/get-coupon", (req, res) => {
Coupon.find().then((result) => {
res.status(200).json({ coupon: result });
console.log(result);
});
});
router.post("/set-coupon", (req, res) => {
const { percentage, coupon_code ,remainingTimes} = req.body;
@ -25,29 +22,12 @@ router.post("/set-coupon", (req, res) => {
});
}
});
=======
router.get("/getAllCoupons",isAuth , isAdmin , couponController.getAllCoupons);
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("/addCoupon", isAuth , isAdmin ,couponController.addCoupon);
router.post("/deleteCoupon", isAuth , isAdmin ,couponController.deleteCoupon);
module.exports = router;

View File

@ -19,4 +19,8 @@ router.post('/getTierCourse' , courseController.getTierCourse) ;
//It is a post request
router.post('/getMeetSchedule' ,isAuth , courseController.getMeetSchedule) ;
router.get('/getFromRoute' , courseController.getFromRoute) ;
router.post('/addClick' , isAuth , courseController.addClick) ;
module.exports = router ;

15
routes/query.js Normal file
View File

@ -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 ;