Online Learning System is a web application through which individuals can attend pre-recorded courses online. 👨🏫
This project aim was to help us:
• Learn how to properly use the Agile Methodology to plan out a project and develop the software.
• Learn the process of following a given set of System Requirements to develop a software and work together as a Team on Github.
• Learn to research and master the use of the MERN Stack.
• For the user, he'll only be able to report a problem or rate the instructor, but in the future we intend to build a chat system between the users and their instructors •Users still cannoy refund the course fees if less than 50% of the course is completed & Admin still cannot accept the refund. •There's a problem in logging in instructors.
Our code style is a standard code style.
! Our project is an online learning platform that helps individual and cooperate trainees to enroll in a variety of courses and check/track their progress in this course such that there aim is to earn a certificate of completion of there courses. Our platform provide a wide range of courses that are taught by experienced and well rated instructors who have created lectures and challenging exams and excersises to encourage students more and help them master the material provided. ! The platform also help instructors to manage their courses and admins to track the requests they receive upon any report or granting access.
Our project was developed using the Agile Methodology, such that it was divided into 3 sprints (time periods). Each sprint was evaluated gave us the chance to correct and edit some methods that helped later in developing a fully functioned website.
We used MERN Stack to implement this project.
- MERN stands for MongoDB, Express, React, Node, after the four key technologies that make up the stack.
• MongoDB
• Express.js
• React.js
• Node.js
• Git
• Visual studio code
• Joi
• JWT
• Postman
• Stipe
• Can a preview video about the course before registering to it.
• While enrollment in the course, he'll be able to see his/her progress in the course
as a percentage of how much of the course has been completed so far.
• Can request a refund if his progress in the course is less than 50%.
• Can retake an exam if his grade is less than 50%.
• Can download his notes while watching the course videos.
• Can recieve a certificate upon completing the course.
• Can view the amount of money owed per month.
• Can define a promotion for the course and for how long.
• Can view the average grades of the exams in his course.
• Can save his/her progress in creating a course WITHOUT publishing the course.
• Can publish his/her course. A published course CANNOT be edited nor deleted.
cd frontend/main/src
npm install
npm start
cd backend
nodemon app.js
• Axios for communication between the frontend and backend
• Stripe for online payments
• Nodemailer for sending emails to clients 📫
create user
POST /Signup//
Login
POST /Login//
Filter course rating
GET /User/viewcoursetitlehoursrating
Filter course price
GET /User/viewcourseprice
Get my information
GET /User/viewMyInfo
| Query | Type | Description |
|---|---|---|
id |
string |
Required. user ID |
Get my courses
GET /User/viewMyCourses
| Query | Type | Description |
|---|---|---|
id |
string |
Required. user ID |
Change password
PUT /User/changePassword
| Query | Type | Description |
|---|---|---|
id |
string |
Required. user ID |
User add course
POST /User/addCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
courseId |
string |
Required. Course ID |
Send password change email
POST /User/sendPassChangeMail
| Body | Type | Description |
|---|---|---|
Email |
string |
Required. user Email |
Remove course
PUT /User/removeCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. user ID |
| Body | Type | Description |
|---|---|---|
-- |
string |
Required. Course ID |
User Refund
POST /User/userRefund
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
courseId |
string |
Required. Course ID |
Update video progress
POST /User/videoProgress
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
courseId |
string |
Required. Course ID |
subtitleId |
string |
Required. Subtitle ID |
| Body | Type | Description |
|---|---|---|
Video |
string |
Required. Video Link |
Get My progress
GET /User/getUserProgress
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
courseId |
string |
Required. Course ID |
Send Certificate
GET /User/sendCertificate
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
See my grades
GET /User/getUserGrades
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
examId |
string |
Required. Exam ID |
See my info
GET /User/getUser
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
Remove unknown courses
GET /User/removeUnknownCourses
| Query | Type | Description |
|---|---|---|
id |
string |
Required. User ID |
Add promotion
POST /Instructor/addPromotion
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Course ID |
| Body | Type | Description |
|---|---|---|
Promotion |
string |
Required. Course ID |
Start Promotion |
string |
Required. Course ID |
End Promotion |
string |
Required. Course ID |
Instructor add Course
POST /Instructor/addCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
| Body | Type | Description |
|---|---|---|
NameOfCourse |
string |
Required. Name Of Course |
Summary |
string |
Required. summary |
Subject |
string |
Required. subject |
LevelOfCourse |
string |
Required. Level of course |
Cost |
string |
Required. Cost |
Preview |
string |
Required.Preview |
Instructor delete course
POST /Instructor/deleteCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Course ID |
Instructor add exam
POST /Instructor/addExam
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
| Body | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
question |
string |
Required. Question |
choice1 |
string |
Required. Choice1 |
choice2 |
string |
Required. Choice2 |
choice3 |
string |
Required. Choice3 |
choice4 |
string |
Required. Choice4 |
correct |
string |
Required. Correct |
Instructor edit his biography
POST /Instructor/editInstrBiography
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor edit his email
POST /Instructor/editInstrEmail
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor edit his data
POST /Instructor/editInstructorData
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor view his courses
GET /Instructor/ViewMyCourses
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor view his ratings
GET /Instructor/ViewMyRatings
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor view his reviews
GET /Instructor/ViewMyReview
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Instructor money in wallet
GET /Instructor/calculateMoney
| Query | Type | Description |
|---|---|---|
instrId |
string |
Required. Instructor ID |
Instructor remove exam
GET /Instructor/removeExam
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Instructor ID |
Admin add Instructor
POST /Admin/addInstructor
| Body | Type | Description |
|---|---|---|
InstrEmail |
string |
Required. Instructor Email |
InstrPassword |
string |
Required. Instructor Password |
Admin add cooperate trainees
POST /Admin/createCorporateTrainess
| Body | Type | Description |
|---|---|---|
Name |
string |
Required. User Name |
Email |
string |
Required. User Email |
Password |
string |
Required. Password |
Type |
string |
Required. Type |
Gender |
string |
Required. Gender |
Admin view course reports
GET /Report/viewCourseReports
| Query | Type | Description |
|---|---|---|
id |
string |
Required. CourseId |
Admin get reported courses
GET /Report/getReportedCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. CourseId |
Admin view reporter name
GET /Report/getReporterName
| Query | Type | Description |
|---|---|---|
id |
string |
Required. userId |
Admin delete report
GET /Report/delete
Admin get all reports
GET /Report/getReport
Admin update type of request
GET /Report/updateType
| Query | Type | Description |
|---|---|---|
id |
string |
Required. CourseId |
Admin update status of request
POST /Report/updateStatus
| Query | Type | Description |
|---|---|---|
id |
string |
Required. CourseId |
Admin add a followup
POST /Report/addFollowup
| Query | Type | Description |
|---|---|---|
id |
string |
Required. report id |
| Body | Type | Description |
|---|---|---|
id |
string |
Required. follow id |
comment |
string |
Required. comment |
Admin delete followup
GET /Report/deleteFollowup
| Query | Type | Description |
|---|---|---|
id |
string |
Required. report id |
Instructor get all subtitles
GET/Subtitle/getAllSubtitles
Instructor add subtitles
POST/Subtitle/addSubtitle
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
| Body | Type | Description |
|---|---|---|
Title |
string |
Required. Title |
Description |
string |
Required. Description |
Duration |
string |
Required. Duration |
Instructor edit subtitle
POST/Subtitle/editSubtitle
| Query | Type | Description |
|---|---|---|
id |
string |
Required. Subtitle Id |
Instructor add excercise for subtitle
POST/Subtitle/addExcercise
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
| Body | Type | Description |
|---|---|---|
Question |
string |
Required. question |
Answer |
string |
Required. answer |
Instructor remove all excercises
POST/Subtitle/removeAllExcercises
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
Instructor delete subtitles
GET/Subtitle/deleteSubtitle
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
Instructo rdelete subtitles from course
GET/Subtitle/deleteSubtitleFromCourse
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
Instructor remove all subtitles
GET/Subtitle/removeAllSubtitles
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
User get course subtitles videos
GET/Subtitle/getCourseSubtitlesVideo
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
User get course subtitles excercises
GET/Subtitle/getCourseSubtitlesExcercises
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
Instructor add video description for subtitles
POST/Subtitle/addVideoDescription
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
| Body | Type | Description |
|---|---|---|
--- |
string |
Required. Description |
User get excercises Questions
GET/Subtitle/getExcercisesQuestions
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
User get excercises answers
GET/Subtitle/getExcercisesAnswers
| Query | Type | Description |
|---|---|---|
id |
string |
Required. course id |
User add notes
POST/Subtitle/addNotes
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
| Body | Type | Description |
|---|---|---|
--- |
string |
Required. Notes |
User view course subtitles
GET/Subtitle/viewAllCourseSubtitles
| Query | Type | Description |
|---|---|---|
id |
string |
Required. courseId |
User view course subtitles videos
GET/Subtitle/viewSubtitleVideo
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
User view course subtitles notes
GET/Subtitle/viewSubtitleNotes
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
Instructor clear all excercises
GET/Subtitle/clearAllExercises
Instructor add video
POST/Subtitle/addVideo
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
| Body | Type | Description |
|---|---|---|
video |
string |
Required. video |
Instructor add course exam
POST/Subtitle/addCourseExam
| Query | Type | Description |
|---|---|---|
id |
string |
Required. subtitle id |
For testing our website:
- try searching for a course and filter your search results
- try viewing a course and watch its preview
- try signing up
- try go to your profile and edit your info
- try changing your password
Open http://localhost:3000/#/home to view the homepage in your browser.
To contribute to our project, you can check our Contribution Guidelines
https://www.youtube.com/@NetNinja
https://mui.com/
https://react-bootstrap.github.io/getting-started/introduction/
https://www.npmjs.com/






