Online Learning Platform is a university project for CSEN704 - Advanced Computer Lab course @ GUC, the main purpose of the project was to build a complete Online learning environment through which users can register for courses and start learning content that will help them both academically and in their professional lives.
Currently Online Learning Platform is a Minimum Value Product (MVP), which can be used by customers and let us observe how they interact with the system.
- Landing page ()
- Sign Up form ()
- Admin ()
- Admin set promotion ()
- Instructor add course
- Student Courses
- Take a Quiz
- Report an issue
This web application was build with MERN stack:
- MongoDB as our NoSQL database
- ExpressJS as our NodeJS wrapper
- ReactJS for our view library
- NodeJS for server-side JS runtime enviroment
Additional libraries used:
- Axios - promise-based http client
- Youtube-React a react Youtube Client
- bcryptjs
- mongoose - Object Document Mapper (ODM) of choice
- Material UI
- Bootstrap
- Visually appealing UI that helps the user enjoy his time browsing the website
- UX designed to guide the user smoothly throughout the website with recovery from error, reversibility and learnability
- Responsive design which gives the user feedback about what is currently happening
-
Make sure you have NodeJS installed on your machine
You can check by running
node -v
in your terminal to make sure NodeJS is setup correctly
-
Make sure to include two .env files in both the frontend and backend directories
-
In your terminal navigate to
/Sprint 1/frontend
-
Install required packages by running
Npm install
-
Spin up the development server using
npm start
open your browser at http:https://localhost:3000
-
In your terminal navigate to
/Sprint 1/backend
-
Install nodemon by running
npm i -g nodemon
-
Install required packages by running
npm install
-
Spin up the development server using
nodemon server
It will run on http:https://localhost:4000
-
/studentsignup (POST)
Request body (json)
{ "FirstName": "string", "Lastname": "string", "Email": "string", "Username": "string", "Password": "string", }
-
/studentlogin (POST)
Request body (json)
{ "email": "string", "password": "string", }
-
/viewcourses (GET)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/popularcourses (POST)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/registered-courses (GET)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/:id (GET)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/problems (POST)
Request body (json)
{ "Problem": "string", "CourseName": "string", }
-
/mark-problem-as-resolved (POST)
Request body (json) { "Problem": "string", "CourseName": "string", }
-
/register-for-course (POST)
Request body (json)
{ "Email": "string", "Course._id": "string", }
-
/registered-courses (POST)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/CreateCourse (POST)
Request body (json)
{ "Title": "string", "Subtitle": "string", "Price": "integer", "Summary": "string", "Instructor": "String" "VideoID": "String" "LessonVideoIDs": "String" }
-
/request-access/:courseId (GET)
{ "TraineeId": "string", "CourseID": "string" }
- /createExercise (POST)
Request body (json)
{
"creator",
"title",
"questoin1text",
"question1answer",
"question2text",
"question2answer",
"question3text",
"question3answer",
"question4text",
"question4answer",
}
- /instexercises/:instid (GET)
Request body (json)
{
"creator",
"title",
"questoin1text",
"question1answer",
"question2text",
"question2answer",
"question3text",
"question3answer",
"question4text",
"question4answer",
}
- /:id (PATCH)
Request body (json)
{
"creator",
"title",
"questoin1text",
"question1answer",
"question2text",
"question2answer",
"question3text",
"question3answer",
"question4text",
"question4answer",
}
-
/:id (DELETE)
-
/promotion (PUT)
Request body (json)
{
"cid":"String"
"oldPrice":"Number"
"discount":"Number",
"until":"Number"
}
- /globalpromotion (PUT)
Request body (json)
{
"discount":"Number",
"until":"Number"
}
-
Postman can be used to test the functionality of different API endpoints make sure to attach bearer token if endpoint requires token
-
Any browser can be used to test the functionality of the frontend webpages and web compenents and the integration with the
-
Go to admin dashboard if signed in as an admin:
- View all courses
- add admin/instructor/corporate trainee to the system
- view all problems reported by students
- mark problems as resolved
- view course requests
-
Go to instructor dashboard if signed in as an instructor:
- View all courses
- Create a course
- View all exercises
- Create an exercise
-
Go to student dashboard if signed in as a student:
- View all registered courses
- View course details
- Register for a course
- report a problem
Pull requests are more than welcomed in this repository, feel free to open one to fix a bug, enhance a feature or introduce a new one.
Adham Ahmed
Mohamed Walid
Alaaeldin Abdelaziz
Mostafa Yours
Heejin