StMarkSchoolApplication / app / controller / courseController.js
courseController.js
Raw
const db = require('../config/db.config.js');
const Level = db.level;
const Course = db.course;
const CourseEnrollments = db.course_enrolment;


/**
 * Create Course
 */
exports.createCourse = (req, res) => {
	Course.create({
        name: req.body.name,
        description: req.body.description,
        level_id : req.body.level_id,
	}).then(course => {
		// set created level as next_level to it's prev
		if (req.body.prev_course_id) {
			Course.find({ where: { id: req.body.prev_course_id } }
			).then(prev_course => {
				prev_course.update({ next_course: course.id })
			}).catch(err => {
				res.status(500).send("Error -> " + err);
			});
		}
		// end of set created level as next_level to it's prev
		res.status(200).json({
			"description": "Course Created Successfully",
			"course": course
		});
	}).catch(err => {
		res.status(500).send("Fail! Error -> " + err);
	})
}

exports.enrollCourse = (req, res) => {
	CourseEnrollments.create({
        user_id: req.userId,
        course_id: req.body.course_id,
        current_grade: 0
	}).then(result => {
		// end of set created level as next_level to it's prev
		res.status(200).json({
			"description": "Course Enrolled",
			"result": result
		});
	}).catch(err => {
		res.status(500).send("Fail! Error -> " + err);
	})
}

/**
 * Get courses with their level
 */
exports.getCourses = (req, res) => {
    db.sequelize.query("SELECT * FROM courses LEFT JOIN (SELECT course_id FROM course_enrolments where user_id = " + req.userId + ") c2 ON courses.id = c2.course_id;")
	// Course.findAll({
	// 	attributes: ['name','description'],
	// 	include: [{
	// 		model: Level,
	// 	}]
	// })
    .then(courses => {
        for(i in courses[0]) {
            courses[0][i].enrolled = courses[0][i].course_id === null ? false : true
        }
		res.status(200).json({
			"description": "Courses Page",
			"courses": courses[0]
		});
	}).catch(err => {
		res.status(500).json({
			"description": "Can not access courses Page",
			"error": err
		});
	})
}

/**
 * Get course with it's level
 */
exports.getCourse = (req, res) => {
	Course.findOne({
		where: { id: req.body.course_id },
		attributes: ['name','description'],
		include: [{
			model: Level,
		}]
	}).then(course => {
		res.status(200).json({
			"description": "course page",
			"course": course
		});
	}).catch(err => {
		res.status(500).json({
			"description": "Can not access course Page",
			"error": err
		});
	})
}