How karthikreddy1817/online-course-registration-system works
Purpose and Runtime Topology
Online Course Management System is a containerized full-stack application: a React single-page client consumes a Spring Boot REST API, which persists course, user, enrollment, lesson, and progress state in MySQL. Docker Compose coordinates the deployable services; SQL supports database initialization.
• docker-compose.yml
• backend/src/main/java/com/example/ocms/OcmsApplication.java
• database/schema.sql
Client Entry and UI Boundaries
The Vite React entry mounts the application and organizes the UI around authentication plus separate student and administrator dashboards. The client’s API module is the boundary for REST communication, while auth context holds client-side session/authentication state.
• frontend/src/main.jsx
• frontend/src/App.jsx
• frontend/src/api/client.js
• frontend/src/context/AuthContext.jsx
• frontend/src/pages/StudentDashboard.jsx
• frontend/src/pages/AdminDashboard.jsx
API Edge and Application Services
Spring MVC controllers expose JSON endpoints for authentication, courses, enrollments, progress, users, and administrative reporting. Controllers should remain transport boundaries: DTOs cross the API edge, services implement use cases, and EntityMapper translates between DTO and persistence representations.
• backend/src/main/java/com/example/ocms/controller/AuthController.java
• backend/src/main/java/com/example/ocms/controller/CourseController.java
• backend/src/main/java/com/example/ocms/controller/EnrollmentController.java
• backend/src/main/java/com/example/ocms/controller/AdminController.java
• backend/src/main/java/com/example/ocms/service/AuthService.java
• backend/src/main/java/com/example/ocms/service/CourseService.java
• backend/src/main/java/com/example/ocms/mapper/EntityMapper.java
Authentication and Authorization Flow
Registration/login flow is handled by AuthService; credentials are BCrypt-hashed and successful authentication produces JWT bearer tokens. Requests traverse the JWT authentication filter and Spring Security configuration before reaching protected controllers. Role-based authorization separates administrative course/dashboard operations from student operations; current-user resolution is centralized.
• backend/src/main/java/com/example/ocms/security/JwtAuthenticationFilter.java
• backend/src/main/java/com/example/ocms/security/JwtService.java
• backend/src/main/java/com/example/ocms/config/SecurityConfig.java
• backend/src/main/java/com/example/ocms/service/CurrentUserService.java
Course Lifecycle and Persistence Model
The core domain connects User, Course, Lesson, and Enrollment; enrollment status is modeled explicitly. Course management supports admin creation, updates, and soft deletion. Course/enrollment services mediate domain operations through Spring Data JPA repositories, with MySQL as the durable storage boundary.
• backend/src/main/java/com/example/ocms/entity/User.java
• backend/src/main/java/com/example/ocms/entity/Course.java
• backend/src/main/java/com/example/ocms/entity/Lesson.java
• backend/src/main/java/com/example/ocms/entity/Enrollment.java
• backend/src/main/java/com/example/ocms/repository/CourseRepository.java
• backend/src/main/java/com/example/ocms/repository/EnrollmentRepository.java
Student Progress and Administrative Views
Student flow is: browse courses, enroll, retrieve “my courses,” update/retrieve progress, and manage profile. Administrative flow is: manage course catalog and query dashboard/student data. These views aggregate service-level domain data into dedicated response DTOs rather than exposing entities directly.
• backend/src/main/java/com/example/ocms/controller/ProgressController.java
• backend/src/main/java/com/example/ocms/controller/UserController.java
• backend/src/main/java/com/example/ocms/service/EnrollmentService.java
• backend/src/main/java/com/example/ocms/service/AdminService.java
• backend/src/main/java/com/example/ocms/dto/DashboardResponse.java
Operational and Integration Boundaries
The backend runs on Java 17/Spring Boot with Spring Data JPA, Spring Security, JWT, and MySQL. The frontend is built with React/Vite/Tailwind and served in its container via Nginx. OpenAPI/Swagger provides API discovery; deployment details are documented separately.
• backend/Dockerfile
• frontend/Dockerfile
• frontend/nginx.conf
• backend/src/main/java/com/example/ocms/config/OpenApiConfig.java
• DEPLOYMENT_GUIDE.md
Components 22
React Client
- React/Vite SPA
frontend/src/main.jsx - App Routing
frontend/src/App.jsx - Auth Context
frontend/src/context/AuthContext.jsx - Student Dashboard
frontend/src/pages/StudentDashboard.jsx - Admin Dashboard
frontend/src/pages/AdminDashboard.jsx - API Client
frontend/src/api/client.js
Spring Boot API
- Spring Boot Runtime
backend/src/main/java/com/example/ocms/OcmsApplication.java - REST Controllers · Auth, course, enrollment, progress, user, and admin JSON endpoints.
backend/src/main/java/com/example/ocms/controller/CourseController.java - Security Chain · JWT filter and role rules protect controller requests.
backend/src/main/java/com/example/ocms/security/JwtAuthenticationFilter.java - Auth Service · Hashes credentials and issues bearer tokens.
backend/src/main/java/com/example/ocms/service/AuthService.java - JWT Service
backend/src/main/java/com/example/ocms/security/JwtService.java - Course Service · Supports catalog management and soft deletion.
backend/src/main/java/com/example/ocms/service/CourseService.java - Enrollment Service · Handles enrollment, my-courses, and progress operations.
backend/src/main/java/com/example/ocms/service/EnrollmentService.java - Admin Service · Builds dashboard and student data responses.
backend/src/main/java/com/example/ocms/service/AdminService.java - Current User Service
backend/src/main/java/com/example/ocms/service/CurrentUserService.java - Entity Mapper · Translates API DTOs and persistence entities.
backend/src/main/java/com/example/ocms/mapper/EntityMapper.java
Persistence
- JPA Repositories · Course and enrollment repositories mediate database access.
backend/src/main/java/com/example/ocms/repository/CourseRepository.java - Course Domain · Users, courses, lessons, enrollments, and enrollment status.
backend/src/main/java/com/example/ocms/entity/Enrollment.java - MySQL
database/schema.sql
Deployment & Discovery
- Docker Compose · Coordinates frontend, backend, and database services.
docker-compose.yml - Nginx
frontend/nginx.conf - OpenAPI / Swagger
backend/src/main/java/com/example/ocms/config/OpenApiConfig.java
Connections 25
- Docker Compose → Nginx: runs
- Docker Compose → Spring Boot Runtime: runs
- Docker Compose → MySQL: runs
- React/Vite SPA → App Routing: mounts
- App Routing → Auth Context: provides session
- App Routing → Student Dashboard: student views
- App Routing → Admin Dashboard: admin views
- Student Dashboard → API Client: uses
- Admin Dashboard → API Client: uses
- API Client → Security Chain: bearer REST requests
- Security Chain → REST Controllers: authorizes
- REST Controllers → Auth Service: authentication
- Auth Service → JWT Service: issues tokens
- REST Controllers → Course Service: course operations
- REST Controllers → Enrollment Service: enrollment and progress
- REST Controllers → Admin Service: dashboard queries
- REST Controllers → Current User Service: resolves caller
- Course Service → Entity Mapper: maps DTOs
- Enrollment Service → Entity Mapper: maps DTOs
- Course Service → JPA Repositories: persists
- Enrollment Service → JPA Repositories: persists
- Admin Service → JPA Repositories: queries
- JPA Repositories → Course Domain: manages
- JPA Repositories → MySQL: JPA access
- Spring Boot Runtime → OpenAPI / Swagger: publishes