Role-based OpenCourseWare Web App in Vue.js + Spring Boot
SUSTech 2024 Fall Project of CS309 - Object-oriented Analysis and Design
Led by Professor Yuqun ZHANG
.
├── SUSSYCourses
│ ├── build
│ ├── gradle
│ ├── node_modules
│ └── src
│ ├── frontend # main folder of frontend code
│ │ ├── src
│ │ │ ├── App.vue
│ │ │ ├── assets
│ │ │ ├── components
│ │ │ │ ├── 403.vue
│ │ │ │ ├── 404.vue
│ │ │ │ ├── AccountSecurity.vue
│ │ │ │ ├── AdminPage.vue
│ │ │ │ ├── AnnouncementForm.vue
│ │ │ │ ├── BarChart.vue
│ │ │ │ ├── Chat.vue
│ │ │ │ ├── CommentSection.vue
│ │ │ │ ├── CourseBreakdown.vue
│ │ │ │ ├── CourseList.vue
│ │ │ │ ├── CoursePage.vue
│ │ │ │ ├── Courseware.vue
│ │ │ │ ├── DoughnutChart.vue
│ │ │ │ ├── EditProfile.vue
│ │ │ │ ├── FilePreview.vue
│ │ │ │ ├── Guideline.vue
│ │ │ │ ├── HelpSupport.vue
│ │ │ │ ├── HeroBanner.vue
│ │ │ │ ├── LogIn.vue
│ │ │ │ ├── MainPage.vue
│ │ │ │ ├── Notifications.vue
│ │ │ │ ├── PrivacyPolicy.vue
│ │ │ │ ├── ProfilePage.vue
│ │ │ │ ├── ProfileSidebar.vue
│ │ │ │ ├── PublicCoursePage.vue
│ │ │ │ ├── PublicCourseware.vue
│ │ │ │ ├── PublicFilePreview.vue
│ │ │ │ ├── RatingAndReview.vue
│ │ │ │ ├── Security.vue
│ │ │ │ ├── SignUpStudent.vue
│ │ │ │ ├── SignUpTeacher.vue
│ │ │ │ ├── StreamInfo.vue
│ │ │ │ ├── StudentPage.vue
│ │ │ │ ├── StudentsList.vue
│ │ │ │ ├── TeacherCourse.vue
│ │ │ │ ├── TeacherCourses.vue
│ │ │ │ ├── TeacherCoursesDetails.vue
│ │ │ │ ├── TeacherCourseware.vue
│ │ │ │ ├── TeacherDashboard.vue
│ │ │ │ ├── TeacherNotifications.vue
│ │ │ │ ├── TeacherPage.vue
│ │ │ │ ├── TeacherProfile.vue
│ │ │ │ ├── TeacherStreaming.vue
│ │ │ │ ├── TermsOfUse.vue
│ │ │ │ ├── UserInfo.vue
│ │ │ │ ├── UserList.vue
│ │ │ │ └── VerifyEmail.vue
│ │ │ ├── main.js
│ │ │ ├── router
│ │ │ │ └── index.js
│ │ │ └── services
│ │ │ └── axiosInstance.js
│ │ └── vue.config.js
│ ├── main # main folder of backend code
│ │ ├── config
│ │ │ ├── admin_key.json
│ │ │ └── storage_key.json
│ │ ├── java
│ │ │ └── com
│ │ │ └── sustech
│ │ │ └── cs309
│ │ │ └── project
│ │ │ └── sussycourses
│ │ │ ├── SussyCoursesApplication.java # driver code of Spring Boot
│ │ │ ├── controller
│ │ │ │ ├── AuthController.java
│ │ │ │ ├── CommentsController.java
│ │ │ │ ├── CourseController.java
│ │ │ │ ├── CourseStudentController.java
│ │ │ │ ├── CoursewareController.java
│ │ │ │ ├── CoursewareStudentController.java
│ │ │ │ ├── NotificationController.java
│ │ │ │ ├── RatingController.java
│ │ │ │ ├── StreamController.java
│ │ │ │ └── WebAppUserController.java
│ │ │ ├── domain
│ │ │ │ ├── Comment.java
│ │ │ │ ├── Course.java
│ │ │ │ ├── CourseStudent.java
│ │ │ │ ├── Courseware.java
│ │ │ │ ├── CoursewareStudent.java
│ │ │ │ ├── Notification.java
│ │ │ │ ├── Rating.java
│ │ │ │ ├── Role.java
│ │ │ │ ├── Stream.java
│ │ │ │ └── WebAppUser.java
│ │ │ ├── dto
│ │ │ │ ├── AdminCourseDetailResponse.java
│ │ │ │ ├── ApprovedCoursesResponse.java
│ │ │ │ ├── BasicCourseResponse.java
│ │ │ │ ├── ChangePasswordRequest.java
│ │ │ │ ├── CommentCreationRequest.java
│ │ │ │ ├── CommentResponse.java
│ │ │ │ ├── CourseProgressResponse.java
│ │ │ │ ├── CourseRequest.java
│ │ │ │ ├── CourseStudentListResponse.java
│ │ │ │ ├── CoursewareListResponse.java
│ │ │ │ ├── CoursewareRequest.java
│ │ │ │ ├── CoursewareResponse.java
│ │ │ │ ├── CoursewareVersionResponse.java
│ │ │ │ ├── CourseworkDataResponse.java
│ │ │ │ ├── InstructorCourseDetailResponse.java
│ │ │ │ ├── InstructorDetailResponse.java
│ │ │ │ ├── LoginRequest.java
│ │ │ │ ├── NotificationCreationRequest.java
│ │ │ │ ├── NotificationListResponse.java
│ │ │ │ ├── NotificationResponse.java
│ │ │ │ ├── RatingRequest.java
│ │ │ │ ├── RatingResponse.java
│ │ │ │ ├── RegistrationRequest.java
│ │ │ │ ├── ReplyRequest.java
│ │ │ │ ├── StreamResponse.java
│ │ │ │ ├── StudentCourseDetailResponse.java
│ │ │ │ ├── StudentCourseListResponse.java
│ │ │ │ ├── StudentDetailResponse.java
│ │ │ │ ├── TopRatedCourseResponse.java
│ │ │ │ ├── TopRatedInstructorResponse.java
│ │ │ │ ├── UpdateCoursewareRequest.java
│ │ │ │ ├── UpdateUserRequest.java
│ │ │ │ └── UserResponse.java
│ │ │ ├── repository
│ │ │ │ ├── CommentRepository.java
│ │ │ │ ├── CourseRepository.java
│ │ │ │ ├── CourseStudentRepository.java
│ │ │ │ ├── CoursewareRepository.java
│ │ │ │ ├── CoursewareStudentRepository.java
│ │ │ │ ├── NotificationRepository.java
│ │ │ │ ├── RatingRepository.java
│ │ │ │ ├── RoleRepository.java
│ │ │ │ ├── StreamRepository.java
│ │ │ │ └── WebAppUserRepository.java
│ │ │ ├── security
│ │ │ │ ├── CustomUserDetails.java
│ │ │ │ └── SecurityConfig.java
│ │ │ ├── service
│ │ │ │ ├── CommentService.java
│ │ │ │ ├── CourseService.java
│ │ │ │ ├── CourseStudentService.java
│ │ │ │ ├── CoursewareService.java
│ │ │ │ ├── CoursewareStudentService.java
│ │ │ │ ├── CustomUserDetailsService.java
│ │ │ │ ├── EmailService.java
│ │ │ │ ├── NotificationService.java
│ │ │ │ ├── RatingService.java
│ │ │ │ ├── StreamService.java
│ │ │ │ ├── VerificationTokenService.java
│ │ │ │ └── WebAppUserService.java
│ │ │ └── utils
│ │ │ └── CloudUtils.java
│ │ └── resources
│ │ ├── application.yml
│ │ ├── public
│ │ ├── schema.sql
│ │ ├── static
│ │ └── templates
│ └── test
└── README.md
- Course Management
- Approve course creation requests submitted by instructors
-
Course Management
- Apply for course creation; courses can be:
- Open (anyone can join)
- Semi-open (students must request to join)
- Non-open (instructors manually add students)
- Make announcements to students in a specific course
- Start a live stream for remote learning and automatically notify students
- Apply for course creation; courses can be:
-
Courseware Management
- Upload courseware, including but not limited to DOCX, PDF, MD, PPTX, and MP4
- Categorize courseware into lectures, assignments, and projects
- Update courseware with version tracking
- Set download permissions for courseware
- Enforce video anti-cheat (only one video can be played at a time)
- Upload supplementary materials (e.g., data, code) for students
-
Course Evaluation
- Receive student feedback on content quality, teaching effectiveness, and workload balance
-
Course Management
- Join an open course or request to join a semi-open course
- Receive notifications for updates and course announcements
-
Learning Resources
- View top-rated courses and instructors
- Access and download courseware (if permitted)
- Watch course videos online or join a live lecture stream
- Access a free LLM/AI chatbot
-
Engagement & Feedback
- Like favorite courses
- Comment on courseware and participate in instructor Q&A (supports text and media formats)
- Submit course evaluations with ratings and reviews
-
Homework & Progress
- Submit homework assignments
- Track courseware viewing progress
- Earn points for engagement, including providing feedback and completing course materials
Ensure you have the following installed:
- Node.js (Latest LTS recommended)
- Vue CLI (
npm install -g @vue/cli
) - Java 17+
- Gradle
- PostgreSQL
- Start PostgreSQL and create a database:
CREATE DATABASE cs309_project;
- Update
application.yml
insrc/main/resources/
with your database credentials:spring: datasource: url: jdbc:postgresql://localhost:5432/cs309_project username: your_username password: your_password
-
Navigate to the backend directory:
cd main
-
Build and run the Spring Boot application:
./gradlew bootRun
-
However, IntelliJ IDEA is a recommended approach to run the backend server.
The backend will start on http://localhost:8081.
- Navigate to the frontend directory:
cd frontend
- Install dependencies:
npm install
- Run the server:
The frontend will be available at http://localhost:8080.
npm run serve
- Ensure PostgreSQL is running.
- Start the backend using
./gradlew bootRun
. - Start the frontend using
npm run dev
. - Open
http://localhost:8080
in your browser.
- Port Conflicts: Ensure no other applications are running on ports
8080
or8081
. - Database Connection Issues: Double-check PostgreSQL credentials in
application.yml
. - Vue Not Loading: Clear cache and restart the development server.
rm -rf node_modules package-lock.json npm install npm run serve
Name | Role |
---|---|
Jaouhara Zerhouni Khal | Frontend |
Tan Hao Yang | Frontend |
Harrold Tok Kwan Hang | Backend |
Hok Lay Heng | Backend |