From 0e5bd3fd23fb6cdf51d2398c6c13c1da34ee0f8a Mon Sep 17 00:00:00 2001 From: Olson Ngula Date: Sat, 15 Jun 2024 04:12:21 +0300 Subject: [PATCH 1/2] Functionality and database changes --- courses.ejs | 20 ++++++++++++ my-courses.ejs | 16 ++++++++++ server.js | 86 +++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 courses.ejs create mode 100644 my-courses.ejs diff --git a/courses.ejs b/courses.ejs new file mode 100644 index 00000000..01e087ee --- /dev/null +++ b/courses.ejs @@ -0,0 +1,20 @@ + + + + Courses - Learning Management System + + +

Select Your Courses

+
+ +
+ +
+
+ View My Courses + + diff --git a/my-courses.ejs b/my-courses.ejs new file mode 100644 index 00000000..16f416fe --- /dev/null +++ b/my-courses.ejs @@ -0,0 +1,16 @@ + + + + My Courses - Learning Management System + + +

My Courses

+ +
+ Select More Courses + + diff --git a/server.js b/server.js index 2b854861..0d4ca770 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,3 @@ -// server.js const express = require('express'); const session = require('express-session'); const bcrypt = require('bcryptjs'); @@ -45,14 +44,12 @@ app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); - - // Define a User representation for clarity const User = { - tableName: 'users', + tableName: 'users', createUser: function(newUser, callback) { connection.query('INSERT INTO ' + this.tableName + ' SET ?', newUser, callback); - }, + }, getUserByEmail: function(email, callback) { connection.query('SELECT * FROM ' + this.tableName + ' WHERE email = ?', email, callback); }, @@ -102,12 +99,12 @@ app.post('/register', [ // Insert user into MySQL User.createUser(newUser, (error, results, fields) => { if (error) { - console.error('Error inserting user: ' + error.message); - return res.status(500).json({ error: error.message }); + console.error('Error inserting user: ' + error.message); + return res.status(500).json({ error: error.message }); } console.log('Inserted a new user with id ' + results.insertId); res.status(201).json(newUser); - }); + }); }); // Login route @@ -141,10 +138,12 @@ app.post('/logout', (req, res) => { res.send('Logout successful'); }); -//Dashboard route +// Dashboard route app.get('/dashboard', (req, res) => { - // Assuming you have middleware to handle user authentication and store user information in req.user - const userFullName = req.user.full_name; + if (!req.session.user) { + return res.status(401).send('Unauthorized'); + } + const userFullName = req.session.user.full_name; res.render('dashboard', { fullName: userFullName }); }); @@ -152,17 +151,66 @@ app.get('/dashboard', (req, res) => { app.get('/course/:id', (req, res) => { const courseId = req.params.id; const sql = 'SELECT * FROM courses WHERE id = ?'; - db.query(sql, [courseId], (err, result) => { - if (err) { - throw err; - } - // Send course content as JSON response - res.json(result); + connection.query(sql, [courseId], (err, result) => { + if (err) { + throw err; + } + // Send course content as JSON response + res.json(result); + }); +}); + +// Route to display all courses +app.get('/courses', (req, res) => { + if (!req.session.user) { + return res.status(401).send('Unauthorized'); + } + const sql = 'SELECT * FROM courses'; + connection.query(sql, (err, results) => { + if (err) { + throw err; + } + res.render('courses', { courses: results }); + }); +}); + +// Route to handle course selection +app.post('/select-course', (req, res) => { + if (!req.session.user) { + return res.status(401).send('Unauthorized'); + } + const userId = req.session.user.id; + const courseId = req.body.courseId; + const sql = 'INSERT INTO user_courses (user_id, course_id) VALUES (?, ?)'; + connection.query(sql, [userId, courseId], (err, result) => { + if (err) { + throw err; + } + res.redirect('/my-courses'); }); - }); +}); + +// Route to display selected courses for the logged-in user +app.get('/my-courses', (req, res) => { + if (!req.session.user) { + return res.status(401).send('Unauthorized'); + } + const userId = req.session.user.id; + const sql = ` + SELECT courses.name FROM courses + JOIN user_courses ON courses.id = user_courses.course_id + WHERE user_courses.user_id = ? + `; + connection.query(sql, [userId], (err, results) => { + if (err) { + throw err; + } + res.render('my-courses', { courses: results }); + }); +}); // Start server const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); -}); \ No newline at end of file +}); From e0d6faa13c51debc361dc3c29bfb81e2292e62ec Mon Sep 17 00:00:00 2001 From: Olson Ngula Date: Sat, 15 Jun 2024 12:57:24 +0300 Subject: [PATCH 2/2] Olly COdes' ' --- server.js | 75 +++++++++++++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/server.js b/server.js index 0d4ca770..99a9f49e 100644 --- a/server.js +++ b/server.js @@ -17,7 +17,7 @@ app.use(session({ const connection = mysql.createConnection({ host: 'localhost', user: 'root', - password: '', + password: '', // Update with your MySQL password if needed database: 'learning_management' }); @@ -46,10 +46,10 @@ app.get('/', (req, res) => { // Define a User representation for clarity const User = { - tableName: 'users', + tableName: 'users', createUser: function(newUser, callback) { connection.query('INSERT INTO ' + this.tableName + ' SET ?', newUser, callback); - }, + }, getUserByEmail: function(email, callback) { connection.query('SELECT * FROM ' + this.tableName + ' WHERE email = ?', email, callback); }, @@ -99,12 +99,12 @@ app.post('/register', [ // Insert user into MySQL User.createUser(newUser, (error, results, fields) => { if (error) { - console.error('Error inserting user: ' + error.message); - return res.status(500).json({ error: error.message }); + console.error('Error inserting user: ' + error.message); + return res.status(500).json({ error: error.message }); } console.log('Inserted a new user with id ' + results.insertId); res.status(201).json(newUser); - }); + }); }); // Login route @@ -141,10 +141,9 @@ app.post('/logout', (req, res) => { // Dashboard route app.get('/dashboard', (req, res) => { if (!req.session.user) { - return res.status(401).send('Unauthorized'); + return res.status(401).send('You need to log in to access this page'); } - const userFullName = req.session.user.full_name; - res.render('dashboard', { fullName: userFullName }); + res.sendFile(__dirname + '/dashboard.html'); }); // Route to retrieve course content @@ -152,60 +151,54 @@ app.get('/course/:id', (req, res) => { const courseId = req.params.id; const sql = 'SELECT * FROM courses WHERE id = ?'; connection.query(sql, [courseId], (err, result) => { - if (err) { - throw err; - } - // Send course content as JSON response - res.json(result); + if (err) { + throw err; + } + // Send course content as JSON response + res.json(result); }); }); -// Route to display all courses -app.get('/courses', (req, res) => { +// Route to select courses +app.post('/select-courses', (req, res) => { if (!req.session.user) { - return res.status(401).send('Unauthorized'); + return res.status(401).send('You need to log in to select courses'); } - const sql = 'SELECT * FROM courses'; - connection.query(sql, (err, results) => { - if (err) { - throw err; - } - res.render('courses', { courses: results }); - }); -}); -// Route to handle course selection -app.post('/select-course', (req, res) => { - if (!req.session.user) { - return res.status(401).send('Unauthorized'); - } const userId = req.session.user.id; - const courseId = req.body.courseId; - const sql = 'INSERT INTO user_courses (user_id, course_id) VALUES (?, ?)'; - connection.query(sql, [userId, courseId], (err, result) => { + const courseIds = req.body.courseIds; // Assume courseIds is an array of selected course IDs + + // Insert selected courses into user_courses table + const values = courseIds.map(courseId => [userId, courseId]); + const sql = 'INSERT INTO user_courses (user_id, course_id) VALUES ?'; + + connection.query(sql, [values], (err, result) => { if (err) { - throw err; + return res.status(500).send('Error selecting courses'); } - res.redirect('/my-courses'); + res.send('Courses selected successfully'); }); }); -// Route to display selected courses for the logged-in user +// Route to get selected courses for logged-in user app.get('/my-courses', (req, res) => { if (!req.session.user) { - return res.status(401).send('Unauthorized'); + return res.status(401).send('You need to log in to view your courses'); } + const userId = req.session.user.id; const sql = ` - SELECT courses.name FROM courses + SELECT courses.id, courses.name + FROM courses JOIN user_courses ON courses.id = user_courses.course_id WHERE user_courses.user_id = ? `; + connection.query(sql, [userId], (err, results) => { if (err) { - throw err; + return res.status(500).send('Error retrieving courses'); } - res.render('my-courses', { courses: results }); + res.json(results); }); }); @@ -213,4 +206,4 @@ app.get('/my-courses', (req, res) => { const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); -}); +}); \ No newline at end of file