Commit a3a0d659 authored by Gihan76's avatar Gihan76

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	WebFrontEnd/smartcoach-frontend/package-lock.json
#	WebFrontEnd/smartcoach-frontend/package.json
#	WebFrontEnd/smartcoach-frontend/src/Components/Admin/Dashboard.js
parents b7415a9d 13565272
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ClassStudentSchema = new Schema({
class_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Classes'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'student'},
},{
timestamps:true,
});
const ClassStudentList = mongoose.model('ClassStudentList',ClassStudentSchema);
module.exports = ClassStudentList;
\ No newline at end of file
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const TutorRatingSchema = new Schema({
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'tutor'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'student'},
rating: {type:String},
review:{type:String},
version:{type:String},
}, {
timestamps:true,
});
const TutorRatings = mongoose.model('TutorRatings',TutorRatingSchema);
module.exports = TutorRatings;
\ No newline at end of file
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CreateClassSchema = new Schema({
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'tutor'},
class_method:{type:String},
class_type: {type:String},
institute_id:{type:mongoose.Schema.Types.ObjectId,ref: 'institute'},
batch_no : {type:String},
class_startingDate:{type:Date},
subject:{type:String},
class_fee:{type:String},
student_list:[{type:mongoose.Schema.Types.ObjectId,ref: 'student'}],
class_fee_option : {type:String},
class_conduct_day : {type:String},
class_conduct_time : {type:String},
AdmissionFee : {type:String},
batchYear : {type:String},
isActiveClass: {
type: Boolean,
default: true
},
isActiveForStudent: {
type: Boolean,
default: true
}
},{
timestamps:true,
});
const Classes = mongoose.model('Classes',CreateClassSchema);
module.exports = Classes;
\ No newline at end of file
...@@ -3,9 +3,10 @@ const mongoose = require('mongoose'); ...@@ -3,9 +3,10 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema; const Schema = mongoose.Schema;
const ALResultsSchema = new Schema({ const ALResultsSchema = new Schema({
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Post'}, student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'students'},
year:{type:String,required:false}, year:{type:String,required:false},
stream: {type:String,required:true}, stream: {type:String,required:true},
Subjects : {type:Object},
subject01:{type:String,required:true}, subject01:{type:String,required:true},
subject02:{type:String,required:true}, subject02:{type:String,required:true},
subject03:{type:String,required:true}, subject03:{type:String,required:true},
......
...@@ -19,7 +19,7 @@ const userSchema = new Schema({ ...@@ -19,7 +19,7 @@ const userSchema = new Schema({
tutor_main_city:[{type:String}], tutor_main_city:[{type:String}],
tutor_medium:{type:String}, tutor_medium:{type:String},
tutor_qualification:{type:String}, tutor_qualification:{type:String},
tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'Post'}], tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'institute'}],
}, { }, {
timestamps:true, timestamps:true,
}); });
......
This diff is collapsed.
...@@ -10,12 +10,14 @@ ...@@ -10,12 +10,14 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"axios": "^0.21.4",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"mongoose": "^5.12.15" "mongoose": "^5.12.15"
}, },
"devDependencies": { "devDependencies": {
"nodemailer": "^6.6.2" "nodemailer": "^6.6.2",
"request": "^2.88.2"
} }
} }
const router = require('express').Router();
let classes = require('../models/createClass.model');
let student = require('../models/student.user.model');
let studentList = require('../models/ClassStudentList.model');
const mongoose = require("mongoose");
router.route('/add').post(async(req,res) =>{
console.log("Inside Create Class")
if(req.body.institute_id !== ""){
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const class_method = req.body.class_method;
const class_type = req.body.class_type;
const institute_id = mongoose.Types.ObjectId(req.body.institute_id);
const batch_no = req.body.batch_no;
const class_startingDate = req.body.class_startingDate;
const subject = req.body.subject;
const class_fee = req.body.class_fee;
const class_fee_option = req.body.class_fee_option;
const isActiveClass = req.body.isActiveClass;
const isActiveForStudent = req.body.isActiveForStudent;
const class_conduct_day = req.body.class_conduct_day;
const class_conduct_time = req.body.class_conduct_time;
const AdmissionFee = req.body.AdmissionFee;
const batchYear = req.body.batchYear;
const newClass = new classes({
tutor_id,
class_method,
class_type,
batch_no,
class_startingDate,
subject,
class_fee,
isActiveClass,
isActiveForStudent,
institute_id,
class_fee_option,
class_conduct_day,
class_conduct_time,
AdmissionFee,
batchYear
});
console.log(newClass)
newClass.save().then(()=>{
res.json('Class Created!');
}).catch(err =>res.status(400).json('Error: '+err));
}
else {
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const class_method = req.body.class_method;
const class_type = req.body.class_type;
const batch_no = req.body.batch_no;
const class_startingDate = req.body.class_startingDate;
const subject = req.body.subject;
const class_fee = req.body.class_fee;
const class_fee_option = req.body.class_fee_option;
const isActiveClass = req.body.isActiveClass;
const isActiveForStudent = req.body.isActiveForStudent;
const class_conduct_day = req.body.class_conduct_day;
const class_conduct_time = req.body.class_conduct_time;
const AdmissionFee = req.body.AdmissionFee;
const batchYear = req.body.batchYear;
const newClass = new classes({
tutor_id,
class_method,
class_type,
batch_no,
class_startingDate,
subject,
class_fee,
isActiveClass,
isActiveForStudent,
class_fee_option,
class_conduct_day,
class_conduct_time,
AdmissionFee,
batchYear
});
console.log(newClass)
newClass.save().then(()=>{
res.json('Class Created!');
}).catch(err =>res.status(400).json('Error: '+err));
}
});
router.route('/tutorClass/:id').get(function (req, res) {
let id = req.params.id;
//console.log("TutorId : " + id)
classes.find({"tutor_id": id}).populate('institute_id').then(tutorsClasses => {
///console.log(tutor);
res.json(tutorsClasses);
}).catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/studentList/update').post((req, res) => {
const class_id = req.body._id;
const student_nic = req.body.student_nic;
console.log("classID: " + class_id);
console.log("student_nic: " + student_nic);
classes.findById(class_id,function(err, tutorsClass){
if(!tutorsClass)
req.status(404).send("Sorry Class Could not Found.");
else {
student.find({"student_nic": student_nic}).then(student => {
console.log(student)
console.log(student[0]._id)
if(student[0].student_nic === ""){
req.status(500).send("Sorry, This Student Not Registered");
}else{
const student_id = student[0]._id;
const newClassStudent = new studentList({
class_id,
student_id,
});
newClassStudent.save().then(result =>{
res.json('Student added to the Class!');
})
.catch(err =>{
res.status(500).send("Update not possible");
});
}
}).catch(err => res.status(500).json('Eroor: '+ err));
}
});
});
router.route('/studentList/:id').get(function (req, res) {
let id = req.params.id;
console.log("Class ID : " + id)
studentList.find({"class_id": id}).populate('student_id').then(StudentList => {
console.log(StudentList);
res.json(StudentList);
}).catch(err => {
console.log(err);
res.status(400).json('Error: ' + err)
});
});
module.exports = router;
\ No newline at end of file
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
const express = require('express')
const request = require('request');
router.route('/getFilteredList').post((req,res) =>{
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then( async tutors => {
let tutorReviewResultsFinal
let tutorReviewResults = [];
async function processData(callback) {
async function forLoopRun(callback6) {
let payload
let options
const promises = tutors.map(async (tutor) => {
await tutorRating.find({"tutor_id": tutor._id}).populate('tutor_id').then(async reviews01 => {
//console.log("Review Count " + reviews01.length);
if (reviews01.length > 0) {
let reviewsList01 = [];
const reviewPromises = reviews01.map(async function (oneReview) {
reviewsList01.push(oneReview.review);
return oneReview.review
})
const reviewsForTutor = await Promise.all(reviewPromises);
await console.log(reviewsForTutor);
async function getPrevMatches(cb) {
options = {
uri: 'http://localhost:5000/review_prediction_for_tutor',
body: JSON.stringify(reviewsList01),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
request(options, async function (error, response) {
// console.log(error, response.body);
//tutor.tutor_main_district = "Test";
//tutorReviewResults.tutor_reviewValue = response.body;
payload = {
"tutor_id": tutor._id,
"tutor_name": tutor.tutor_name,
"tutor_nic": tutor.tutor_nic,
"tutor_email": tutor.tutor_email,
"tutor_phone": tutor.tutor_phone,
"tutor_address": tutor.tutor_address,
"tutor_password": tutor.tutor_password,
"tutor_gender": tutor.tutor_gender,
"tutor_status": tutor.tutor_status,
"tutor_image": tutor.tutor_image,
"tutor_Stream": tutor.tutor_Stream,
"tutor_subjects": tutor.tutor_subjects,
"tutor_class_type": tutor.tutor_class_type,
"tutor_main_district": tutor.tutor_main_district,
"tutor_main_city": tutor.tutor_main_city,
"tutor_medium": tutor.tutor_medium,
"tutor_qualification": tutor.tutor_qualification,
"tutor_reviewValue": JSON.parse(response.body).result,
};
await tutorReviewResults.push(payload);
//console.log(payload)
if (response.statusCode === 200){
cb(payload);
}
});
}
await getPrevMatches( function (message777) {
console.log(message777);
// callback("Done : ProcessData");
});
// module.exports = {
// getPrevMatches: getPrevMatches
// }
//console.log(getPrevMatches);
}
})
return payload;
})
tutorReviewResultsFinal = await Promise.all(promises);
callback6("Get Return :" +tutorReviewResultsFinal);
}
await forLoopRun(async function (message2) {
console.log(message2);
callback("Done : ProcessData");
});
}
console.log("Last " +tutorReviewResults.length)
await processData( async function (message) {
console.log(message);
//console.log("Inside return Fuction");
}).then(async r =>{
console.log("Inside return Function");
//await res.json(tutorReviewResults)
}) ;
console.log("End " +tutorReviewResults.length)
res.json(tutorReviewResults)
})
.catch(err => res.status(400).json('Error: '+ err));
});
module.exports = router;
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
const axios = require('axios');
const request = require('request');
router.route('/getFilteredList').post((req, res) => {
let teacherReviewList = [];
let reviewListWithScore = [];
tutor.find({
"tutor_Stream": {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects": {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district": {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city": {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium": {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type": {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(tutors => {
//console.log(tutors);
tutors.reduce(async (promise, tutor, idx) => {
await promise;
await tutorRating.find({"tutor_id": tutor._id}).then((reviews) => {
//console.log("i : " + JSON.stringify(reviews));
console.log("idx : " + idx);
// console.log("tutor : " + tutors);
const teacherReview = {
"teacher": tutor._id,
"tutor_name": tutor.tutor_name,
"tutor_nic": tutor.tutor_nic,
"tutor_email": tutor.tutor_email,
"tutor_phone": tutor.tutor_phone,
"tutor_address": tutor.tutor_address,
"tutor_password": tutor.tutor_password,
"tutor_gender": tutor.tutor_gender,
"tutor_status": tutor.tutor_status,
"tutor_image": tutor.tutor_image,
"tutor_Stream": tutor.tutor_Stream,
"tutor_subjects": tutor.tutor_subjects,
"tutor_class_type": tutor.tutor_class_type,
"tutor_main_district": tutor.tutor_main_district,
"tutor_main_city": tutor.tutor_main_city,
"tutor_medium": tutor.tutor_medium,
"tutor_qualification": tutor.tutor_qualification,
"review": reviews.map(review => review.review),
"ratings": reviews.map(review => review.rating)
}
//teacherReviewList.indexOf(teacherReview) === -1 ? teacherReviewList.push(teacherReview) : null;
let index = teacherReviewList.findIndex(x => x.teacher === tutor._id);
if (index === -1) {
teacherReviewList.push(teacherReview);
}
if (idx === tutors.length - 1) {
//console.log(teacherReviewList);
teacherReviewList.reduce(async (promise, teacherReview, idx, teacherReviewList) => {
await promise;
console.log("length" + teacherReview.review.length);
if (teacherReview.review.length > 0) {
let options = {
uri: 'http://localhost:5000/review_prediction_for_tutor',
body: JSON.stringify(teacherReview.review),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
let response = await axios.post(options.uri, options.body);
let TotalRating = 0;
teacherReview.ratings.map(rate =>{
TotalRating = TotalRating + Number(rate)
})
const temp = {
"teacher": teacherReview.teacher,
"tutor_name": teacherReview.tutor_name,
"tutor_nic": teacherReview.tutor_nic,
"tutor_email": teacherReview.tutor_email,
"tutor_phone": teacherReview.tutor_phone,
"tutor_address": teacherReview.tutor_address,
"tutor_password": teacherReview.tutor_password,
"tutor_gender": teacherReview.tutor_gender,
"tutor_status": teacherReview.tutor_status,
"tutor_image": teacherReview.tutor_image,
"tutor_Stream": teacherReview.tutor_Stream,
"tutor_subjects": teacherReview.tutor_subjects,
"tutor_class_type": teacherReview.tutor_class_type,
"tutor_main_district": teacherReview.tutor_main_district,
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_reviewValue": response.data.result,
"tutor_avg_rating" : Number(TotalRating/teacherReview.ratings.length),
"tutor_review_count" : teacherReview.review.length
}
let index = await reviewListWithScore.findIndex(x => x.teacher === teacherReview.teacher);
if (index === -1) {
reviewListWithScore.push(temp);
}
console.log(response.data.result);
} else {
const temp = {
"teacher": teacherReview.teacher,
"tutor_name": teacherReview.tutor_name,
"tutor_nic": teacherReview.tutor_nic,
"tutor_email": teacherReview.tutor_email,
"tutor_phone": teacherReview.tutor_phone,
"tutor_address": teacherReview.tutor_address,
"tutor_password": teacherReview.tutor_password,
"tutor_gender": teacherReview.tutor_gender,
"tutor_status": teacherReview.tutor_status,
"tutor_image": teacherReview.tutor_image,
"tutor_Stream": teacherReview.tutor_Stream,
"tutor_subjects": teacherReview.tutor_subjects,
"tutor_class_type": teacherReview.tutor_class_type,
"tutor_main_district": teacherReview.tutor_main_district,
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_reviewValue": 0,
"tutor_avg_rating" : 0
}
//reviewListWithScore.push(temp);
//reviewListWithScore.indexOf(temp) === -1 ? reviewListWithScore.push(temp) : null;
let index = reviewListWithScore.findIndex(x => x.teacher === teacherReview.teacher);
if (index === -1) {
reviewListWithScore.push(temp);
}
}
if (idx === teacherReviewList.length - 1) {
res.json(reviewListWithScore)
// console.log(reviewListWithScore);
}
}, Promise.resolve())
}
});
}, Promise.resolve())
//console.log("Return from here");
})
.catch(err => res.status(400).json('Error: ' + err));
});
module.exports = router;
\ No newline at end of file
...@@ -89,68 +89,68 @@ router.route('/add').post( async(req,res) =>{ ...@@ -89,68 +89,68 @@ router.route('/add').post( async(req,res) =>{
.then(newUser =>{ .then(newUser =>{
//////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////
// const content = ` const content = `
// Hi ${student_name},\n Hi ${student_name},\n
// You are Create a Student Account on SmartCoach.\n You are Create a Student Account on SmartCoach.\n
// You can verify your email address click on 'http://localhost:3000/AccountVerified/${newUser.id}' You can verify your email address click on 'http://localhost:3000/AccountVerified/${newUser.id}'
//
// Used your email address as the username : ${user_email} Used your email address as the username : ${user_email}
// Used given password as the password Used given password as the password
// Thank You, Thank You,
// Team SmartCoach Team SmartCoach
// `; `;
//
// var mail = { var mail = {
// from: student_name, from: student_name,
// to: user_email, to: user_email,
// subject: 'Email Verification - Student', subject: 'Email Verification - Student',
// text: content text: content
// } }
//
// transporter.sendMail(mail, (err, data) => { transporter.sendMail(mail, (err, data) => {
// if (err) { if (err) {
// res.json({ res.json({
// msg: 'fail' msg: 'fail'
// }) })
// } else { } else {
// res.json({ res.json({
// msg: 'success' msg: 'success'
// }) })
// } }
// }) })
// ; ;
//
//
// const content_guardian = ` const content_guardian = `
// Hi ${guardian_name},\n Hi ${guardian_name},\n
// Your student ${student_name} is Create a Student Account on SmartCoach.\n Your student ${student_name} is Create a Student Account on SmartCoach.\n
//
// You can know student progress through the email. You can know student progress through the email.
// We will send Student attendance, Quiz marks, Assignment Marks and other details through this email. We will send Student attendance, Quiz marks, Assignment Marks and other details through this email.
//
// Thank You, Thank You,
// Team SmartCoach Team SmartCoach
// `; `;
//
// var mail_guardian = { var mail_guardian = {
// from: guardian_name, from: guardian_name,
// to: guardian_email, to: guardian_email,
// subject: 'Student Information on SmartCoach', subject: 'Student Information on SmartCoach',
// text: content_guardian text: content_guardian
// } }
//
// transporter.sendMail(mail_guardian, (err, data) => { transporter.sendMail(mail_guardian, (err, data) => {
// if (err) { if (err) {
// res.json({ res.json({
// msg: 'fail' msg: 'fail'
// }) })
// } else { } else {
// res.json({ res.json({
// msg: 'success' msg: 'success'
// }) })
// } }
// }) })
// ; ;
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
}) })
......
...@@ -13,6 +13,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -13,6 +13,7 @@ router.route('/add').post(async(req,res) =>{
const student_id = mongoose.Types.ObjectId(req.body.student_id); const student_id = mongoose.Types.ObjectId(req.body.student_id);
const year = req.body.year; const year = req.body.year;
const stream = req.body.stream; const stream = req.body.stream;
const Subjects = req.body.Subjects;
const subject01 = req.body.subject01; const subject01 = req.body.subject01;
const subject02 = req.body.subject02; const subject02 = req.body.subject02;
const subject03 = req.body.subject03; const subject03 = req.body.subject03;
...@@ -27,6 +28,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -27,6 +28,7 @@ router.route('/add').post(async(req,res) =>{
student_id, student_id,
year, year,
stream, stream,
Subjects,
subject01, subject01,
subject02, subject02,
subject03, subject03,
...@@ -49,7 +51,7 @@ router.route('/add').post(async(req,res) =>{ ...@@ -49,7 +51,7 @@ router.route('/add').post(async(req,res) =>{
else { else {
ALevelResults.findById(req.body.student_id, function(err, details){ ALevelResults.findById(req.body.student_id, function(err, details){
if(!details){ if(!details){
req.status(404).send("data is not found"); res.status(404).send("data is not found");
} }
else { else {
details.year = year; details.year = year;
......
...@@ -30,31 +30,32 @@ transporter.verify((error, success) => { ...@@ -30,31 +30,32 @@ transporter.verify((error, success) => {
router.route('/').get((req,res) =>{ router.route('/').get((req,res) =>{
tutor.find() tutor.find()
.then(tutors => res.json(tutors))
.catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/getFilteredList').post((req,res) =>{
console.log(req.body);
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(tutors => { .then(tutors => {
//console.log(tutors); console.log(tutors);
res.json(tutors) res.json(tutors)
}) })
.catch(err => res.status(400).json('Eroor: '+ err)); .catch(err => res.status(400).json('Eroor: '+ err));
}); });
router.route('/:id').get(function (req, res) {
let id = req.params.id;
//console.log("TutorId : " + id)
tutor.findById(id).populate(['tutor_instituteIDList']).then(tutor => {
///console.log(tutor);
res.json(tutor);
}).catch(err => res.status(400).json('Eroor: '+ err));
});
// router.route('/:id').get(function (req, res) {
// let id = req.params.id;
// console.log("TutorId : " + id)
// tutor.findById(id).populate("tutor_instituteIDList").then(tutor => {
// console.log(tutor);
// res.json(tutor);
// }).catch(err => res.status(400).json('Eroor: '+ err));
// });
router.route('/add').post(async(req,res) =>{ router.route('/add').post(async(req,res) =>{
console.log("Tutor Registration began") console.log("Tutor Registration began")
......
const router = require('express').Router();
let tutorRatingsRoute = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
router.route('/add').post(async(req,res) =>{
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const student_id = mongoose.Types.ObjectId(req.body.student_id);
const rating = req.body.rating;
const review = req.body.review;
const version = req.body.version;
const newTutorRating = new tutorRatingsRoute({
tutor_id,
student_id,
rating,
review,
version,
});
newTutorRating.save()
.then( () => {
res.json('New Review Added');
})
.catch(err =>res.status(400).json('Error: '+err));
});
module.exports = router;
...@@ -4,7 +4,7 @@ const bodyParser = require('body-parser'); ...@@ -4,7 +4,7 @@ const bodyParser = require('body-parser');
const mongoose =require('mongoose'); const mongoose =require('mongoose');
require('dotenv').config(); require('dotenv').config();
const app = express(); const app = express();
const port = process.env.PORT || 5000; const port = process.env.PORT || 5001;
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true }));
...@@ -29,6 +29,9 @@ const userAccount = require('./routes/userAccount.route'); ...@@ -29,6 +29,9 @@ const userAccount = require('./routes/userAccount.route');
const questionManage = require('./routes/question.route'); const questionManage = require('./routes/question.route');
const financeRouter = require('./routes/finance.route'); const financeRouter = require('./routes/finance.route');
const studentResult = require('./routes/studentALResult.route'); const studentResult = require('./routes/studentALResult.route');
const tutorRating = require('./routes/tutorRatings.route');
const filteredList = require('./routes/filteredListNew.route');
const createClassRoute = require('./routes/createClass.route');
app.use('/studentSingUp',studentRouter); app.use('/studentSingUp',studentRouter);
app.use('/tutorSingUp',tutorRouter); app.use('/tutorSingUp',tutorRouter);
...@@ -37,6 +40,9 @@ app.use('/userAccount',userAccount); ...@@ -37,6 +40,9 @@ app.use('/userAccount',userAccount);
app.use('/questions', questionManage); app.use('/questions', questionManage);
app.use('/admin/finance', financeRouter); app.use('/admin/finance', financeRouter);
app.use('/studentResults', studentResult); app.use('/studentResults', studentResult);
app.use('/tutorRatings', tutorRating);
app.use('/filteredList', filteredList);
app.use('/createClass', createClassRoute);
app.listen(port, () => { app.listen(port, () => {
console.log(`Server is running on Port: ${port}`); console.log(`Server is running on Port: ${port}`);
......
...@@ -3660,6 +3660,11 @@ ...@@ -3660,6 +3660,11 @@
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
"integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
}, },
"bootstrap-icons": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.5.0.tgz",
"integrity": "sha512-44feMc7DE1Ccpsas/1wioN8ewFJNquvi5FewA06wLnqct7CwMdGDVy41ieHaacogzDqLfG8nADIvMNp9e4bfbA=="
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
...@@ -10181,6 +10186,11 @@ ...@@ -10181,6 +10186,11 @@
"minimist": "^1.2.5" "minimist": "^1.2.5"
} }
}, },
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"move-concurrently": { "move-concurrently": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
...@@ -12357,6 +12367,14 @@ ...@@ -12357,6 +12367,14 @@
"lodash": "^4.17.19" "lodash": "^4.17.19"
} }
}, },
"react-bootstrap-icons": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/react-bootstrap-icons/-/react-bootstrap-icons-1.5.0.tgz",
"integrity": "sha512-QC5q4meHQG0cO9RJzeDLSqZ1gbVa9jxFCpONCE3GYl2FkbAKSyJAEsONlzTApbZ8/oG87gPWq0xAyn5SZ/Jafw==",
"requires": {
"prop-types": "^15.7.2"
}
},
"react-dev-utils": { "react-dev-utils": {
"version": "11.0.4", "version": "11.0.4",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz",
...@@ -12486,6 +12504,11 @@ ...@@ -12486,6 +12504,11 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
"integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew=="
}, },
"react-icons": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
"integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ=="
},
"react-is": { "react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
......
...@@ -8,10 +8,14 @@ ...@@ -8,10 +8,14 @@
"@testing-library/user-event": "^12.8.3", "@testing-library/user-event": "^12.8.3",
"bootstrap": "^4.6.0", "bootstrap": "^4.6.0",
"chart.js": "^3.5.1", "chart.js": "^3.5.1",
"bootstrap-icons": "^1.5.0",
"moment": "^2.29.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-chartjs-2": "^3.0.5", "react-chartjs-2": "^3.0.5",
"react-bootstrap-icons": "^1.5.0",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-dropdown": "^1.9.2", "react-dropdown": "^1.9.2",
"react-icons": "^4.2.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"react-select-search": "^3.0.8", "react-select-search": "^3.0.8",
......
...@@ -16,6 +16,7 @@ import QuestionDetails from "./Components/IT18050240/question_details" ...@@ -16,6 +16,7 @@ import QuestionDetails from "./Components/IT18050240/question_details"
import QuestionLayout from "./Components/IT18050240/question_layout" import QuestionLayout from "./Components/IT18050240/question_layout"
//import AdminQuestionManagement from "./Components/IT18050240/admin_question_management.js" //import AdminQuestionManagement from "./Components/IT18050240/admin_question_management.js"
import QuestionBank from "./Components/IT18050240/question_bank" import QuestionBank from "./Components/IT18050240/question_bank"
import TutorProfileView from "./Components/HomePage/TutorProfileView";
function App() { function App() {
return ( return (
...@@ -27,6 +28,7 @@ function App() { ...@@ -27,6 +28,7 @@ function App() {
<Route path="/SignUp" exact component={SignUp}/> <Route path="/SignUp" exact component={SignUp}/>
<Route path="/beforeConfirm" exact component={beforeConfirmation}/> <Route path="/beforeConfirm" exact component={beforeConfirmation}/>
<Route path="/AccountVerified/:id" exact component={VerifiedAccount}/> <Route path="/AccountVerified/:id" exact component={VerifiedAccount}/>
<Route path="/Home/ViewProfile/:id" exact component={TutorProfileView}/>
{/*<Route path="/studentDashboard" exact component={StudentDashboard}/>*/} {/*<Route path="/studentDashboard" exact component={StudentDashboard}/>*/}
......
...@@ -7,6 +7,7 @@ import ViewFinance from './view_financial_details'; ...@@ -7,6 +7,7 @@ import ViewFinance from './view_financial_details';
import EditFinance from './edit_financial_details'; import EditFinance from './edit_financial_details';
import AddClass from './add_class_details'; import AddClass from './add_class_details';
import Analytics from "./analytics"; import Analytics from "./analytics";
import studentRequest from './StudentRequestForClass';
export default class Dashboard extends Component { export default class Dashboard extends Component {
render() { render() {
...@@ -26,7 +27,7 @@ export default class Dashboard extends Component { ...@@ -26,7 +27,7 @@ export default class Dashboard extends Component {
<div className="logo-src"/> <div className="logo-src"/>
<div className="header__pane ml-auto"> <div className="header__pane ml-auto">
<div> <div>
<button type="button" className="hamburger close-sidebar-btn hamburger--elastic"data-class="closed-sidebar"> <button type="button" className="hamburger close-sidebar-btn hamburger--elastic" data-class="closed-sidebar">
<span className="hamburger-box"> <span className="hamburger-box">
<span className="hamburger-inner"/> <span className="hamburger-inner"/>
</span> </span>
...@@ -344,6 +345,7 @@ export default class Dashboard extends Component { ...@@ -344,6 +345,7 @@ export default class Dashboard extends Component {
{/*</Link>*/} {/*</Link>*/}
</li> </li>
<li> <li>
<a href="#"> <a href="#">
<i className="metismenu-icon fa fa-calendar"></i> <i className="metismenu-icon fa fa-calendar"></i>
...@@ -358,10 +360,10 @@ export default class Dashboard extends Component { ...@@ -358,10 +360,10 @@ export default class Dashboard extends Component {
</NavLink> </NavLink>
</li> </li>
<li> <li>
<a href="#"> <NavLink to={"/admin/classes/studentRequests/"}>
<i className="metismenu-icon"></i> <i className="metismenu-icon"></i>
Schedule Student Requests
</a> </NavLink>
</li> </li>
<li> <li>
<a href="#"> <a href="#">
...@@ -453,6 +455,7 @@ export default class Dashboard extends Component { ...@@ -453,6 +455,7 @@ export default class Dashboard extends Component {
<Route path="/admin/finance/add" exact component={AddFinance} /> <Route path="/admin/finance/add" exact component={AddFinance} />
<Route path={"/admin/finance/edit/:id"} exact component={EditFinance}/> <Route path={"/admin/finance/edit/:id"} exact component={EditFinance}/>
<Route path="/admin/classes/add" exact component={AddClass}/> <Route path="/admin/classes/add" exact component={AddClass}/>
<Route path="/admin/classes/studentRequests" exact component={studentRequest}/>
</div> </div>
{/* Footer */} {/* Footer */}
......
...@@ -23,7 +23,7 @@ export default class TutorCard extends Component{ ...@@ -23,7 +23,7 @@ export default class TutorCard extends Component{
<img src={TestTeacher} style={{width:'90px', height:'80px'}}/> <img src={TestTeacher} style={{width:'90px', height:'80px'}}/>
<div className="row" style={{width:'80%',background:'#216E9B', <div className="row" style={{width:'80%',background:'#216E9B',
marginLeft:'10px',marginTop:'5px',justifyContent:'center'}}> marginLeft:'10px',marginTop:'5px',justifyContent:'center'}}>
<h5 style={{color:'white',float:'center',marginBottom:'10px',marginTop:'5px'}}>98.5%</h5> <h5 style={{color:'white',float:'center',marginBottom:'10px',marginTop:'5px'}}><span>{this.props.data.tutor_finalScore.toFixed(2)} %</span></h5>
</div> </div>
</div> </div>
<div className="col-6" style={{margin:'0px'}}> <div className="col-6" style={{margin:'0px'}}>
...@@ -64,7 +64,7 @@ export default class TutorCard extends Component{ ...@@ -64,7 +64,7 @@ export default class TutorCard extends Component{
<img src={Star} style={{width:'20px', height:'20px'}}/> <img src={Star} style={{width:'20px', height:'20px'}}/>
</div> </div>
<div className="col" > <div className="col" >
<h5 style={{float:"left"}}>5</h5> <h5 style={{float:"left"}}>{this.props.data.tutor_avg_rating.toFixed(1)}</h5>
</div> </div>
</div> </div>
<div className="row"> <div className="row">
...@@ -72,7 +72,7 @@ export default class TutorCard extends Component{ ...@@ -72,7 +72,7 @@ export default class TutorCard extends Component{
<img src={ReviewImg} style={{width:'20px', height:'20px'}}/> <img src={ReviewImg} style={{width:'20px', height:'20px'}}/>
</div> </div>
<div className="col"> <div className="col">
<h5 style={{float:"left"}}>23 reviews</h5> <h5 style={{float:"left"}}>{this.props.data.tutor_review_count} reviews</h5>
</div> </div>
</div> </div>
<div className="row"> <div className="row">
...@@ -84,7 +84,8 @@ export default class TutorCard extends Component{ ...@@ -84,7 +84,8 @@ export default class TutorCard extends Component{
</div> </div>
</div> </div>
<div className="row"> <div className="row">
<button className="form-control" style={{background:"#216E9B", color:"white", marginLeft:'15px', marginRight:'15px'}}><b>View Profile</b></button> <button className="form-control" value={this.props.data._id}
style={{background:"#216E9B", color:"white", marginLeft:'15px', marginRight:'15px'}}><b>View Profile</b></button>
</div> </div>
</div> </div>
...@@ -97,8 +98,7 @@ export default class TutorCard extends Component{ ...@@ -97,8 +98,7 @@ export default class TutorCard extends Component{
<img src={RecommendIcon} style={{width:'100px', height:'90px', float:'left', margin:'10px'}}/> <img src={RecommendIcon} style={{width:'100px', height:'90px', float:'left', margin:'10px'}}/>
</div> </div>
</div> </div>
{/*{console.log("In Tutor Card")}*/}
{/*{console.log(this.props)}*/}
</div> </div>
) )
} }
......
...@@ -113,11 +113,17 @@ export default class ALResults extends Component{ ...@@ -113,11 +113,17 @@ export default class ALResults extends Component{
onSubmitResults(e){ onSubmitResults(e){
//let student_id = '60fc1aaf718c264214061846'; //let student_id = '60fc1aaf718c264214061846';
let Subject = {
[this.state.sub01] : this.state.sub01Result,
[this.state.sub02] : this.state.sub02Result,
[this.state.sub03] : this.state.sub03Result,
}
const newResult = { const newResult = {
student_id:this.state.studentID, student_id:this.state.studentID,
year:this.state.year, year:this.state.year,
stream:this.state.stream, stream:this.state.stream,
Subjects:Subject,
subject01:this.state.sub01, subject01:this.state.sub01,
subject02:this.state.sub02, subject02:this.state.sub02,
subject03:this.state.sub03, subject03:this.state.sub03,
......
const configs = { const configs = {
BASE_URL: 'http://localhost:5000', BASE_URL: 'http://localhost:5001',
}; };
module.exports = configs; module.exports = configs;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment