init
This commit is contained in:
17
src/routes/api/apiTest.js
Normal file
17
src/routes/api/apiTest.js
Normal file
@@ -0,0 +1,17 @@
|
||||
const apiTest = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const responseObject = {
|
||||
message: 'Hello, this is your JSON response!',
|
||||
success: true,
|
||||
data: {
|
||||
name: 'John Doe',
|
||||
age: 30,
|
||||
job: 'Developer'
|
||||
}
|
||||
};
|
||||
res.json(responseObject);
|
||||
};
|
||||
|
||||
module.exports = apiTest
|
||||
|
||||
149
src/routes/api/classMates.js
Normal file
149
src/routes/api/classMates.js
Normal file
@@ -0,0 +1,149 @@
|
||||
const classMates = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
let classmatesData = [
|
||||
{
|
||||
id: "1",
|
||||
name: "Daniel Nguyen",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar1.png"
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
name: "Sarah Anderson",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar2.png"
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
name: "John Smith",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar3.png"
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
name: "Emily Davis",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar4.png"
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
name: "Michael Johnson",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar5.png"
|
||||
},
|
||||
{
|
||||
id: "6",
|
||||
name: "Jessica Wilson",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar6.png"
|
||||
},
|
||||
{
|
||||
id: "7",
|
||||
name: "David Brown",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar1.png"
|
||||
},
|
||||
{
|
||||
id: "8",
|
||||
name: "Laura Lee",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar2.png"
|
||||
},
|
||||
{
|
||||
id: "9",
|
||||
name: "Chris Miller",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar3.png"
|
||||
},
|
||||
{
|
||||
id: "10",
|
||||
name: "Sophia Taylor",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar4.png"
|
||||
},
|
||||
{
|
||||
id: "11",
|
||||
name: "James Anderson",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar5.png"
|
||||
},
|
||||
{
|
||||
id: "12",
|
||||
name: "Olivia Thomas",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar6.png"
|
||||
},
|
||||
{
|
||||
id: "13",
|
||||
name: "Ethan Martinez",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar1.png"
|
||||
},
|
||||
{
|
||||
id: "14",
|
||||
name: "Ava Garcia",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar2.png"
|
||||
},
|
||||
{
|
||||
id: "15",
|
||||
name: "Noah Rodriguez",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar3.png"
|
||||
},
|
||||
{
|
||||
id: "16",
|
||||
name: "Mia Martinez",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar4.png"
|
||||
},
|
||||
{
|
||||
id: "17",
|
||||
name: "Lucas Wilson",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar5.png"
|
||||
},
|
||||
{
|
||||
id: "18",
|
||||
name: "Isabella Clark",
|
||||
program: "Undergraduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar6.png"
|
||||
},
|
||||
{
|
||||
id: "19",
|
||||
name: "Liam Walker",
|
||||
program: "Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar1.png"
|
||||
},
|
||||
{
|
||||
id: "20",
|
||||
name: "Charlotte Lewis",
|
||||
program: "Post-Graduate Program",
|
||||
type: "Student",
|
||||
avatar: "/assets/avatar2.png"
|
||||
}
|
||||
];
|
||||
res.json(classmatesData);
|
||||
};
|
||||
|
||||
module.exports = classMates;
|
||||
70
src/routes/api/continueLearning.js
Normal file
70
src/routes/api/continueLearning.js
Normal file
@@ -0,0 +1,70 @@
|
||||
const mysql = require("mysql2");
|
||||
const continueLearning = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM continue_learning`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = continueLearning;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// let courseData = [
|
||||
// {
|
||||
// id : "1",
|
||||
// title : "Life History of Dr. Maria Montessori",
|
||||
// chapter : "1",
|
||||
// Program : "Graduate Program",
|
||||
// img : "/assets/course1.jpg"
|
||||
// },
|
||||
// {
|
||||
// id : "2",
|
||||
// title : "Introduction to Montessori Methods",
|
||||
// chapter : "2",
|
||||
// Program : "Graduate Program",
|
||||
// img : "/assets/course2.jpg"
|
||||
// },
|
||||
// {
|
||||
// id : "3",
|
||||
// title : "Exercises on Practical Life",
|
||||
// chapter : "3",
|
||||
// Program : "Graduate Program",
|
||||
// img : "/assets/course3.jpg"
|
||||
// }
|
||||
// ];
|
||||
// res.json(courseData);
|
||||
35
src/routes/api/generateQuestions.js
Normal file
35
src/routes/api/generateQuestions.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const generateQuestions = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const { questions } = req.body;
|
||||
res.send( questions );
|
||||
questions.forEach(question => {
|
||||
const { questionText, options, correctAnswer } = question;
|
||||
const sql = 'INSERT INTO quiz_questions (questionText, option1, option2, option3, option4, correctAnswer) VALUES (?, ?, ?, ?, ?, ?)';
|
||||
db.query(sql, [questionText, options[0], options[1], options[2], options[3], correctAnswer], (err, result) => {
|
||||
if (err) {
|
||||
console.error('Error inserting question:', err);
|
||||
res.status(500).send('Error inserting question');
|
||||
return;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
res.status(200).send('Questions added successfully');
|
||||
}
|
||||
module.exports = generateQuestions;
|
||||
32
src/routes/api/getGameScore.js
Normal file
32
src/routes/api/getGameScore.js
Normal file
@@ -0,0 +1,32 @@
|
||||
const mysql = require("mysql2");
|
||||
const getGameScore = (req, res) => {
|
||||
const pool = mysql.createPool({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: 'beanstalk_game',
|
||||
waitForConnections: true,
|
||||
connectionLimit: 10,
|
||||
queueLimit: 0
|
||||
});
|
||||
const promisePool = pool.promise();
|
||||
const { userId, gameName, gameID } = req.body;
|
||||
|
||||
const query = 'SELECT score, gameTime FROM gameData WHERE userId = ? AND gameName = ? AND gameID = ?';
|
||||
|
||||
pool.query(query, [userId, gameName, gameID], (error, results) => {
|
||||
if (error) {
|
||||
return res.status(500).json({ message: 'Database query failed', error });
|
||||
}
|
||||
|
||||
if (results.length > 0) {
|
||||
const game = results[0];
|
||||
res.json({ score: game.score, gameTime: game.gameTime });
|
||||
} else {
|
||||
res.status(404).json({ message: 'Game data not found' });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = getGameScore;
|
||||
|
||||
63
src/routes/api/knowledgeQuests.js
Normal file
63
src/routes/api/knowledgeQuests.js
Normal file
@@ -0,0 +1,63 @@
|
||||
const mysql = require("mysql2");
|
||||
const knowledgeQuests = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM knowledge_quests WHERE status = 1`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = knowledgeQuests;
|
||||
|
||||
|
||||
|
||||
// let knowledgeData = [
|
||||
// {
|
||||
// id: "1",
|
||||
// status: "1",
|
||||
// title: "Assessment on Special Education",
|
||||
// challenge: "Challenge yourself & climb the leaderboard.",
|
||||
// question: "Subjective Question",
|
||||
// img: "/assets/knowledge1.jpg"
|
||||
// },
|
||||
// {
|
||||
// id: "2",
|
||||
// status: "1",
|
||||
// title: "Quiz on Children Psychology",
|
||||
// challenge: "Challenge yourself & climb the leaderboard.",
|
||||
// question: "MCQ",
|
||||
// img: "/assets/knowledge2.jpg"
|
||||
// },
|
||||
// {
|
||||
// id: "3",
|
||||
// status: "1",
|
||||
// title: "Quiz on Montessori Methods",
|
||||
// challenge: "Challenge yourself & climb the leaderboard.",
|
||||
// question: "MCQ",
|
||||
// img: "/assets/knowledge3.jpg"
|
||||
// }
|
||||
// ];
|
||||
// res.json(knowledgeData);
|
||||
180
src/routes/api/knowledgeQuestsAllContent.js
Normal file
180
src/routes/api/knowledgeQuestsAllContent.js
Normal file
@@ -0,0 +1,180 @@
|
||||
|
||||
const knowledgeQuestsCompleted = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
let knowledgeCompleted = [
|
||||
{
|
||||
id: "1",
|
||||
status: "1",
|
||||
title: "Assessment on Special Education",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "Subjective Question",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
status: "1",
|
||||
title: "Quiz on Children Psychology",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
status: "1",
|
||||
title: "Quiz on Montessori Methods",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
status: "1",
|
||||
title: "Assessment on Special Education",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "Subjective Question",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
status: "1",
|
||||
title: "Quiz on Children Psychology",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "6",
|
||||
status: "1",
|
||||
title: "Quiz on Montessori Methods",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "7",
|
||||
status: "1",
|
||||
title: "Workshop on Child Development",
|
||||
challenge: "Expand your knowledge & earn badges.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "8",
|
||||
status: "1",
|
||||
title: "Webinar on Educational Psychology",
|
||||
challenge: "Join & enhance your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "9",
|
||||
status: "1",
|
||||
title: "Seminar on Inclusive Education",
|
||||
challenge: "Participate & gain insights.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "10",
|
||||
status: "1",
|
||||
title: "Course on Early Childhood Education",
|
||||
challenge: "Complete the course & get certified.",
|
||||
question: "Multiple Modules",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "11",
|
||||
status: "1",
|
||||
title: "Training on Classroom Management",
|
||||
challenge: "Improve your teaching strategies.",
|
||||
question: "Practical Tasks",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "12",
|
||||
status: "1",
|
||||
title: "Lecture on Cognitive Development",
|
||||
challenge: "Expand your understanding & get certified.",
|
||||
question: "Q&A Session",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "13",
|
||||
status: "1",
|
||||
title: "Workshop on Behavioral Issues",
|
||||
challenge: "Join & learn from experts.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "14",
|
||||
status: "1",
|
||||
title: "Seminar on Learning Disabilities",
|
||||
challenge: "Participate & enhance your knowledge.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "15",
|
||||
status: "1",
|
||||
title: "Webinar on Child Psychology",
|
||||
challenge: "Join & expand your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "16",
|
||||
status: "1",
|
||||
title: "Course on Special Education Needs",
|
||||
challenge: "Complete the course & get certified.",
|
||||
question: "Multiple Modules",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "17",
|
||||
status: "1",
|
||||
title: "Training on Autism Spectrum Disorder",
|
||||
challenge: "Improve your teaching strategies.",
|
||||
question: "Practical Tasks",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "18",
|
||||
status: "1",
|
||||
title: "Lecture on Emotional Development",
|
||||
challenge: "Expand your understanding & get certified.",
|
||||
question: "Q&A Session",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "19",
|
||||
status: "1",
|
||||
title: "Workshop on ADHD",
|
||||
challenge: "Join & learn from experts.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "20",
|
||||
status: "1",
|
||||
title: "Seminar on Speech and Language Disorders",
|
||||
challenge: "Participate & enhance your knowledge.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "21",
|
||||
status: "1",
|
||||
title: "Webinar on Child Nutrition",
|
||||
challenge: "Join & expand your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
}
|
||||
];
|
||||
res.json(knowledgeCompleted);
|
||||
};
|
||||
|
||||
module.exports = knowledgeQuestsCompleted;
|
||||
|
||||
// knowledgeQuestsAllContent
|
||||
180
src/routes/api/knowledgeQuestsCompleted.js
Normal file
180
src/routes/api/knowledgeQuestsCompleted.js
Normal file
@@ -0,0 +1,180 @@
|
||||
|
||||
const knowledgeQuestsAllContent = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
let knowledgeData = [
|
||||
{
|
||||
id: "1",
|
||||
status: "1",
|
||||
title: "Assessment on Special Education",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "Subjective Question",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
status: "1",
|
||||
title: "Quiz on Children Psychology",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
status: "1",
|
||||
title: "Quiz on Montessori Methods",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
status: "1",
|
||||
title: "Assessment on Special Education",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "Subjective Question",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
status: "1",
|
||||
title: "Quiz on Children Psychology",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "6",
|
||||
status: "1",
|
||||
title: "Quiz on Montessori Methods",
|
||||
challenge: "Challenge yourself & climb the leaderboard.",
|
||||
question: "MCQ",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "7",
|
||||
status: "1",
|
||||
title: "Workshop on Child Development",
|
||||
challenge: "Expand your knowledge & earn badges.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "8",
|
||||
status: "1",
|
||||
title: "Webinar on Educational Psychology",
|
||||
challenge: "Join & enhance your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "9",
|
||||
status: "1",
|
||||
title: "Seminar on Inclusive Education",
|
||||
challenge: "Participate & gain insights.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "10",
|
||||
status: "1",
|
||||
title: "Course on Early Childhood Education",
|
||||
challenge: "Complete the course & get certified.",
|
||||
question: "Multiple Modules",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "11",
|
||||
status: "1",
|
||||
title: "Training on Classroom Management",
|
||||
challenge: "Improve your teaching strategies.",
|
||||
question: "Practical Tasks",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "12",
|
||||
status: "1",
|
||||
title: "Lecture on Cognitive Development",
|
||||
challenge: "Expand your understanding & get certified.",
|
||||
question: "Q&A Session",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "13",
|
||||
status: "1",
|
||||
title: "Workshop on Behavioral Issues",
|
||||
challenge: "Join & learn from experts.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "14",
|
||||
status: "1",
|
||||
title: "Seminar on Learning Disabilities",
|
||||
challenge: "Participate & enhance your knowledge.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "15",
|
||||
status: "1",
|
||||
title: "Webinar on Child Psychology",
|
||||
challenge: "Join & expand your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "16",
|
||||
status: "1",
|
||||
title: "Course on Special Education Needs",
|
||||
challenge: "Complete the course & get certified.",
|
||||
question: "Multiple Modules",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "17",
|
||||
status: "1",
|
||||
title: "Training on Autism Spectrum Disorder",
|
||||
challenge: "Improve your teaching strategies.",
|
||||
question: "Practical Tasks",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "18",
|
||||
status: "1",
|
||||
title: "Lecture on Emotional Development",
|
||||
challenge: "Expand your understanding & get certified.",
|
||||
question: "Q&A Session",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
},
|
||||
{
|
||||
id: "19",
|
||||
status: "1",
|
||||
title: "Workshop on ADHD",
|
||||
challenge: "Join & learn from experts.",
|
||||
question: "Interactive Session",
|
||||
img: "/assets/knowledge1.jpg"
|
||||
},
|
||||
{
|
||||
id: "20",
|
||||
status: "1",
|
||||
title: "Seminar on Speech and Language Disorders",
|
||||
challenge: "Participate & enhance your knowledge.",
|
||||
question: "Lecture",
|
||||
img: "/assets/knowledge2.jpg"
|
||||
},
|
||||
{
|
||||
id: "21",
|
||||
status: "1",
|
||||
title: "Webinar on Child Nutrition",
|
||||
challenge: "Join & expand your skills.",
|
||||
question: "Discussion",
|
||||
img: "/assets/knowledge3.jpg"
|
||||
}
|
||||
];
|
||||
res.json(knowledgeData);
|
||||
};
|
||||
|
||||
module.exports = knowledgeQuestsAllContent;
|
||||
|
||||
// knowledgeQuestsAllContent
|
||||
34
src/routes/api/newQuestion.js
Normal file
34
src/routes/api/newQuestion.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const newQuestion = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `INSERT INTO quiz_questions (questionText, option1, option2, option3, option4, correctAnswer, moduleId) VALUES (?, ?, ?, ?, ?, ?, ?)`;
|
||||
const values = [data.question, data.option1, data.option2, data.option3, data.option4, data.correctAnswer, data.moduleId];
|
||||
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
}
|
||||
module.exports = newQuestion
|
||||
;
|
||||
34
src/routes/api/newQuiz.js
Normal file
34
src/routes/api/newQuiz.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const newQuiz = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `INSERT INTO quiz (moduleName, type) VALUES (?, ?)`;
|
||||
const values = [data.moduleName, data.moduleType];
|
||||
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
}
|
||||
module.exports = newQuiz
|
||||
;
|
||||
182
src/routes/api/questionList.js
Normal file
182
src/routes/api/questionList.js
Normal file
@@ -0,0 +1,182 @@
|
||||
const mysql = require("mysql2");
|
||||
const questionList = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
function generateUniqueId() {
|
||||
let timestamp = new Date().getTime().toString();
|
||||
let randomNumber = Math.floor(Math.random() * 100000).toString();
|
||||
let uniqueId = timestamp + randomNumber;
|
||||
|
||||
if (uniqueId.length > 10) {
|
||||
uniqueId = uniqueId.substring(0, 10);
|
||||
} else if (uniqueId.length < 10) {
|
||||
while (uniqueId.length < 10) {
|
||||
uniqueId += Math.floor(Math.random() * 10).toString();
|
||||
}
|
||||
}
|
||||
|
||||
return uniqueId;
|
||||
}
|
||||
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM quiz_questions LIMIT 6`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
const uniqueId = generateUniqueId();
|
||||
results.forEach(obj => {
|
||||
obj.newQuizId = uniqueId
|
||||
})
|
||||
|
||||
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = questionList;
|
||||
// {
|
||||
// id: 1,
|
||||
// question: "What is the capital of France?",
|
||||
// options: ["Berlin", "Madrid", "Paris", "Rome"],
|
||||
// answer: "Paris",
|
||||
// },
|
||||
// {
|
||||
// id: 2,
|
||||
// question: "Which planet is known as the Red Planet?",
|
||||
// options: ["Earth", "Mars", "Jupiter", "Saturn"],
|
||||
// answer: "Mars",
|
||||
// },
|
||||
// {
|
||||
// id: 3,
|
||||
// question: "What is the chemical symbol for gold?",
|
||||
// options: ["Au", "Ag", "Pb", "Fe"],
|
||||
// answer: "Au",
|
||||
// },
|
||||
// {
|
||||
// id: 4,
|
||||
// question: "Who wrote 'To Kill a Mockingbird'?",
|
||||
// options: ["Harper Lee", "Mark Twain", "Ernest Hemingway", "J.K. Rowling"],
|
||||
// answer: "Harper Lee",
|
||||
// },
|
||||
// {
|
||||
// id: 5,
|
||||
// question: "What is the largest ocean on Earth?",
|
||||
// options: ["Atlantic Ocean", "Indian Ocean", "Arctic Ocean", "Pacific Ocean"],
|
||||
// answer: "Pacific Ocean",
|
||||
// },
|
||||
// {
|
||||
// id: 6,
|
||||
// question: "Which element has the atomic number 1?",
|
||||
// options: ["Helium", "Hydrogen", "Oxygen", "Carbon"],
|
||||
// answer: "Hydrogen",
|
||||
// },
|
||||
// {
|
||||
// id: 7,
|
||||
// question: "In which year did the Titanic sink?",
|
||||
// options: ["1912", "1905", "1898", "1923"],
|
||||
// answer: "1912",
|
||||
// },
|
||||
// {
|
||||
// id: 8,
|
||||
// question: "Who is the author of '1984'?",
|
||||
// options: ["George Orwell", "Aldous Huxley", "Ray Bradbury", "J.D. Salinger"],
|
||||
// answer: "George Orwell",
|
||||
// },
|
||||
// {
|
||||
// id: 9,
|
||||
// question: "What is the hardest natural substance on Earth?",
|
||||
// options: ["Gold", "Platinum", "Diamond", "Iron"],
|
||||
// answer: "Diamond",
|
||||
// },
|
||||
// {
|
||||
// id: 10,
|
||||
// question: "What is the largest planet in our solar system?",
|
||||
// options: ["Earth", "Saturn", "Neptune", "Jupiter"],
|
||||
// answer: "Jupiter",
|
||||
// },
|
||||
// {
|
||||
// id: 11,
|
||||
// question: "What is the main ingredient in guacamole?",
|
||||
// options: ["Tomato", "Avocado", "Pepper", "Onion"],
|
||||
// answer: "Avocado",
|
||||
// },
|
||||
// {
|
||||
// id: 12,
|
||||
// question: "Which country is known as the Land of the Rising Sun?",
|
||||
// options: ["China", "Japan", "Thailand", "South Korea"],
|
||||
// answer: "Japan",
|
||||
// },
|
||||
// {
|
||||
// id: 13,
|
||||
// question: "What is the smallest prime number?",
|
||||
// options: ["1", "2", "3", "5"],
|
||||
// answer: "2",
|
||||
// },
|
||||
// {
|
||||
// id: 14,
|
||||
// question: "Who painted the Mona Lisa?",
|
||||
// options: ["Vincent van Gogh", "Leonardo da Vinci", "Pablo Picasso", "Claude Monet"],
|
||||
// answer: "Leonardo da Vinci",
|
||||
// },
|
||||
// {
|
||||
// id: 15,
|
||||
// question: "What is the capital city of Australia?",
|
||||
// options: ["Sydney", "Melbourne", "Canberra", "Brisbane"],
|
||||
// answer: "Canberra",
|
||||
// },
|
||||
// {
|
||||
// id: 16,
|
||||
// question: "Which gas do plants primarily use for photosynthesis?",
|
||||
// options: ["Oxygen", "Nitrogen", "Carbon Dioxide", "Hydrogen"],
|
||||
// answer: "Carbon Dioxide",
|
||||
// },
|
||||
// {
|
||||
// id: 17,
|
||||
// question: "What is the boiling point of water in Celsius?",
|
||||
// options: ["90°C", "100°C", "110°C", "120°C"],
|
||||
// answer: "100°C",
|
||||
// },
|
||||
// {
|
||||
// id: 18,
|
||||
// question: "Which language is primarily spoken in Brazil?",
|
||||
// options: ["Spanish", "Portuguese", "French", "English"],
|
||||
// answer: "Portuguese",
|
||||
// },
|
||||
// {
|
||||
// id: 19,
|
||||
// question: "What is the smallest unit of life?",
|
||||
// options: ["Tissue", "Organ", "Cell", "Organism"],
|
||||
// answer: "Cell",
|
||||
// },
|
||||
// {
|
||||
// id: 20,
|
||||
// question: "Who developed the theory of relativity?",
|
||||
// options: ["Isaac Newton", "Galileo Galilei", "Albert Einstein", "Niels Bohr"],
|
||||
// answer: "Albert Einstein",
|
||||
// },
|
||||
// {
|
||||
// id: 21,
|
||||
// question: "In what year did World War II end?",
|
||||
// options: ["1945", "1944", "1946", "1943"],
|
||||
// answer: "1945",
|
||||
// },
|
||||
// ];
|
||||
33
src/routes/api/quizList.js
Normal file
33
src/routes/api/quizList.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const mysql = require("mysql2");
|
||||
const quizList = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM quiz`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = quizList;
|
||||
419
src/routes/api/quizModuleData.js
Normal file
419
src/routes/api/quizModuleData.js
Normal file
@@ -0,0 +1,419 @@
|
||||
const mysql = require("mysql2");
|
||||
const quizModuleData = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
|
||||
|
||||
// const connection = mysql.createConnection({
|
||||
// host: process.env.MARIA_HOST,
|
||||
// user: process.env.MARIA_USER,
|
||||
// password: process.env.MARIA_PASS,
|
||||
// database: process.env.MARIA_DBNM
|
||||
// });
|
||||
|
||||
// connection.connect((err) => {
|
||||
// if(err) {
|
||||
// console.error('Error connecting to the database:', err);
|
||||
// return;
|
||||
// }
|
||||
// console.log('Connected to the MariaDB database.');
|
||||
// });
|
||||
|
||||
// const data = req.body;
|
||||
|
||||
// const query = `SELECT * FROM quiz_questions`;
|
||||
// connection.query(query, (err, results) => {
|
||||
// if (err) {
|
||||
// console.error('Error inserting data:', err);
|
||||
// res.status(500).send('Internal Server Error');
|
||||
// return;
|
||||
// }
|
||||
// res.status(200).json(results);
|
||||
// });
|
||||
|
||||
let quizModuleData = {
|
||||
modules: [
|
||||
{
|
||||
moduleId: 1,
|
||||
type: "Theory Quiz Scores",
|
||||
moduleName: "Module 1 - Life History of Dr. Maria Montessori",
|
||||
quizzes: [
|
||||
{
|
||||
quizId: 1,
|
||||
quizName: "Lorem Ipsum Dolor Sit",
|
||||
attendQuestion: 48,
|
||||
totalQuestion: 50,
|
||||
internalMarks: 28,
|
||||
attendance: 20,
|
||||
questions: [
|
||||
{
|
||||
questionId: 1,
|
||||
questionText: "What is the capital of France?",
|
||||
options: [
|
||||
"Paris",
|
||||
"London",
|
||||
"Berlin",
|
||||
"Madrid"
|
||||
],
|
||||
correctAnswer: "Paris"
|
||||
},
|
||||
{
|
||||
questionId: 2,
|
||||
questionText: "What is 2 + 2?",
|
||||
options: [
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6"
|
||||
],
|
||||
correctAnswer: "4"
|
||||
},
|
||||
{
|
||||
questionId: 3,
|
||||
questionText: "What is the boiling point of water?",
|
||||
options: [
|
||||
"90°C",
|
||||
"100°C",
|
||||
"110°C",
|
||||
"120°C"
|
||||
],
|
||||
correctAnswer: "100°C"
|
||||
},
|
||||
{
|
||||
questionId: 4,
|
||||
questionText: "Who wrote 'To Kill a Mockingbird'?",
|
||||
options: [
|
||||
"Harper Lee",
|
||||
"Mark Twain",
|
||||
"J.K. Rowling",
|
||||
"Ernest Hemingway"
|
||||
],
|
||||
correctAnswer: "Harper Lee"
|
||||
},
|
||||
{
|
||||
questionId: 5,
|
||||
questionText: "What is the largest planet in our solar system?",
|
||||
options: [
|
||||
"Earth",
|
||||
"Mars",
|
||||
"Jupiter",
|
||||
"Saturn"
|
||||
],
|
||||
correctAnswer: "Jupiter"
|
||||
},
|
||||
{
|
||||
questionId: 6,
|
||||
questionText: "What is the speed of light?",
|
||||
options: [
|
||||
"300,000 km/s",
|
||||
"150,000 km/s",
|
||||
"100,000 km/s",
|
||||
"50,000 km/s"
|
||||
],
|
||||
correctAnswer: "300,000 km/s"
|
||||
},
|
||||
{
|
||||
questionId: 7,
|
||||
questionText: "Who painted the Mona Lisa?",
|
||||
options: [
|
||||
"Vincent van Gogh",
|
||||
"Pablo Picasso",
|
||||
"Leonardo da Vinci",
|
||||
"Claude Monet"
|
||||
],
|
||||
correctAnswer: "Leonardo da Vinci"
|
||||
},
|
||||
{
|
||||
questionId: 8,
|
||||
questionText: "What is the chemical symbol for gold?",
|
||||
options: [
|
||||
"Au",
|
||||
"Ag",
|
||||
"Pt",
|
||||
"Pb"
|
||||
],
|
||||
correctAnswer: "Au"
|
||||
},
|
||||
{
|
||||
questionId: 9,
|
||||
questionText: "What is the tallest mountain in the world?",
|
||||
options: [
|
||||
"K2",
|
||||
"Kangchenjunga",
|
||||
"Mount Everest",
|
||||
"Lhotse"
|
||||
],
|
||||
correctAnswer: "Mount Everest"
|
||||
},
|
||||
{
|
||||
questionId: 10,
|
||||
questionText: "What is the smallest unit of life?",
|
||||
options: [
|
||||
"Cell",
|
||||
"Atom",
|
||||
"Molecule",
|
||||
"Organ"
|
||||
],
|
||||
correctAnswer: "Cell"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
quizId: 2,
|
||||
quizName: "Lorem Ipsum Dolor Sit",
|
||||
attendQuestion: 45,
|
||||
totalQuestion: 50,
|
||||
internalMarks: 29,
|
||||
attendance: 20,
|
||||
questions: [
|
||||
{
|
||||
questionId: 1,
|
||||
questionText: "What is the capital of Italy?",
|
||||
options: [
|
||||
"Rome",
|
||||
"Venice",
|
||||
"Florence",
|
||||
"Milan"
|
||||
],
|
||||
correctAnswer: "Rome"
|
||||
},
|
||||
{
|
||||
questionId: 2,
|
||||
questionText: "What is 3 + 5?",
|
||||
options: [
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10"
|
||||
],
|
||||
correctAnswer: "8"
|
||||
},
|
||||
{
|
||||
questionId: 3,
|
||||
questionText: "What is the freezing point of water?",
|
||||
options: [
|
||||
"0°C",
|
||||
"32°C",
|
||||
"100°C",
|
||||
"273K"
|
||||
],
|
||||
correctAnswer: "0°C"
|
||||
},
|
||||
{
|
||||
questionId: 4,
|
||||
questionText: "Who wrote 'Pride and Prejudice'?",
|
||||
options: [
|
||||
"Jane Austen",
|
||||
"Charles Dickens",
|
||||
"Emily Brontë",
|
||||
"George Eliot"
|
||||
],
|
||||
correctAnswer: "Jane Austen"
|
||||
},
|
||||
{
|
||||
questionId: 5,
|
||||
questionText: "What is the smallest planet in our solar system?",
|
||||
options: [
|
||||
"Mercury",
|
||||
"Venus",
|
||||
"Earth",
|
||||
"Mars"
|
||||
],
|
||||
correctAnswer: "Mercury"
|
||||
},
|
||||
{
|
||||
questionId: 6,
|
||||
questionText: "What is the speed of sound?",
|
||||
options: [
|
||||
"343 m/s",
|
||||
"300 m/s",
|
||||
"1500 m/s",
|
||||
"1000 m/s"
|
||||
],
|
||||
correctAnswer: "343 m/s"
|
||||
},
|
||||
{
|
||||
questionId: 7,
|
||||
questionText: "Who painted the Starry Night?",
|
||||
options: [
|
||||
"Vincent van Gogh",
|
||||
"Pablo Picasso",
|
||||
"Leonardo da Vinci",
|
||||
"Claude Monet"
|
||||
],
|
||||
correctAnswer: "Vincent van Gogh"
|
||||
},
|
||||
{
|
||||
questionId: 8,
|
||||
questionText: "What is the chemical symbol for silver?",
|
||||
options: [
|
||||
"Au",
|
||||
"Ag",
|
||||
"Pt",
|
||||
"Pb"
|
||||
],
|
||||
correctAnswer: "Ag"
|
||||
},
|
||||
{
|
||||
questionId: 9,
|
||||
questionText: "What is the second tallest mountain in the world?",
|
||||
options: [
|
||||
"K2",
|
||||
"Kangchenjunga",
|
||||
"Mount Everest",
|
||||
"Lhotse"
|
||||
],
|
||||
correctAnswer: "K2"
|
||||
},
|
||||
{
|
||||
questionId: 10,
|
||||
questionText: "What is the largest organ in the human body?",
|
||||
options: [
|
||||
"Liver",
|
||||
"Heart",
|
||||
"Skin",
|
||||
"Brain"
|
||||
],
|
||||
correctAnswer: "Skin"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
moduleId: 2,
|
||||
type: "Theory Quiz Scores",
|
||||
moduleName: "Module 2",
|
||||
attendQuestion: 42,
|
||||
totalQuestion: 50,
|
||||
internalMarks: 22,
|
||||
attendance: 20,
|
||||
quizzes: [
|
||||
{
|
||||
quizId: 1,
|
||||
quizName: "Quiz 1",
|
||||
attendQuestion: 49,
|
||||
totalQuestion: 50,
|
||||
internalMarks: 2,
|
||||
attendance: 20,
|
||||
questions: [
|
||||
{
|
||||
questionId: 1,
|
||||
questionText: "What is the capital of Germany?",
|
||||
options: [
|
||||
"Berlin",
|
||||
"Munich",
|
||||
"Hamburg",
|
||||
"Frankfurt"
|
||||
],
|
||||
correctAnswer: "Berlin"
|
||||
},
|
||||
{
|
||||
questionId: 2,
|
||||
questionText: "What is 5 + 3?",
|
||||
options: [
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10"
|
||||
],
|
||||
correctAnswer: "8"
|
||||
},
|
||||
{
|
||||
questionId: 3,
|
||||
questionText: "What is the melting point of ice?",
|
||||
options: [
|
||||
"0°C",
|
||||
"32°C",
|
||||
"100°C",
|
||||
"273K"
|
||||
],
|
||||
correctAnswer: "0°C"
|
||||
},
|
||||
{
|
||||
questionId: 4,
|
||||
questionText: "Who wrote '1984'?",
|
||||
options: [
|
||||
"George Orwell",
|
||||
"Aldous Huxley",
|
||||
"Ray Bradbury",
|
||||
"J.D. Salinger"
|
||||
],
|
||||
correctAnswer: "George Orwell"
|
||||
},
|
||||
{
|
||||
questionId: 5,
|
||||
questionText: "What is the second smallest planet in our solar system?",
|
||||
options: [
|
||||
"Mercury",
|
||||
"Venus",
|
||||
"Earth",
|
||||
"Mars"
|
||||
],
|
||||
correctAnswer: "Mars"
|
||||
},
|
||||
{
|
||||
questionId: 6,
|
||||
questionText: "What is the speed of light in a vacuum?",
|
||||
options: [
|
||||
"300,000 km/s",
|
||||
"150,000 km/s",
|
||||
"299,792 km/s",
|
||||
"299,792 m/s"
|
||||
],
|
||||
correctAnswer: "299,792 km/s"
|
||||
},
|
||||
{
|
||||
questionId: 7,
|
||||
questionText: "Who painted the Last Supper?",
|
||||
options: [
|
||||
"Vincent van Gogh",
|
||||
"Pablo Picasso",
|
||||
"Leonardo da Vinci",
|
||||
"Claude Monet"
|
||||
],
|
||||
correctAnswer: "Leonardo da Vinci"
|
||||
},
|
||||
{
|
||||
questionId: 8,
|
||||
questionText: "What is the chemical symbol for iron?",
|
||||
options: [
|
||||
"Fe",
|
||||
"Ir",
|
||||
"In",
|
||||
"I"
|
||||
],
|
||||
correctAnswer: "Fe"
|
||||
},
|
||||
{
|
||||
questionId: 9,
|
||||
questionText: "What is the third tallest mountain in the world?",
|
||||
options: [
|
||||
"K2",
|
||||
"Kangchenjunga",
|
||||
"Mount Everest",
|
||||
"Lhotse"
|
||||
],
|
||||
correctAnswer: "Kangchenjunga"
|
||||
},
|
||||
{
|
||||
questionId: 10,
|
||||
questionText: "What is the smallest bone in the human body?",
|
||||
options: [
|
||||
"Stapes",
|
||||
"Femur",
|
||||
"Tibia",
|
||||
"Fibula"
|
||||
],
|
||||
correctAnswer: "Stapes"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
res.json(quizModuleData);
|
||||
};
|
||||
|
||||
module.exports = quizModuleData;
|
||||
34
src/routes/api/quizModuleList copy.js
Normal file
34
src/routes/api/quizModuleList copy.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const mysql = require("mysql2");
|
||||
const quizModuleList = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM quiz_modules WHERE moduleId = ?`;
|
||||
const values = req.query.module_id;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = quizModuleList;
|
||||
34
src/routes/api/quizModuleList.js
Normal file
34
src/routes/api/quizModuleList.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const mysql = require("mysql2");
|
||||
const quizModuleList = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
let values = req.query.module_id ? req.query.module_id : '';
|
||||
const query = `SELECT * FROM quiz_modules WHERE moduleId = ?`;
|
||||
// const values = req.query.module_id;
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = quizModuleList;
|
||||
33
src/routes/api/quizNewModule.js
Normal file
33
src/routes/api/quizNewModule.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const quizNewModule = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `INSERT INTO quiz_modules (moduleName, type) VALUES (?, ?)`;
|
||||
const values = [data.moduleName, data.moduleType];
|
||||
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
}
|
||||
module.exports = quizNewModule;
|
||||
176
src/routes/api/quizzesScore.js
Normal file
176
src/routes/api/quizzesScore.js
Normal file
@@ -0,0 +1,176 @@
|
||||
const mysql = require("mysql2");
|
||||
const quizzesScore = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM quiz_score`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
module.exports = quizzesScore;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// let quizData = [
|
||||
// {
|
||||
// quizId: 1,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 1",
|
||||
// percentage: "60"
|
||||
// },
|
||||
// {
|
||||
// quizId: 2,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 2",
|
||||
// percentage: "75"
|
||||
// },
|
||||
// {
|
||||
// quizId: 3,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 3",
|
||||
// percentage: "80"
|
||||
// },
|
||||
// {
|
||||
// quizId: 4,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 4",
|
||||
// percentage: "65"
|
||||
// },
|
||||
// {
|
||||
// quizId: 5,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 5",
|
||||
// percentage: "70"
|
||||
// },
|
||||
// {
|
||||
// quizId: 6,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 6",
|
||||
// percentage: "85"
|
||||
// },
|
||||
// {
|
||||
// quizId: 7,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 7",
|
||||
// percentage: "90"
|
||||
// },
|
||||
// {
|
||||
// quizId: 8,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 8",
|
||||
// percentage: "95"
|
||||
// },
|
||||
// {
|
||||
// quizId: 9,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 9",
|
||||
// percentage: "88"
|
||||
// },
|
||||
// {
|
||||
// quizId: 10,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 10",
|
||||
// percentage: "92"
|
||||
// },
|
||||
// {
|
||||
// quizId: 11,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 11",
|
||||
// percentage: "77"
|
||||
// },
|
||||
// {
|
||||
// quizId: 12,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 12",
|
||||
// percentage: "82"
|
||||
// },
|
||||
// {
|
||||
// quizId: 13,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 13",
|
||||
// percentage: "68"
|
||||
// },
|
||||
// {
|
||||
// quizId: 14,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 14",
|
||||
// percentage: "73"
|
||||
// },
|
||||
// {
|
||||
// quizId: 15,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 15",
|
||||
// percentage: "79"
|
||||
// },
|
||||
// {
|
||||
// quizId: 16,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 16",
|
||||
// percentage: "87"
|
||||
// },
|
||||
// {
|
||||
// quizId: 17,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 17",
|
||||
// percentage: "93"
|
||||
// },
|
||||
// {
|
||||
// quizId: 18,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 18",
|
||||
// percentage: "67"
|
||||
// },
|
||||
// {
|
||||
// quizId: 19,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 19",
|
||||
// percentage: "89"
|
||||
// },
|
||||
// {
|
||||
// quizId: 20,
|
||||
// quizType: "AI Quiz",
|
||||
// quizName: "Assessment on Special Education - 20",
|
||||
// percentage: "91"
|
||||
// }
|
||||
// ]
|
||||
// res.json(quizData);
|
||||
93
src/routes/api/resultAfterQuizSubmit.js
Normal file
93
src/routes/api/resultAfterQuizSubmit.js
Normal file
@@ -0,0 +1,93 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const resultAfterQuizSubmit = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const queryData = req.query;
|
||||
const responseValues = [queryData.id]; // Ensure this is an array
|
||||
|
||||
const responseQuery = `SELECT * FROM quiz_response WHERE quizId = ?`;
|
||||
connection.query(responseQuery, responseValues, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error retrieving data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
connection.end();
|
||||
return;
|
||||
}
|
||||
|
||||
let questionsProcessed = 0;
|
||||
let allResults = [];
|
||||
|
||||
results.forEach((resultData, index) => {
|
||||
const questionId = [resultData.questionId]; // Ensure this is an array
|
||||
const answerQuery = `SELECT * FROM quiz_questions WHERE questionId = ?`;
|
||||
|
||||
connection.query(answerQuery, questionId, (err, questionResults) => {
|
||||
if (err) {
|
||||
console.error('Error retrieving question data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
connection.end();
|
||||
return;
|
||||
}
|
||||
|
||||
allResults.push({
|
||||
response: resultData,
|
||||
question: questionResults[0] // Assuming it returns one result per questionId
|
||||
});
|
||||
|
||||
questionsProcessed++;
|
||||
|
||||
if (questionsProcessed === results.length) {
|
||||
let correctAnswers = 0;
|
||||
allResults.forEach(item => {
|
||||
if (item.response.selectedOption === item.question.correctAnswer) {
|
||||
correctAnswers++;
|
||||
}
|
||||
});
|
||||
|
||||
let quizMessage;
|
||||
|
||||
if(correctAnswers > 3){
|
||||
quizMessage = 'Congratulations on your achievement.'
|
||||
}else if(correctAnswers < 3){
|
||||
quizMessage = 'You not paassed the quiz Try Again'
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
totalQuestions: results.length,
|
||||
correctAnswers: correctAnswers,
|
||||
message: quizMessage,
|
||||
details: allResults
|
||||
});
|
||||
|
||||
connection.end();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (results.length === 0) {
|
||||
res.status(200).json({
|
||||
totalQuestions: 0,
|
||||
correctAnswers: 0,
|
||||
details: []
|
||||
});
|
||||
connection.end();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = resultAfterQuizSubmit;
|
||||
66
src/routes/api/saveGameScore.js
Normal file
66
src/routes/api/saveGameScore.js
Normal file
@@ -0,0 +1,66 @@
|
||||
var MongoClient = require('mongodb').MongoClient;
|
||||
const AWS = require('aws-sdk');
|
||||
|
||||
const saveGameScore = (req, res) => {
|
||||
const url = process.env.MONGODB_URL;
|
||||
const dbName = process.env.MONGO_DB_NAME;
|
||||
const client = new MongoClient(url, { useUnifiedTopology: true });
|
||||
client.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Failed to connect to the server', err);
|
||||
return;
|
||||
}
|
||||
// console.log('Connected successfully to server');
|
||||
const db = client.db(dbName);
|
||||
const collection = db.collection('gameData');
|
||||
// const data = req.body;
|
||||
const { userId, gameName, gameID, gameTime, score, screenShot } = req.body;
|
||||
const data = {
|
||||
userId: userId,
|
||||
gameName: gameName,
|
||||
gameID: gameID
|
||||
};
|
||||
|
||||
collection.insertOne(data, (err, result) => {
|
||||
if (err) {
|
||||
console.error('Failed to insert document', err);
|
||||
} else {
|
||||
// console.log('Document inserted with _id: ', result.insertedId);
|
||||
}
|
||||
client.close((err) => {
|
||||
if (err) {
|
||||
console.error('Failed to close connection', err);
|
||||
} else {
|
||||
// console.log('Connection closed');
|
||||
const s3 = new AWS.S3({
|
||||
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
||||
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
||||
region: process.env.AWS_REGION
|
||||
});
|
||||
if (screenShot != undefined) {
|
||||
// Upload image to S3
|
||||
let base64Image = screenShot.split(";base64,").pop();
|
||||
const buffer = Buffer.from(base64Image, 'base64');
|
||||
const s3Params = {
|
||||
Bucket: process.env.S3_BUCKET_NAME,
|
||||
Key: `images/${result.insertedId}.png`, // Change the file extension to .png
|
||||
Body: buffer,
|
||||
ContentEncoding: 'base64',
|
||||
ContentType: 'image/jpeg' // Change the content type to image/png
|
||||
};
|
||||
try {
|
||||
const data = s3.upload(s3Params).promise();
|
||||
console.log(`File uploaded successfully at ${data.Location}`);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
};
|
||||
res.send(result.insertedId);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = saveGameScore;
|
||||
|
||||
33
src/routes/api/savePostData.js
Normal file
33
src/routes/api/savePostData.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const savePostData = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `INSERT INTO tst (name, email) VALUES (?, ?)`;
|
||||
const values = [data.name, data.email];
|
||||
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).send('Data inserted successfully');
|
||||
});
|
||||
}
|
||||
module.exports = savePostData;
|
||||
59
src/routes/api/saveQuizResponse.js
Normal file
59
src/routes/api/saveQuizResponse.js
Normal file
@@ -0,0 +1,59 @@
|
||||
const mysql = require("mysql2");
|
||||
|
||||
const saveQuizResponse = (req, res) => {
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if (err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
// console.log(data);
|
||||
|
||||
const query = `INSERT INTO quiz_response (questionId, quizId, selectedOption) VALUES (?, ?, ?)`;
|
||||
|
||||
let errorOccurred = false;
|
||||
let promises = [];
|
||||
|
||||
data.forEach((response) => {
|
||||
const values = [response.questionId, response.quizId, response.selectedOption];
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
connection.query(query, values, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
errorOccurred = true;
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(results);
|
||||
}
|
||||
});
|
||||
});
|
||||
promises.push(promise);
|
||||
});
|
||||
|
||||
Promise.all(promises)
|
||||
.then(() => {
|
||||
if (!errorOccurred) {
|
||||
res.status(200).json({success: true, quizId: data[0].quizId, message: 'All responses saved successfully.' });
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error saving responses:', error);
|
||||
res.status(500).send('Internal Server Error');
|
||||
})
|
||||
.finally(() => {
|
||||
connection.end();
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = saveQuizResponse;
|
||||
231
src/routes/api/topPerformers.js
Normal file
231
src/routes/api/topPerformers.js
Normal file
@@ -0,0 +1,231 @@
|
||||
const mysql = require("mysql2");
|
||||
const topPerformers = (req, res) => {
|
||||
// res.send(req.query.doa); //get
|
||||
// res.send(req.body.doa); //post
|
||||
|
||||
|
||||
const connection = mysql.createConnection({
|
||||
host: process.env.MARIA_HOST,
|
||||
user: process.env.MARIA_USER,
|
||||
password: process.env.MARIA_PASS,
|
||||
database: process.env.MARIA_DBNM
|
||||
});
|
||||
|
||||
connection.connect((err) => {
|
||||
if(err) {
|
||||
console.error('Error connecting to the database:', err);
|
||||
return;
|
||||
}
|
||||
console.log('Connected to the MariaDB database.');
|
||||
});
|
||||
|
||||
const data = req.body;
|
||||
|
||||
const query = `SELECT * FROM top_performers`;
|
||||
connection.query(query, (err, results) => {
|
||||
if (err) {
|
||||
console.error('Error inserting data:', err);
|
||||
res.status(500).send('Internal Server Error');
|
||||
return;
|
||||
}
|
||||
res.status(200).json(results);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
module.exports = topPerformers;
|
||||
|
||||
|
||||
|
||||
// let performersData = [
|
||||
// {
|
||||
// id: "1",
|
||||
// name: "Eiden",
|
||||
// score: "48/50",
|
||||
// points: "999",
|
||||
// rank: "1",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar1.png"
|
||||
// },
|
||||
// {
|
||||
// id: "2",
|
||||
// name: "Jackson",
|
||||
// score: "45/50",
|
||||
// points: "997",
|
||||
// rank: "2",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar2.png"
|
||||
// },
|
||||
// {
|
||||
// id: "3",
|
||||
// name: "Emma Aria",
|
||||
// score: "43/50",
|
||||
// points: "994",
|
||||
// rank: "3",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar3.png"
|
||||
// },
|
||||
// {
|
||||
// id: "4",
|
||||
// name: "John Doe",
|
||||
// score: "40/50",
|
||||
// points: "990",
|
||||
// rank: "4",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar4.png"
|
||||
// },
|
||||
// {
|
||||
// id: "5",
|
||||
// name: "Jane Cooper",
|
||||
// score: "37/50",
|
||||
// points: "987",
|
||||
// rank: "5",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar5.png"
|
||||
// },
|
||||
// {
|
||||
// id: "6",
|
||||
// name: "John Doe",
|
||||
// score: "35/50",
|
||||
// points: "982",
|
||||
// rank: "6",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar6.png"
|
||||
// },
|
||||
// {
|
||||
// id: "7",
|
||||
// name: "Alice",
|
||||
// score: "33/50",
|
||||
// points: "980",
|
||||
// rank: "7",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar1.png"
|
||||
// },
|
||||
// {
|
||||
// id: "8",
|
||||
// name: "Bob",
|
||||
// score: "32/50",
|
||||
// points: "978",
|
||||
// rank: "8",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar2.png"
|
||||
// },
|
||||
// {
|
||||
// id: "9",
|
||||
// name: "Charlie",
|
||||
// score: "30/50",
|
||||
// points: "975",
|
||||
// rank: "9",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar3.png"
|
||||
// },
|
||||
// {
|
||||
// id: "10",
|
||||
// name: "Diana",
|
||||
// score: "28/50",
|
||||
// points: "972",
|
||||
// rank: "10",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar4.png"
|
||||
// },
|
||||
// {
|
||||
// id: "11",
|
||||
// name: "Edward",
|
||||
// score: "27/50",
|
||||
// points: "970",
|
||||
// rank: "11",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar5.png"
|
||||
// },
|
||||
// {
|
||||
// id: "12",
|
||||
// name: "Fiona",
|
||||
// score: "26/50",
|
||||
// points: "968",
|
||||
// rank: "12",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar6.png"
|
||||
// },
|
||||
// {
|
||||
// id: "13",
|
||||
// name: "George",
|
||||
// score: "25/50",
|
||||
// points: "965",
|
||||
// rank: "13",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar1.png"
|
||||
// },
|
||||
// {
|
||||
// id: "14",
|
||||
// name: "Hannah",
|
||||
// score: "23/50",
|
||||
// points: "962",
|
||||
// rank: "14",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar2.png"
|
||||
// },
|
||||
// {
|
||||
// id: "15",
|
||||
// name: "Ian",
|
||||
// score: "22/50",
|
||||
// points: "960",
|
||||
// rank: "15",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar3.png"
|
||||
// },
|
||||
// {
|
||||
// id: "16",
|
||||
// name: "Julia",
|
||||
// score: "20/50",
|
||||
// points: "957",
|
||||
// rank: "16",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar4.png"
|
||||
// },
|
||||
// {
|
||||
// id: "17",
|
||||
// name: "Kyle",
|
||||
// score: "19/50",
|
||||
// points: "955",
|
||||
// rank: "17",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar5.png"
|
||||
// },
|
||||
// {
|
||||
// id: "18",
|
||||
// name: "Laura",
|
||||
// score: "18/50",
|
||||
// points: "953",
|
||||
// rank: "18",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar6.png"
|
||||
// },
|
||||
// {
|
||||
// id: "19",
|
||||
// name: "Michael",
|
||||
// score: "17/50",
|
||||
// points: "950",
|
||||
// rank: "19",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar1.png"
|
||||
// },
|
||||
// {
|
||||
// id: "20",
|
||||
// name: "Nancy",
|
||||
// score: "16/50",
|
||||
// points: "947",
|
||||
// rank: "20",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar2.png"
|
||||
// },
|
||||
// {
|
||||
// id: "21",
|
||||
// name: "Oliver",
|
||||
// score: "15/50",
|
||||
// points: "945",
|
||||
// rank: "21",
|
||||
// program: "Graduate Program",
|
||||
// avatar: "/assets/avatar3.png"
|
||||
// }
|
||||
// ];
|
||||
// res.json(performersData);
|
||||
378
src/routes/v1/api.route.js
Normal file
378
src/routes/v1/api.route.js
Normal file
@@ -0,0 +1,378 @@
|
||||
// const express = require('express');
|
||||
const express = require("express");
|
||||
const Ping = require("../api/apiTest");
|
||||
const apiTest = require("../api/apiTest");
|
||||
const topPerformers = require("../api/topPerformers");
|
||||
const classMates = require("../api/classMates");
|
||||
const continueLearning = require("../api/continueLearning");
|
||||
const knowledgeQuests = require("../api/knowledgeQuests");
|
||||
const quizzesScore = require("../api/quizzesScore");
|
||||
const quizModuleData = require("../api/quizModuleData");
|
||||
const knowledgeQuestsAllContent = require("../api/knowledgeQuestsAllContent");
|
||||
const knowledgeQuestsCompleted = require("../api/knowledgeQuestsCompleted");
|
||||
const quizModuleList = require("../api/quizModuleList");
|
||||
const quizNewModule = require("../api/quizNewModule");
|
||||
const newQuiz = require("../api/newQuiz");
|
||||
const quizList = require("../api/quizList");
|
||||
const savePostData = require("../api/savePostData");
|
||||
// const signIn = require("../api/signIn");
|
||||
const questionList = require("../api/questionList");
|
||||
const newQuestion = require("../api/newQuestion");
|
||||
const saveQuizResponse = require("../api/saveQuizResponse");
|
||||
const getGameScore = require("../api/getGameScore");
|
||||
const resultAfterQuizSubmit = require("../api/resultAfterQuizSubmit");
|
||||
const generateQuestions = require("../api/generateQuestions");
|
||||
const saveGameScore = require("../api/saveGameScore");
|
||||
|
||||
|
||||
const router = express.Router();
|
||||
/* GET home page. */
|
||||
router.get("/ping", (req, res) => {
|
||||
Ping(req, res);
|
||||
});
|
||||
|
||||
/* GET home page. */
|
||||
router.get("/apiTest", (req, res) => {
|
||||
apiTest(req, res);
|
||||
});
|
||||
|
||||
// Classmates Directory page top performers section data
|
||||
router.get("/top-performers", (req, res) => {
|
||||
topPerformers(req, res);
|
||||
});
|
||||
|
||||
// Classmates Directory page top class mates section data
|
||||
router.get("/class-mates", (req, res) => {
|
||||
classMates(req, res);
|
||||
});
|
||||
|
||||
// Student Dashboard page Continue Learning section data
|
||||
router.get("/continue-learning", (req, res) => {
|
||||
continueLearning(req, res);
|
||||
});
|
||||
|
||||
// Student Dashboard page knowledge-Quests section data
|
||||
router.get("/knowledge-quests", (req, res) => {
|
||||
knowledgeQuests(req, res);
|
||||
});
|
||||
|
||||
// Progress Review page quiz details section data
|
||||
router.get("/quiz-score", (req, res) => {
|
||||
quizzesScore(req, res);
|
||||
});
|
||||
|
||||
// Progress Review page quiz module section data
|
||||
router.get("/quiz-module", (req, res) => {
|
||||
quizModuleData(req, res);
|
||||
});
|
||||
|
||||
// knowledge Quests page All Content section data
|
||||
router.get("/all-assesment", (req, res) => {
|
||||
knowledgeQuestsAllContent(req, res);
|
||||
});
|
||||
|
||||
// knowledge Quests page Completed section data
|
||||
router.get("/complete-assesment", (req, res) => {
|
||||
knowledgeQuestsCompleted(req, res);
|
||||
});
|
||||
|
||||
/* GET home page. */
|
||||
router.post("/savePostData", (req, res) => {
|
||||
savePostData(req, res);
|
||||
});
|
||||
|
||||
// For Sign in
|
||||
// router.post("/signin", (req, res) => {
|
||||
// signIn(req, res);
|
||||
// });
|
||||
|
||||
// For Quiz Module list Data
|
||||
router.get("/quiz-module-list", (req, res) => {
|
||||
quizModuleList(req, res);
|
||||
});
|
||||
|
||||
// For Create new module
|
||||
router.post("/create-module", (req, res) => {
|
||||
quizNewModule(req, res);
|
||||
});
|
||||
|
||||
// For Create new Quiz
|
||||
router.post("/create-quiz", (req, res) => {
|
||||
newQuiz(req, res);
|
||||
});
|
||||
|
||||
// For Quiz List data
|
||||
router.get("/quiz-list", (req, res) => {
|
||||
quizList(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Question List data
|
||||
router.get("/question-list", (req, res) => {
|
||||
questionList(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Question List data
|
||||
router.post("/create-question", (req, res) => {
|
||||
newQuestion(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Question List data
|
||||
router.post("/save-quiz-response", (req, res) => {
|
||||
saveQuizResponse(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Question List data
|
||||
router.post("/getGameScore", (req, res) => {
|
||||
getGameScore(req, res);
|
||||
});
|
||||
|
||||
|
||||
// For Quiz Result After Submit Quiz
|
||||
router.get("/quizresult-aftersubmit", (req, res) => {
|
||||
resultAfterQuizSubmit(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Result After Submit Quiz
|
||||
router.post("/generateQuestions", (req, res) => {
|
||||
generateQuestions(req, res);
|
||||
});
|
||||
|
||||
// For Quiz Result After Submit Quiz
|
||||
router.post("/saveGameScore", (req, res) => {
|
||||
saveGameScore(req, res);
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* tags:
|
||||
* name: Users
|
||||
* description: User management and retrieval
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /users:
|
||||
* post:
|
||||
* summary: Create a user
|
||||
* description: Only admins can create other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - name
|
||||
* - email
|
||||
* - password
|
||||
* - role
|
||||
* properties:
|
||||
* name:
|
||||
* type: string
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* description: must be unique
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* role:
|
||||
* type: string
|
||||
* enum: [user, admin]
|
||||
* example:
|
||||
* name: fake name
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* role: user
|
||||
* responses:
|
||||
* "201":
|
||||
* description: Created
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "400":
|
||||
* $ref: '#/components/responses/DuplicateEmail'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
*
|
||||
* get:
|
||||
* summary: Get all users
|
||||
* description: Only admins can retrieve all users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: query
|
||||
* name: name
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User name
|
||||
* - in: query
|
||||
* name: role
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User role
|
||||
* - in: query
|
||||
* name: sortBy
|
||||
* schema:
|
||||
* type: string
|
||||
* description: sort by query in the form of field:desc/asc (ex. name:asc)
|
||||
* - in: query
|
||||
* name: limit
|
||||
* schema:
|
||||
* type: integer
|
||||
* minimum: 1
|
||||
* default: 10
|
||||
* description: Maximum number of users
|
||||
* - in: query
|
||||
* name: page
|
||||
* schema:
|
||||
* type: integer
|
||||
* minimum: 1
|
||||
* default: 1
|
||||
* description: Page number
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* results:
|
||||
* type: array
|
||||
* items:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* page:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* limit:
|
||||
* type: integer
|
||||
* example: 10
|
||||
* totalPages:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* totalResults:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /users/{id}:
|
||||
* get:
|
||||
* summary: Get a user
|
||||
* description: Logged in users can fetch only their own user information. Only admins can fetch other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*
|
||||
* patch:
|
||||
* summary: Update a user
|
||||
* description: Logged in users can only update their own information. Only admins can update other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* name:
|
||||
* type: string
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* description: must be unique
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* example:
|
||||
* name: fake name
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "400":
|
||||
* $ref: '#/components/responses/DuplicateEmail'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*
|
||||
* delete:
|
||||
* summary: Delete a user
|
||||
* description: Logged in users can delete only themselves. Only admins can delete other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* responses:
|
||||
* "200":
|
||||
* description: No content
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*/
|
||||
291
src/routes/v1/auth.route.js
Normal file
291
src/routes/v1/auth.route.js
Normal file
@@ -0,0 +1,291 @@
|
||||
const express = require('express');
|
||||
const validate = require('../../middlewares/validate');
|
||||
const authValidation = require('../../validations/auth.validation');
|
||||
const authController = require('../../controllers/auth.controller');
|
||||
const auth = require('../../middlewares/auth');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.post('/register', validate(authValidation.register), authController.register);
|
||||
router.post('/login', validate(authValidation.login), authController.login);
|
||||
router.post('/logout', validate(authValidation.logout), authController.logout);
|
||||
router.post('/refresh-tokens', validate(authValidation.refreshTokens), authController.refreshTokens);
|
||||
router.post('/forgot-password', validate(authValidation.forgotPassword), authController.forgotPassword);
|
||||
router.post('/reset-password', validate(authValidation.resetPassword), authController.resetPassword);
|
||||
router.post('/send-verification-email', auth(), authController.sendVerificationEmail);
|
||||
router.post('/verify-email', validate(authValidation.verifyEmail), authController.verifyEmail);
|
||||
|
||||
module.exports = router;
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* tags:
|
||||
* name: Auth
|
||||
* description: Authentication
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/register:
|
||||
* post:
|
||||
* summary: Register as user
|
||||
* tags: [Auth]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - name
|
||||
* - email
|
||||
* - password
|
||||
* properties:
|
||||
* name:
|
||||
* type: string
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* description: must be unique
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* example:
|
||||
* name: fake name
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* responses:
|
||||
* "201":
|
||||
* description: Created
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* user:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* tokens:
|
||||
* $ref: '#/components/schemas/AuthTokens'
|
||||
* "400":
|
||||
* $ref: '#/components/responses/DuplicateEmail'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/login:
|
||||
* post:
|
||||
* summary: Login
|
||||
* tags: [Auth]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - email
|
||||
* - password
|
||||
* properties:
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* example:
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* user:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* tokens:
|
||||
* $ref: '#/components/schemas/AuthTokens'
|
||||
* "401":
|
||||
* description: Invalid email or password
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/Error'
|
||||
* example:
|
||||
* code: 401
|
||||
* message: Invalid email or password
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/logout:
|
||||
* post:
|
||||
* summary: Logout
|
||||
* tags: [Auth]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - refreshToken
|
||||
* properties:
|
||||
* refreshToken:
|
||||
* type: string
|
||||
* example:
|
||||
* refreshToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1ZWJhYzUzNDk1NGI1NDEzOTgwNmMxMTIiLCJpYXQiOjE1ODkyOTg0ODQsImV4cCI6MTU4OTMwMDI4NH0.m1U63blB0MLej_WfB7yC2FTMnCziif9X8yzwDEfJXAg
|
||||
* responses:
|
||||
* "204":
|
||||
* description: No content
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/refresh-tokens:
|
||||
* post:
|
||||
* summary: Refresh auth tokens
|
||||
* tags: [Auth]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - refreshToken
|
||||
* properties:
|
||||
* refreshToken:
|
||||
* type: string
|
||||
* example:
|
||||
* refreshToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1ZWJhYzUzNDk1NGI1NDEzOTgwNmMxMTIiLCJpYXQiOjE1ODkyOTg0ODQsImV4cCI6MTU4OTMwMDI4NH0.m1U63blB0MLej_WfB7yC2FTMnCziif9X8yzwDEfJXAg
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/AuthTokens'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/forgot-password:
|
||||
* post:
|
||||
* summary: Forgot password
|
||||
* description: An email will be sent to reset password.
|
||||
* tags: [Auth]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - email
|
||||
* properties:
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* example:
|
||||
* email: fake@example.com
|
||||
* responses:
|
||||
* "204":
|
||||
* description: No content
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/reset-password:
|
||||
* post:
|
||||
* summary: Reset password
|
||||
* tags: [Auth]
|
||||
* parameters:
|
||||
* - in: query
|
||||
* name: token
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: The reset password token
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - password
|
||||
* properties:
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* example:
|
||||
* password: password1
|
||||
* responses:
|
||||
* "204":
|
||||
* description: No content
|
||||
* "401":
|
||||
* description: Password reset failed
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/Error'
|
||||
* example:
|
||||
* code: 401
|
||||
* message: Password reset failed
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/send-verification-email:
|
||||
* post:
|
||||
* summary: Send verification email
|
||||
* description: An email will be sent to verify email.
|
||||
* tags: [Auth]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* responses:
|
||||
* "204":
|
||||
* description: No content
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/verify-email:
|
||||
* post:
|
||||
* summary: verify email
|
||||
* tags: [Auth]
|
||||
* parameters:
|
||||
* - in: query
|
||||
* name: token
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: The verify email token
|
||||
* responses:
|
||||
* "204":
|
||||
* description: No content
|
||||
* "401":
|
||||
* description: verify email failed
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/Error'
|
||||
* example:
|
||||
* code: 401
|
||||
* message: verify email failed
|
||||
*/
|
||||
21
src/routes/v1/docs.route.js
Normal file
21
src/routes/v1/docs.route.js
Normal file
@@ -0,0 +1,21 @@
|
||||
const express = require('express');
|
||||
const swaggerJsdoc = require('swagger-jsdoc');
|
||||
const swaggerUi = require('swagger-ui-express');
|
||||
const swaggerDefinition = require('../../docs/swaggerDef');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
const specs = swaggerJsdoc({
|
||||
swaggerDefinition,
|
||||
apis: ['src/docs/*.yml', 'src/routes/v1/*.js'],
|
||||
});
|
||||
|
||||
router.use('/', swaggerUi.serve);
|
||||
router.get(
|
||||
'/',
|
||||
swaggerUi.setup(specs, {
|
||||
explorer: true,
|
||||
})
|
||||
);
|
||||
|
||||
module.exports = router;
|
||||
44
src/routes/v1/index.js
Normal file
44
src/routes/v1/index.js
Normal file
@@ -0,0 +1,44 @@
|
||||
const express = require('express');
|
||||
const authRoute = require('./auth.route');
|
||||
const userRoute = require('./user.route');
|
||||
const apiRoute = require('./api.route');
|
||||
const docsRoute = require('./docs.route');
|
||||
const config = require('../../config/config');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
const defaultRoutes = [
|
||||
{
|
||||
path: '/auth',
|
||||
route: authRoute,
|
||||
},
|
||||
{
|
||||
path: '/users',
|
||||
route: userRoute,
|
||||
},
|
||||
{
|
||||
path: '/api',
|
||||
route: apiRoute,
|
||||
},
|
||||
];
|
||||
|
||||
const devRoutes = [
|
||||
// routes available only in development mode
|
||||
{
|
||||
path: '/docs',
|
||||
route: docsRoute,
|
||||
},
|
||||
];
|
||||
|
||||
defaultRoutes.forEach((route) => {
|
||||
router.use(route.path, route.route);
|
||||
});
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (config.env === 'development') {
|
||||
devRoutes.forEach((route) => {
|
||||
router.use(route.path, route.route);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
252
src/routes/v1/user.route.js
Normal file
252
src/routes/v1/user.route.js
Normal file
@@ -0,0 +1,252 @@
|
||||
const express = require('express');
|
||||
const auth = require('../../middlewares/auth');
|
||||
const validate = require('../../middlewares/validate');
|
||||
const userValidation = require('../../validations/user.validation');
|
||||
const userController = require('../../controllers/user.controller');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.post(auth('manageUsers'), validate(userValidation.createUser), userController.createUser)
|
||||
.get(auth('getUsers'), validate(userValidation.getUsers), userController.getUsers);
|
||||
|
||||
router
|
||||
.route('/:userId')
|
||||
.get(auth('getUsers'), validate(userValidation.getUser), userController.getUser)
|
||||
.patch(auth('manageUsers'), validate(userValidation.updateUser), userController.updateUser)
|
||||
.delete(auth('manageUsers'), validate(userValidation.deleteUser), userController.deleteUser);
|
||||
|
||||
module.exports = router;
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* tags:
|
||||
* name: Users
|
||||
* description: User management and retrieval
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /users:
|
||||
* post:
|
||||
* summary: Create a user
|
||||
* description: Only admins can create other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - name
|
||||
* - email
|
||||
* - password
|
||||
* - role
|
||||
* properties:
|
||||
* name:
|
||||
* type: string
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* description: must be unique
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* role:
|
||||
* type: string
|
||||
* enum: [user, admin]
|
||||
* example:
|
||||
* name: fake name
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* role: user
|
||||
* responses:
|
||||
* "201":
|
||||
* description: Created
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "400":
|
||||
* $ref: '#/components/responses/DuplicateEmail'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
*
|
||||
* get:
|
||||
* summary: Get all users
|
||||
* description: Only admins can retrieve all users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: query
|
||||
* name: name
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User name
|
||||
* - in: query
|
||||
* name: role
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User role
|
||||
* - in: query
|
||||
* name: sortBy
|
||||
* schema:
|
||||
* type: string
|
||||
* description: sort by query in the form of field:desc/asc (ex. name:asc)
|
||||
* - in: query
|
||||
* name: limit
|
||||
* schema:
|
||||
* type: integer
|
||||
* minimum: 1
|
||||
* default: 10
|
||||
* description: Maximum number of users
|
||||
* - in: query
|
||||
* name: page
|
||||
* schema:
|
||||
* type: integer
|
||||
* minimum: 1
|
||||
* default: 1
|
||||
* description: Page number
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* results:
|
||||
* type: array
|
||||
* items:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* page:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* limit:
|
||||
* type: integer
|
||||
* example: 10
|
||||
* totalPages:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* totalResults:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
*/
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /users/{id}:
|
||||
* get:
|
||||
* summary: Get a user
|
||||
* description: Logged in users can fetch only their own user information. Only admins can fetch other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*
|
||||
* patch:
|
||||
* summary: Update a user
|
||||
* description: Logged in users can only update their own information. Only admins can update other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* name:
|
||||
* type: string
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* description: must be unique
|
||||
* password:
|
||||
* type: string
|
||||
* format: password
|
||||
* minLength: 8
|
||||
* description: At least one number and one letter
|
||||
* example:
|
||||
* name: fake name
|
||||
* email: fake@example.com
|
||||
* password: password1
|
||||
* responses:
|
||||
* "200":
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* "400":
|
||||
* $ref: '#/components/responses/DuplicateEmail'
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*
|
||||
* delete:
|
||||
* summary: Delete a user
|
||||
* description: Logged in users can delete only themselves. Only admins can delete other users.
|
||||
* tags: [Users]
|
||||
* security:
|
||||
* - bearerAuth: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: id
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* description: User id
|
||||
* responses:
|
||||
* "200":
|
||||
* description: No content
|
||||
* "401":
|
||||
* $ref: '#/components/responses/Unauthorized'
|
||||
* "403":
|
||||
* $ref: '#/components/responses/Forbidden'
|
||||
* "404":
|
||||
* $ref: '#/components/responses/NotFound'
|
||||
*/
|
||||
Reference in New Issue
Block a user