diff --git a/Course_Instance.js b/Course_Instance.js index b334f8e..80b789f 100644 --- a/Course_Instance.js +++ b/Course_Instance.js @@ -50,9 +50,32 @@ router.route('/course') // create a new course (accessed at POST http://localhost:16390/api/course) .post(function(req, res) { - course.addCourse(req); - - res.json({message : 'Course added!'}); + course.addCourse(req, res, handleResult); + function handleResult(response) + { + console.log('Callback received'); + console.log("Status code " +response.statusCode); + if(response.statusCode == 200){ + console.log('200'); + res.status(200); + res.json({ message: 'Course added!'}); + + } + + else if(response.statusCode == 500){ + console.log('500'); + res.status(500); + res.json({ message: 'Internal Server Error!'}); + + } + else if(response.statusCode == 409){ + console.log('409'); + res.status(409); + res.json({ message: 'Course already exists.'}); + + } + } + }); @@ -77,18 +100,74 @@ router.route('/course/:course_id') console.log("Request handled"); }// Logic to show course details }) + // update the student with this id (accessed at PUT http://localhost:16390/api/course/:course_id) .put(function(req, res) { //Logic to upadte student details - course.updateCourse(req); - res.json({ message: 'Course updated!' }); + course.updateCourse(req, res, handleResult); + function handleResult(response) + { + console.log('Callback received'); + console.log("Status code " +response.statusCode); + if(response.statusCode == 200){ + console.log('200'); + res.status(200); + res.json({ message: 'Course updated!'}); + + } + + else if(response.statusCode == 500){ + console.log('500'); + res.status(500); + res.json({ message: 'Internal Server Error!'}); + + } + else if(response.statusCode == 400){ + console.log('400'); + res.status(400); + res.json({ message: 'Bad request. Please check body parameters.'}); + + } + else if(response.statusCode == 417){ + console.log('417'); + res.status(417); + res.json({ message: 'Updating a course that does not exist'}); + + } + + } + }) .delete(function(req, res) { //Logic to upadte student details - course.deleteCourse(req); - res.json({ message: 'Course deleted!' }); + course.deleteCourse(req, res, handleResult); + function handleResult(response) + { + console.log('Callback received'); + console.log(response); + console.log("Status code " +response.statusCode); + if(response.statusCode == 200){ + console.log('200'); + res.status(200); + res.json({ message: 'Successfully deleted course'}); + + } + + else if(response.statusCode == 500){ + console.log('500'); + res.status(500); + res.json({ message: 'Internal Server Error!'}); + + } + else if(response.statusCode == 417){ + console.log('417'); + res.status(417); + res.json({ message: 'Expectation Failed. Deleting a course that does not exist'}); + + } + } }); @@ -96,8 +175,33 @@ router.route('/course/:course_id') router.route('/course/:course_id/student') .post(function(req, res) { - course.addStudentToCourse(req); - res.json({ message: 'Added Student to Course'}) + course.addStudentToCourse(req,res,handleResult); + function handleResult(response) + { + console.log('Callback received'); + console.log(response); + console.log("Status code " +response.statusCode); + if(response.statusCode == 200){ + console.log('200'); + res.status(200); + res.json({ message: 'Course added!'}); + + } + + else if(response.statusCode == 500){ + console.log('500'); + res.status(500); + res.json({ message: 'Internal Server Error!'}); + + } + else if(response.statusCode == 417){ + console.log('417'); + res.status(417); + res.json({ message: 'Expectation Failed. Adding Student to Course that does not exist.'}); + + } + } + }); //API end point to get student details (accessed at POST http://localhost:8080/api/student/id) @@ -107,12 +211,36 @@ router.route('/course/:course_id/student') // get the student with that id (accessed at GET http://localhost:8080/api/student/:student_id) .delete(function(req, res) { - course.deleteStudentFromCourse(req); - res.json({ message: 'Student deleted from course'}); + course.deleteStudentFromCourse(req,res,handleResult); + function handleResult(response) + { + console.log('Callback received'); + console.log(response); + console.log("Status code " +response.statusCode); + if(response.statusCode == 200){ + console.log('200'); + res.status(200); + res.json({ message: 'Course updated!'}); + + } + + else if(response.statusCode == 500){ + console.log('500'); + res.status(500); + res.json({ message: 'Internal Server Error!'}); + + } + else if(response.statusCode == 417){ + console.log('417'); + res.status(417); + res.json({ message: 'Expectation Failed. Invalid operation'}); + + } + } }); -// Listening for RI scenes +Listening for RI scenes var subscriber = redis.createClient(6379, 'localhost' , {no_ready_check: true}); subscriber.on('connect', function() { console.log('Connected to Subscriber Redis'); diff --git a/Student_Instance1.js b/Student_Instance1.js index c6bee8d..ba38b29 100644 --- a/Student_Instance1.js +++ b/Student_Instance1.js @@ -63,7 +63,7 @@ router.route('/student') if(response.statusCode == 200){ console.log('200'); res.status(200); - res.json({ message: 'Student updated!'}); + res.json({ message: 'Student added!'}); } @@ -208,7 +208,7 @@ router.route('/student/:student_id/course') else if(response.statusCode == 417){ console.log('417'); res.status(417); - res.json({ message: 'Expectation Failed. Adding Course to Student that does not exist.'}); + res.json({ message: 'Expectation Failed. Invalid Operation.'}); } } diff --git a/course.js b/course.js index 4ecd64b..6b9e4ca 100644 --- a/course.js +++ b/course.js @@ -1 +1 @@ -var pg = require('pg'); var connectionString = 'postgres://postgres:postgres@localhost:5432/infinity_course_db'; var client = new pg.Client(connectionString); var redis = require('redis'); client.connect(); var publisher = redis.createClient(6379, 'localhost' , {no_ready_check: true}); publisher.on('connect', function() { console.log('Connected to Publisher Redis'); }); exports.addCourse = function(req) { console.log('Connected to database'); console.log(req.body.cid); var query = client.query("insert into ms_course_tbl values($1, $2, $3, $4, $5)", [req.body.cid, req.body.courseno, req.body.prof, req.body.room, req.body.timings]); query.on('end', function(result) { console.log("Row successfully inserted"); //client.end(); }); } exports.addStudentToCourse = function(req) { var lname = req.body.lname; var courseno = req.body.courseno; var queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where courseno = $1 and lname = $2", [courseno, lname], function(err, result){ rowCount = result.rows.length; if(rowCount == 0) { var query = client.query("insert into ms_student_course_tbl(courseno,lname) values($1, $2)", [courseno,lname]); query.on('end', function(result) { message = { "origin":"course" , "event":"student_added_to_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully inserted"); }); } }); } exports.getCourseDetails = function(req,res,callback) { console.log('Connected to database'); console.log(req.params.course_id); var query = client.query("Select * from ms_course_tbl where courseno= $1", [req.params.course_id]); query.on('row', function(row) { console.log('Row received') ; res.json({cid:row.cid, courseno:row.courseno, prof:row.prof, room:row.room, timings:row.timings}); callback(res); //client.end(); }); } exports.updateCourse = function(req) { console.log('Connected to database in update'); var queryString= 'update ms_course_tbl set '; var courseno = req.params.course_id; for (var key in req.body) { if (req.body.hasOwnProperty(key)) { console.log(key + " -> " + req.body[key]); queryString = queryString + key + ' = ' + "'"+req.body[key] + "'" + ','; } } queryString = queryString.substring(0, queryString.length - 1); queryString = queryString + ' where courseno = $1'; console.log(queryString); var query = client.query(queryString, [courseno]); query.on('end', function(result) { console.log("Row successfully updated"); //client.end(); }); } exports.deleteCourse = function(req) { console.log('Connected to database to delete student'); var courseno = req.params.course_id; console.log(courseno); var queryForCourseDatabase = 'Delete from ms_course_tbl where courseno = $1'; var queryForStudentCourseDatabase ='Delete from ms_student_course_tbl where courseno = $1'; var query = client.query(queryForStudentCourseDatabase, [courseno]); query.on('end', function(result) { console.log("Row successfully deleted from relationship table"); var queryForCourse = client.query(queryForCourseDatabase, [courseno]); queryForCourse.on('end', function(result) { console.log("Inside queryforCourse end") message = { "origin":"course" , "event":"student_removed_from_course", "lname" : "All", "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course table"); //client.end(); }); }); } exports.deleteStudentFromCourse = function(req) { var courseno = req.params.course_id; var lname = req.params.student_id; var queryForStudentCourseDatabase; var query; var queryForCheckingExistenceOfPair; if(courseno == 'All') { queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where lname = $1 limit 1", [lname]); queryForCheckingExistenceOfPair.on('row', function(row){ queryForStudentCourseDatabase = 'Delete from ms_student_course_tbl where lname = $1'; var query = client.query(queryForStudentCourseDatabase, [lname]); query.on('end', function(result) { message = { "origin":"course" , "event":"student_removed_from_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course-student relationship table"); //client.end(); }); }); } else { queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where courseno = $1 and lname = $2", [courseno, lname]); queryForCheckingExistenceOfPair.on('row', function(row){ queryForStudentCourseDatabase = 'Delete from ms_student_course_tbl where lname = $1 and courseno = $2'; var query = client.query(queryForStudentCourseDatabase, [lname,courseno]); query.on('end', function(result) { message = { "origin":"course" , "event":"student_removed_from_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course-student relationship table"); //client.end(); }); }); } } \ No newline at end of file +var pg = require('pg'); var connectionString = 'postgres://postgres:postgres@localhost:5433/infinity_course_db'; var client = new pg.Client(connectionString); var redis = require('redis'); client.connect(); var publisher = redis.createClient(6379, 'localhost' , {no_ready_check: true}); publisher.on('connect', function() { console.log('Connected to Publisher Redis'); }); exports.addCourse = function(req, res, callback) { console.log('Connected to database'); console.log(req.body.cid); var query = client.query("insert into ms_course_tbl values($1, $2, $3, $4, $5)", [req.body.cid, req.body.courseno, req.body.prof, req.body.room, req.body.timings], function(err) { if(err) { console.log('Course already exists.'); res.status(409); } else { query.on('end', function(error, result) { if(error){ res.status(500); } //No error else{ res.status(200); console.log("Successfully added course."); } }); } callback(res); }); } exports.addStudentToCourse = function(req, res, callback) { var lname = req.body.lname; var courseno = req.body.courseno; var queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where courseno = $1 and lname = $2", [courseno, lname], function(err, result){ rowCount = result.rows.length; if(rowCount == 0) { var query = client.query("insert into ms_student_course_tbl(courseno,lname) values($1, $2)", [courseno,lname], function(err) { if(err) { console.log('Trying to add course to a student that does not exist'); res.status(417); } else { query.on('end', function(error, result) { if(error) { res.status(500); } else { res.status(200); console.log("Row successfully inserted"); message = { "origin":"course" , "event":"student_added_to_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); } }); } callback(res); }); } }); } exports.getCourseDetails = function(req,res,callback) { var lnames = []; var responseJson; console.log('Connected to database'); console.log(req.params.course_id); var flag = false; var query = client.query("Select * from ms_course_tbl left outer join ms_student_course_tbl on (ms_course_tbl.courseno = ms_student_course_tbl.courseno) where ms_course_tbl.courseno= $1", [req.params.course_id]); query.on('row', function(row) { flag = true; lnames.push(row.lname); responseJson = "{'cid':"+ row.cid + ", 'courseno':" + req.params.course_id + ", 'prof':"+ row.prof + ", 'room' :" + row.room + ", 'timings':" + row.timings + "," + " 'lnames': " + lnames + "}"; }); query.on('end', function(result){ if(flag) { console.log(responseJson); res.json(responseJson); } else { res.json({message:'Course does not exist'}); } callback(res); }); } exports.updateCourse = function(req, res, callback) { console.log('Connected to database in update'); var queryString= 'update ms_course_tbl set '; var courseno = req.params.course_id; for (var key in req.body) { if (req.body.hasOwnProperty(key)) { console.log(key + " -> " + req.body[key]); queryString = queryString + key + ' = ' + "'"+req.body[key] + "'" + ','; } } queryString = queryString.substring(0, queryString.length - 1); queryString = queryString + ' where courseno = $1'; console.log(queryString); var query = client.query(queryString, [courseno], function(err) { if(err) { console.log('error'); res.status(400); callback(res); } else { query.on('end', function(result) { if(result.rowCount == 0) { res.status(417); callback(res); } //No error else{ res.status(200); console.log("Row successfully updated"); callback(res); } //client.end(); }); } }); } exports.deleteCourse = function(req, res, callback) { console.log('Connected to database to delete student'); var courseno = req.params.course_id; console.log(courseno); var queryForCourseDatabase = 'Delete from ms_course_tbl where courseno = $1'; var queryForStudentCourseDatabase ='Delete from ms_student_course_tbl where courseno = $1'; var query = client.query(queryForStudentCourseDatabase, [courseno]); query.on('end', function(result) { console.log("Row successfully deleted from relationship table"); var queryForCourse = client.query(queryForCourseDatabase, [courseno]); queryForCourse.on('end', function(result) { if(result.rowCount == 0) { res.status(417); } else { res.status(200); console.log("Inside queryforCourse end") message = { "origin":"course" , "event":"student_removed_from_course", "lname" : "All", "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course table"); //client.end(); } callback(res); }); }); } exports.deleteStudentFromCourse = function(req, res, callback) { var courseno = req.params.course_id; var lname = req.params.student_id; var queryForStudentCourseDatabase; var query; var queryForCheckingExistenceOfPair; if(courseno == 'All') { queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where lname = $1 limit 1", [lname]); queryForCheckingExistenceOfPair.on('row', function(row){ queryForStudentCourseDatabase = 'Delete from ms_student_course_tbl where lname = $1'; var query = client.query(queryForStudentCourseDatabase, [lname]); query.on('end', function(result) { message = { "origin":"course" , "event":"student_removed_from_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course-student relationship table"); //client.end(); }); }); } else { queryForCheckingExistenceOfPair = client.query("select * from ms_student_course_tbl where courseno = $1 and lname = $2", [courseno, lname]); queryForCheckingExistenceOfPair.on('row', function(row){ queryForStudentCourseDatabase = 'Delete from ms_student_course_tbl where lname = $1 and courseno = $2'; var query = client.query(queryForStudentCourseDatabase, [lname,courseno]); query.on('end', function(result) { message = { "origin":"course" , "event":"student_removed_from_course", "lname" : lname, "courseno" : courseno }; console.log(typeof(message.origin)); publisher.publish('RI', JSON.stringify(message)); console.log("Row successfully deleted from course-student relationship table"); //client.end(); }); }); } } \ No newline at end of file diff --git a/student.js b/student.js index ce3b8ec..6c1a08b 100644 --- a/student.js +++ b/student.js @@ -56,7 +56,6 @@ if(rowCount == 0) { var query = client.query("insert into ms_student_course_tbl values($1, $2)", [lname,courseno], function(err) { - if(err) { console.log('Trying to add course to a student that does not exist'); @@ -223,7 +222,7 @@ exports.deleteStudent = function(req, res, callback) -exports.deleteCourseFromStudent = function(req,res,callback) +exports.deleteCourseFromStudent = function(req) { var courseno = req.params.course_id;