Skip to content

Commit

Permalink
fetch BE
Browse files Browse the repository at this point in the history
  • Loading branch information
nhattpn committed Apr 27, 2024
1 parent b13e14e commit 3b79294
Show file tree
Hide file tree
Showing 47 changed files with 1,395 additions and 109 deletions.
2 changes: 1 addition & 1 deletion login-frontend/src/context/authContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export function AuthProvider({ children }) {
try {
const data = await authService.login(email, password);
if (data && data.token) {
sessionStorage.setItem('jwtToken'), data.token;
sessionStorage.setItem('jwtToken', data.token);
setUser(data);
return data;
} else {
Expand Down
95 changes: 95 additions & 0 deletions login-frontend/src/pages/dashboardPage/AdminDashboard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import React, { useState } from 'react';
import StudentInfo from './../components/DashBoard/studentInfo';
import Training from './../components/DashBoard/studentTraining';
import Footer from './../components/header_footer/Footer';
import '../../node_modules/bootstrap/dist/css/bootstrap.min.css';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import './StudentDashboard.css';

function DataTable() {
const [currentView, setCurrentView] = useState('StudentInfo');

const handleNavigation = (viewName) => {
setCurrentView(viewName);
};
const [isOpen, setIsOpen] = useState(false);

return (
<div className="student-dashboard">
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<a className="navbar-brand" href="#">
<img className="logo" src="https://i.ibb.co/CMwkBmw/lSgDz8N.png" alt="logo" />
</a>
<ul className="navbar-nav ms-auto">
<li style={{padding: '2vh'}}>
<a className="nav-link" href="#">Nguyen Van A - SVxxxxx</a>
</li>
<li style={{padding: '2vh'}}>
<i className="fa fa-solid fa-bell fa-lg fa-3x"></i>
Logout
</li>
</ul>
</nav>

<div className="container-fluid">
<div className="row">
<div className="col-md-2 leftBody">
<ul className="nav flex-column">
<li className="nav-item" style={{ paddingTop: '2rem' }}>
<i className="fas fa-solid fa-home fa-md fa-2x"></i> Home
</li>
<li className="nav-item" style={{ paddingTop: '2rem' }}>
<i className="fas fa-regular fa-id-badge fa-md fa-2x"></i> Student
</li>
<li className="nav-item" style={{ paddingTop: '2rem', cursor: 'pointer'}} onClick={() => setIsOpen(!isOpen)}>
<i className="fa fa-solid fa-book fa-md fa-2x"></i> Study
<i class="fa-solid fa-angles-down"></i>
{isOpen && (
<ul>
<li className="nav-item" style={{ paddingTop: '2rem'}}><Link to={'/course'} style={{color: 'white', padding: '0'}}>Course</Link></li>
<li className="nav-item" style={{ paddingTop: '2rem' }}><Link to={'/course1'} style={{color: 'white', padding: '0'}}>Course registration</Link></li>
</ul>
)}
</li>
<li className="nav-item" style={{ paddingTop: '2rem' }}>
<i className="fa fa-solid fa-question fa-md fa-2x"></i> Assistant
</li>
</ul>
</div>

<div className="col-md-10 rightBody">
<div className="dataTable mx-auto">
<nav>
<div className="navigation">
<a
onClick={() => handleNavigation('StudentInfo')}
style={{ fontWeight: 'bold'}}
className={currentView === 'StudentInfo' ? 'active' : ''}
>
Student Information
</a>
<a
href="#"
onClick={() => handleNavigation('Training')}
style={{ fontWeight: 'bold' }}
className={currentView === 'Training' ? 'active' : ''}
>
Training Information
</a>
</div>
</nav>
<div style={{ padding: '10px' }}>
<i style={{ fontWeight: 'bold' }}>Last updated time: dd/mm/yyyy realtime</i>
</div>
{currentView === 'StudentInfo' && <StudentInfo />}
{currentView === 'Training' && <Training />}
</div>
</div>
</div>
</div>
<Footer />
</div>
);
}

export default DataTable;
5 changes: 5 additions & 0 deletions qlsv_be/controllers/admin/admin.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ const login = async (req, res) => {
return res.status(401).json({ message: "Incorrect password" });
}
const token = jwt.sign({ email: admin.email, role: admin.role }, process.env.JWT_SECRET, { expiresIn: '1d' });

// Setting the session info
req.session.isAdmin = true;
req.session.email = admin.email

res.status(200).json({ message: "Login successful", token: token });
} catch (err) {
res.status(500).json({ message: "Login error", error: err.message });
Expand Down
43 changes: 32 additions & 11 deletions qlsv_be/controllers/admin/control_panel.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,22 @@ const addCourse = async (req, res) => {
const newCourse = new Course({
semester: req.body.semester,
courseCode: req.body.courseCode,
courseName: req.body.name,
msgv: req.body.msgv,
credit: req.body.credit,
scheduleDay: req.body.scheduleDay,
scheduleTime: req.body.scheduleTime,
scheduleWeek: req.body.scheduleWeek,
sotinhchi: req.body.sotinhchi,
tinhchihocphi: req.body.tinhchihocphi,
STT: req.body.STT,
classroom: req.body.classroom,
studentCount: req.body.studentCount,
instructorName: req.body.instructorName
instructorName: req.body.instructorName,
studentEnroll: req.body.studentEnroll,
midterm: req.body.midterm,
final: req.body.final,
soluong: req.body.soluong,
bangdiem: req.body.bangdiem,
});
await newCourse.save();
res.status(201).json(newCourse);
Expand All @@ -36,16 +47,26 @@ const addCourse = async (req, res) => {
const updateCourse = async (req, res) => {
try {
const courseUpdate = {
semester: req.body.semester,
courseCode: req.body.courseCode,
scheduleDay: req.body.scheduleDay,
scheduleTime: req.body.scheduleTime,
classroom: req.body.classroom,
studentCount: req.body.studentCount,
instructorName: req.body.instructorName
semester: req.body.semester,
courseCode: req.body.courseCode,
courseName: req.body.name,
credit: req.body.credit,
scheduleDay: req.body.scheduleDay,
scheduleTime: req.body.scheduleTime,
scheduleWeek: req.body.scheduleWeek,
sotinhchi: req.body.sotinhchi,
tinhchihocphi: req.body.tinhchihocphi,
STT: req.body.STT,
classroom: req.body.classroom,
instructorName: req.body.instructorName,
studentEnroll: req.body.studentEnroll,
midterm: req.body.midterm,
final: req.body.final,
soluong: req.body.soluong,
bangdiem: req.body.bangdiem,
};

const course = await Course.findOneAndUpdate({ courseCode: req.params.courseCode }, courseUpdate, { new: true });
const course = await Course.findOneAndUpdate({ courseCode: req.body.courseCode }, courseUpdate, { new: true });

if (!course) {
return res.status(404).send();
Expand All @@ -61,7 +82,7 @@ const updateCourse = async (req, res) => {
// Delete a course
const deleteCourse = async (req, res) => {
try {
const { courseCode } = req.params;
const { courseCode } = req.body;
const deletedCourse = await Course.findOneAndDelete({ courseCode: courseCode });

if (!deletedCourse) {
Expand Down
9 changes: 6 additions & 3 deletions qlsv_be/controllers/admin/student.controller.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const Student = require('../../models/student.model');
const { generateUniqueMssv } = require('../../helpers/generateMssv');


// Get all students
const getAllStudents = async (req, res) => {
try {
Expand Down Expand Up @@ -43,7 +44,7 @@ const addStudent = async (req, res) => {

// Delete a student
const deleteStudent = async (req, res) => {
const { mssv } = req.params;
const { mssv } = req.body;

try {
const deletedStudent = await Student.findOneAndDelete({ mssv: mssv });
Expand All @@ -65,11 +66,12 @@ const updateStudent = async (req, res) => {
email: req.body.email,
password: req.body.password,
mssv: req.body.mssv,
image: req.body.image,
private_info: req.body.private_info,
training_info: req.body.training_info
}

const student = await Student.findOneAndUpdate({ mssv: req.params.mssv }, studentUpdated, { new: true });
const student = await Student.findOneAndUpdate({ mssv: req.body.mssv }, studentUpdated, { new: true });

if (!student) {
return res.status(404).send();
Expand All @@ -83,7 +85,7 @@ const updateStudent = async (req, res) => {

// Find a student by mssv
const findStudentByMssv = async (req, res) => {
const { mssv } = req.params;
const { mssv } = req.body;

try {
const student = await Student.findOne({ mssv: mssv });
Expand All @@ -97,6 +99,7 @@ const findStudentByMssv = async (req, res) => {
}
};


module.exports = {
getAllStudents,
addStudent,
Expand Down
12 changes: 6 additions & 6 deletions qlsv_be/controllers/admin/teacher.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const addTeacher = async (req, res) => {
const { name, email, password, private_info, training_info } = req.body;

// Generate new mssv
let mssv = await generateUniqueMsgv();
let msgv = await generateUniqueMsgv();

// Check if email is already taken
const existingEmail = await Teacher.findOne({ email: email });
Expand All @@ -28,7 +28,7 @@ const addTeacher = async (req, res) => {
name,
email,
password,
mssv,
msgv,
private_info,
training_info
});
Expand All @@ -40,7 +40,7 @@ const addTeacher = async (req, res) => {
}
};
const deleteTeacher = async (req, res) => {
const { msgv } = req.params;
const { msgv } = req.body;

try {
const deletedTeacher = await Teacher.findOneAndDelete({ msgv: msgv });
Expand All @@ -64,7 +64,7 @@ const updateTeacher = async (req, res) => {
contact_info: req.body.contact_info
}

const teacher = await Teacher.findOneAndUpdate({ msgv: req.params.msgv }, teacherUpdated, { new: true });
const teacher = await Teacher.findOneAndUpdate({ msgv: req.body.msgv }, teacherUpdated, { new: true });

if (!teacher) {
return res.status(404).send();
Expand All @@ -78,10 +78,10 @@ const updateTeacher = async (req, res) => {

// Find a student by mssv
const findTeacherByMsgv = async (req, res) => {
const { mssv } = req.params;
const { msgv } = req.body;

try {
const teacher = await Teacher.findOne({ mssv: mssv });
const teacher = await Teacher.findOne({ mssv: msgv });
if (!teacher) {
return res.status(404).json({ message: "Teacher not found." });
}
Expand Down
6 changes: 3 additions & 3 deletions qlsv_be/controllers/users/student.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const login = async (req, res) => {
};

const changePassword = async (req, res) => {
const { email, newPassword } = req.body;
const { email, password } = req.body;
let student;

try {
Expand All @@ -53,13 +53,13 @@ const changePassword = async (req, res) => {
}

// Check if the new password is the default password
if (newPassword === '123456') {
if (password === '123456') {
return res.status(400).json({ message: "Invalid password. Please choose a different password." });
}

// Hash the new password and update the student record
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(newPassword, salt);
const hashedPassword = await bcrypt.hash(password, salt);

student.password = hashedPassword;
student.passwordChanged = true;
Expand Down
42 changes: 42 additions & 0 deletions qlsv_be/controllers/users/student/bangdiem.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const bangdiemModel = require("../../../models/course.model");
const student = require("../../../models/student.model")

const getbangdiem = async (req, res) => {
const { mssv } = req.user;
try {
const sv_filter = {"mssv": mssv};
const st = await student.findOne(sv_filter)
const cou = st.courseEnroll;
if (!cou) {
return res.status(404).json({ message: "Bang diem not found." });
}
res.send(cou);
}
catch (error) {
res.status(500).json({ message: error.message });
}
}

const getbangdiemBySem = async (req, res) => {
const { mssv } = req.user;
const { semester } = req.params
try {
const sv_filter = {"mssv": mssv};
const sem_filter = {"semester": semester}
const cou = await student.aggregate([
{$match: sv_filter},
{$unwind: "$courseEnroll"},
{$replaceRoot: {newRoot: "$courseEnroll"}},
{$match: sem_filter}
])
if (!cou) {
return res.status(404).json({ message: "Bang diem not found." });
}
res.send(cou);
}
catch (error) {
res.status(500).json({ message: error.message });
}
}

module.exports = { getbangdiem, getbangdiemBySem };
Loading

0 comments on commit 3b79294

Please sign in to comment.