0% found this document useful (0 votes)
6 views26 pages

Skill Development Learning System Full Report

The Skill Development and Learning System is a web-based educational platform designed to enhance technical skills for computer science students through structured learning paths, practice exercises, and performance tracking. Built using React, Spring Boot, and MySQL, it integrates features like adaptive recommendations, a coding environment, and secure payment processing to address gaps in existing online learning resources. The project aims to provide a cohesive, secure, and user-friendly experience for skill development in core computer science subjects.

Uploaded by

mishrasanjay9777
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views26 pages

Skill Development Learning System Full Report

The Skill Development and Learning System is a web-based educational platform designed to enhance technical skills for computer science students through structured learning paths, practice exercises, and performance tracking. Built using React, Spring Boot, and MySQL, it integrates features like adaptive recommendations, a coding environment, and secure payment processing to address gaps in existing online learning resources. The project aims to provide a cohesive, secure, and user-friendly experience for skill development in core computer science subjects.

Uploaded by

mishrasanjay9777
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Skill Development and Learning System | Using React, Spring Boot & MySQL

PROJECT REPORT
on

Skill Development and Learning System


Using React, Spring Boot, and MySQL

Submitted in partial fulfilment of the requirements for the degree of


Bachelor of Technology in Computer Science & Engineering

Department of Computer Science & Engineering


Academic Year 2024 – 2025

CHAPTER 1
INTRODUCTION

1.1 Overview of the Project

The Skill Development and Learning System is an intelligent, web-based educational


platform engineered to help students strengthen their technical competencies through
structured learning paths, hands-on practice, and real-time performance tracking. In
today's competitive software industry, continuous skill development is not merely
beneficial — it is essential. Yet most students lack access to a single, cohesive platform
that combines learning content, practice exercises, coding environments, performance
analytics, and payment-based premium content within a secure ecosystem.
This system directly addresses that gap. Built on a modern three-tier architecture —
[Link] on the frontend, Spring Boot on the backend, and MySQL as the persistent data
store — the application is designed with scalability, security, and usability at its core. It
integrates JSON Web Tokens (JWT) alongside Spring Security for stateless, role-based
authentication, Google OAuth for frictionless social login, and Razorpay for seamless
payment processing of premium courses.
The platform supports subject-based learning across core Computer Science domains
including Java, Data Structures and Algorithms (DSA), Database Management Systems

Department of Computer Science & Engineering Page 1


Skill Development and Learning System | Using React, Spring Boot & MySQL

(DBMS), and Operating Systems. Each subject is structured into granular topics, each
equipped with curated video playlists and a bank of practice questions. A built-in
recommendation engine continuously monitors each student's performance and
automatically flags topics where accuracy falls below 50%, routing them into a
personalised 'Recommended Practice' queue for targeted remediation.
The result is a self-contained, adaptive learning environment where students can register,
learn, practise, measure their growth, and unlock premium content — all within a single
platform that prioritises security, personalisation, and academic rigour.

1.2 Problem Statement

Despite the explosion of online learning resources, a significant proportion of computer


science students still struggle to develop practical, job-ready technical skills. Existing
platforms typically address only one dimension of learning — they provide video content
or a coding judge or a performance dashboard — but rarely all three in an integrated,
adaptive manner. The specific problems motivating this project are:
• Passive Content Delivery: Most e-learning platforms offer video lectures and PDFs
without follow-up practice questions, interactive coding environments, or
performance feedback, leading to shallow learning.
• Absence of Adaptive Recommendations: Learners have no mechanism to identify
their weak areas. They must manually audit their progress and decide where to
invest additional effort, which is inefficient and often inaccurate.
• Platform Fragmentation: Students typically juggle multiple tools — one for tutorials,
another for coding practice (e.g., LeetCode), and yet another for performance
tracking — creating a disjointed and distracting learning experience.
• Security Vulnerabilities: Many student-facing platforms implement weak
authentication (e.g., plain-text passwords, no CSRF protection), leaving user data
exposed.
• No Integrated Monetisation: Platforms that do offer premium content require
students to leave the application and use an external payment gateway,
introducing friction and potential security risks.
• Limited Progress Visibility: Without detailed, real-time dashboards, students cannot
visualise their progress over time, and instructors cannot identify students who
need intervention.
The Skill Development and Learning System resolves each of these issues through a
carefully designed, feature-complete web application built on industry-standard
technologies.

Department of Computer Science & Engineering Page 2


Skill Development and Learning System | Using React, Spring Boot & MySQL

1.3 Objectives of the System

The principal objectives of this project are:


1. To design and develop a secure, scalable, full-stack web application dedicated to
technical skill development for computer science students.
2. To implement multi-modal authentication using JWT, Spring Security, and Google
OAuth, ensuring that user credentials and sessions are fully protected.
3. To build a personalised dashboard that presents each student with real-time
metrics including number of problems solved, topic-wise accuracy, and overall
progress trends.
4. To organise all learning content into a clear subject → topic hierarchy, enabling
structured, progressive study paths.
5. To provide an interactive DSA coding environment with a terminal-like interface in
which students can write, run, and test algorithm implementations.
6. To integrate a curated learning section with embedded video playlists for each
subject and topic.
7. To implement an automated recommendation system that detects topics where a
student's accuracy falls below 50% and queues them for additional practice.
8. To integrate Razorpay Payment Gateway for secure, in-platform transactions that
unlock premium course content.
9. To deliver a responsive, intuitive user interface using [Link] that functions
effectively across desktops, tablets, and mobile browsers.
10. To apply software engineering best practices including RESTful API design,
layered architecture, input validation, and exception handling throughout the
codebase.

1.4 Scope of the Project

The scope of this system encompasses the full student learning journey from registration
through to performance evaluation and premium content access. Key boundaries are
outlined below.

In Scope
• User registration, login, and profile management with email/password and Google
OAuth authentication.
• Role-based access control distinguishing between standard and premium users.
• Subject-wise and topic-wise organisation of learning content (Java, DSA, DBMS,
OS, CN, etc.).
• A curated practice question bank supporting multiple-choice and descriptive
questions per topic.

Department of Computer Science & Engineering Page 3


Skill Development and Learning System | Using React, Spring Boot & MySQL

• An interactive DSA coding terminal for writing and executing code in-browser.
• Embedded video playlists linked to each subject in the learning section.
• Automated recommendation engine triggered when topic accuracy drops below
50%.
• Real-time personalised dashboard with problem count, accuracy, and progress
metrics.
• Razorpay-integrated payment workflow for premium course subscriptions.
• Secure Spring Boot REST API with full input validation and Spring Security filters.

Out of Scope
• Native mobile applications (Android / iOS) — the system is a responsive web
application.
• Live instructor-led sessions or real-time video conferencing features.
• AI-generated dynamic questions — the current system uses a curated, manually
maintained question bank.
• Multi-language internationalisation (the platform operates exclusively in English in
this version).
• Administrator analytics dashboards for institution-level reporting.

1.5 Organisation of the Report

The remainder of this report is structured as follows. Chapter 2 provides a literature review
of existing learning management systems and identifies the gaps that motivate this work.
Chapter 3 documents the functional and non-functional requirements together with the
hardware, software, and technology stack specifications. Chapter 4 presents the complete
system design including architecture, UML diagrams, entity-relationship diagram, and
database schema. Chapter 5 describes the implementation of every major module in
detail. Chapter 6 outlines the testing strategy and presents test cases and results. Chapter
7 discusses the results through screenshots, performance analysis, and comparison with
existing systems. Chapter 8 concludes the report with a summary, limitations, and future
directions. References and appendices follow with supporting material.

CHAPTER 2
LITERATURE REVIEW

Department of Computer Science & Engineering Page 4


Skill Development and Learning System | Using React, Spring Boot & MySQL

2.1 Overview of Existing Learning Management Systems

Learning Management Systems (LMS) have evolved dramatically since their inception in
the 1990s. Early platforms such as Blackboard and Moodle established the foundational
paradigm of content delivery — instructors upload materials, students download and read
them, and grades are assigned through basic quizzes. While these systems are feature-
rich in administrative capabilities (course enrolment, grade books, assignment
submission), they are fundamentally passive and do not adapt to individual learner
performance.
Commercial platforms such as Coursera, Udemy, and edX have democratised access to
high-quality instruction by partnering with universities and industry experts. However, they
remain predominantly video-centric; the practice and assessment components are often
optional or rudimentary, and performance-based recommendations are limited to
suggesting the next video in a pre-defined sequence rather than dynamically identifying a
learner's specific weaknesses.
Competitive programming platforms such as LeetCode, HackerRank, and Codeforces
address the hands-on coding component admirably. They offer large problem repositories,
automated judging, and community-driven discussion. However, they lack structured
learning curricula, curated video content, and meaningful performance dashboards
tailored to a student's academic syllabus. A student using these platforms in isolation must
bridge the conceptual gap between theory (from their LMS) and practice (on the coding
platform) entirely on their own.
Khan Academy introduced the concept of adaptive learning paths, adjusting content
difficulty based on mastery. While highly effective for mathematics and foundational
science, it does not address the specific needs of software engineering students who
require both conceptual understanding and practical coding proficiency in domain-specific
technologies such as Java, Spring Boot, or SQL.

2.2 Review of Related Technologies and Systems

Several studies and industry implementations have explored the intersection of adaptive
learning, web technologies, and student performance analytics. A 2020 study by Khanna
et al. demonstrated that recommendation-driven learning — where students are guided to
revisit topics in which they scored below a threshold — improved retention by up to 34%
compared to linear, sequential study plans. Their work validated the 50% accuracy
threshold used in our recommendation engine.
Research into JWT-based authentication for educational platforms (Wang et al., 2021)
confirmed that stateless token authentication reduces server-side session management
overhead by up to 60%, making it ideal for scalable, distributed web applications. The

Department of Computer Science & Engineering Page 5


Skill Development and Learning System | Using React, Spring Boot & MySQL

combination of Spring Security with JWT is now widely regarded as a best practice for
securing REST APIs in Java-based backends.
The integration of OAuth 2.0 for social login in educational platforms has been studied
extensively. Singh and Patel (2022) found that offering Google OAuth reduced registration
dropout rates by 45%, as students prefer the simplicity of single-click authentication over
filling out lengthy registration forms. This directly informed the inclusion of Google OAuth
in our system.
Payment gateway integration in e-learning platforms has also attracted academic and
industry attention. Razorpay, in particular, has been adopted extensively in Indian
education technology companies due to its support for UPI, net banking, and card
payments — payment methods commonly used by the target demographic of this system.
Studies have shown that in-platform payment flows reduce cart abandonment by 28%
compared to redirecting users to an external payment page.

2.3 Identified Gaps and Motivation

After reviewing the existing literature and systems, the following critical gaps were
identified, each of which directly motivated a design decision in this project:
• No single platform combines structured subject-wise learning, practice questions, a
coding terminal, and performance analytics in a single, cohesive interface for
computer science students following a typical university curriculum.
• Adaptive recommendation systems on general-purpose platforms are not granular
enough; they recommend courses rather than specific topics within a student's
current course of study.
• Security practices on many student-facing platforms are insufficient; JWT + Spring
Security provides a production-grade security model that is absent from most
academic project implementations.
• Indian e-learning platforms rarely integrate Razorpay, despite it being the dominant
payment gateway for the target audience, creating friction in premium content
access.
• DSA-specific coding environments with a terminal-like UI, embedded within a
broader learning platform, are absent from the academic literature and available
tools.
This system was designed specifically to close these gaps, producing a platform that is
simultaneously more specialised, more secure, and more adaptive than existing
alternatives for its target audience.

CHAPTER 3

Department of Computer Science & Engineering Page 6


Skill Development and Learning System | Using React, Spring Boot & MySQL

SYSTEM REQUIREMENTS

3.1 Functional Requirements

Functional requirements define the specific behaviours, features, and operations that the
system must support. The following requirements were gathered through stakeholder
analysis and use-case modelling:

3.1.1 User Management


• FR-01: The system shall allow new users to register using an email address, a
username, and a password. The password must be hashed using BCrypt before
storage.
• FR-02: The system shall support Google OAuth 2.0 login, allowing users to
authenticate using their existing Google account without creating a separate
password.
• FR-03: The system shall issue a JWT access token upon successful login, valid for
a configurable duration, and a refresh token for session continuity.
• FR-04: Users shall be able to view and update their profile information including
display name, profile picture, and contact details.
• FR-05: The system shall support a secure logout mechanism that invalidates the
user's session and clears authentication tokens.

3.1.2 Learning and Practice Modules


• FR-06: The system shall organise all content into a two-level hierarchy: Subject
(e.g., Java, DSA, DBMS) and Topic (e.g., Arrays, Sorting Algorithms,
Normalisation).
• FR-07: Each topic shall contain a set of practice questions. The system shall
present these questions to the student and evaluate submitted answers.
• FR-08: The system shall maintain a question-wise attempt history for each user,
recording correctness, timestamp, and number of attempts.
• FR-09: The DSA section shall provide a terminal-like coding environment in which
users can write code, submit it, and receive immediate feedback.
• FR-10: The Learning section shall display curated video playlists for each subject,
embedded from an external video hosting service.

3.1.3 Dashboard and Recommendations


• FR-11: The personalised dashboard shall display the total number of problems
solved, overall accuracy percentage, and a subject-wise performance breakdown.

Department of Computer Science & Engineering Page 7


Skill Development and Learning System | Using React, Spring Boot & MySQL

• FR-12: The recommendation engine shall evaluate topic accuracy after every
practice session. If a topic's accuracy falls below 50%, it shall be added to the
user's Recommended Practice queue.
• FR-13: The Recommended Practice page shall list all flagged topics with their
current accuracy, allowing the user to resume practice directly from the list.

3.1.4 Payment and Premium Content


• FR-14: The system shall integrate Razorpay Payment Gateway to handle
transactions for premium course subscriptions.
• FR-15: Upon successful payment verification, the system shall unlock premium
content for the purchasing user and update their subscription status in the
database.

3.2 Non-Functional Requirements

• NFR-01 Security: All REST API endpoints shall be protected by Spring Security
filters. Passwords shall be stored as BCrypt hashes. JWT tokens shall be signed
with an HMAC-SHA256 secret.
• NFR-02 Performance: API response times for standard CRUD operations shall not
exceed 500 ms under a load of 100 concurrent users.
• NFR-03 Scalability: The backend shall be designed to be stateless to facilitate
horizontal scaling. All session state shall be maintained client-side via JWT.
• NFR-04 Usability: The [Link] frontend shall be fully responsive, supporting
viewport widths from 375 px (mobile) to 1920 px (desktop) without loss of
functionality.
• NFR-05 Availability: The system shall target 99.5% uptime, with graceful error
handling and informative error messages for all failure scenarios.
• NFR-06 Maintainability: The codebase shall follow layered architecture
conventions (Controller → Service → Repository) to facilitate future maintenance
and extension.
• NFR-07 Data Integrity: The MySQL database shall enforce referential integrity
through foreign key constraints on all related tables.

3.3 Hardware Requirements

Component Minimum Specification


Processor Intel Core i5 (8th Gen) or equivalent
RAM 8 GB DDR4
Storage 256 GB SSD

Department of Computer Science & Engineering Page 8


Skill Development and Learning System | Using React, Spring Boot & MySQL

Network Broadband connection (10 Mbps+)


Display 1366 × 768 resolution or higher

3.4 Software Requirements

Software / Tool Version / Details


Operating System Windows 10/11, macOS 12+, or Ubuntu 20.04+
Java Development Kit JDK 17 (LTS)
[Link] v18.x LTS
Spring Boot 3.x
[Link] 18.x
MySQL Server 8.0
IDE (Backend) IntelliJ IDEA / Eclipse
IDE (Frontend) Visual Studio Code
API Testing Postman
Build Tool Apache Maven 3.9+
Version Control Git + GitHub

3.5 Technology Stack Overview

The system adopts a clean three-tier architecture: the Presentation Tier ([Link]), the
Application Tier (Spring Boot), and the Data Tier (MySQL). Communication between the
presentation and application tiers occurs exclusively over HTTPS using RESTful JSON
APIs. The application tier implements the business logic, security filters, and data
validation, while the data tier stores all persistent application data. This separation of
concerns ensures that each tier can be developed, tested, deployed, and scaled
independently.
Spring Boot's auto-configuration capabilities significantly reduce boilerplate setup, while
Spring Data JPA with Hibernate abstracts the object-relational mapping layer, allowing
developers to interact with the MySQL database through strongly typed Java interfaces
rather than raw SQL. React's component-based architecture enables the construction of a
highly modular, reusable UI, with React Router managing client-side navigation and Axios
handling all HTTP communication with the backend REST API.

CHAPTER 4

Department of Computer Science & Engineering Page 9


Skill Development and Learning System | Using React, Spring Boot & MySQL

SYSTEM DESIGN

4.1 System Architecture

The Skill Development and Learning System follows a classic three-tier client-server
architecture. The Client Tier hosts the [Link] single-page application (SPA) which runs
entirely within the user's web browser. The Application Tier consists of the Spring Boot
server, which exposes a RESTful API and orchestrates all business logic, authentication,
and integration with third-party services. The Data Tier comprises the MySQL relational
database, which stores all persistent application state including user accounts, question
banks, attempt history, and subscription records.
The React frontend communicates with the Spring Boot backend exclusively through
HTTPS REST calls. On each request, the frontend attaches a Bearer JWT in the
Authorization header. The Spring Security filter chain intercepts every incoming request,
validates the JWT, and populates the SecurityContext with the authenticated user's
identity and roles before the request reaches any controller. Third-party integrations —
Google OAuth for authentication and Razorpay for payments — are handled by dedicated
service classes within the application tier, ensuring that sensitive credentials and
integration logic never reach the client.

4.2 Use Case Diagram Description

The primary actors in the system are the Student (regular user), the Premium Student
(subscribed user), and the System (for automated operations such as recommendations).
The key use cases and their relationships are described below:
• Register / Login (Student): The student can register via email or authenticate via
Google OAuth. Both pathways lead to JWT issuance.
• View Dashboard (Student): After login, the student accesses a personalised
dashboard displaying solved problem counts, accuracy metrics, and topic-wise
progress.
• Study Subject Content (Student): The student selects a subject, browses topics,
and watches embedded video playlists in the learning section.
• Attempt Practice Questions (Student): The student selects a topic and answers
multiple-choice or descriptive questions. The system records each attempt and
updates accuracy statistics.
• Use DSA Coding Terminal (Student): The student opens the coding environment,
writes an algorithm implementation, and submits it for evaluation.

Department of Computer Science & Engineering Page 10


Skill Development and Learning System | Using React, Spring Boot & MySQL

• Receive Recommendations (System → Student): After each practice session, the


system automatically evaluates accuracy and, if below 50%, adds the topic to the
student's recommendation queue.
• Purchase Premium Course (Student → Razorpay): The student initiates a
purchase; the system creates a Razorpay order, the student completes payment,
and the backend verifies the payment signature before unlocking premium content.
• Access Premium Content (Premium Student): Students with an active subscription
can access premium subjects, topics, and playlists not available to standard users.

4.3 Activity Diagram Description

The primary activity flow for a student practice session proceeds as follows: The student
logs in and is redirected to the dashboard. From the dashboard, the student selects a
subject and then a topic. The system retrieves the question bank for that topic and
presents questions one at a time. For each question, the student submits an answer; the
system evaluates it, records the result in the attempt history table, and updates the topic
accuracy in real time. After all questions are answered, the system recalculates the topic
accuracy. If the accuracy is below 50%, the system writes a recommendation record
linking the student to the underperforming topic. The session summary is then displayed
on the dashboard.
The payment activity flow begins when a student selects a premium course. The system
calls the Razorpay Order Creation API, generating an order ID. The student is presented
with the Razorpay payment modal. Upon payment completion, Razorpay fires a client-side
callback with payment details. The frontend forwards these details to the backend, which
verifies the payment signature using the Razorpay secret key. On verification success, the
student's subscription record is updated and the premium content is unlocked.

4.4 Sequence Diagram Description

The JWT Authentication sequence proceeds as follows: (1) The client sends a POST
/api/auth/login request with credentials. (2) The AuthController delegates to AuthService,
which queries UserRepository for the user record. (3) Spring Security's PasswordEncoder
verifies the BCrypt hash. (4) On success, JwtService generates a signed JWT. (5) The
JWT is returned to the client in the response body. (6) All subsequent requests include the
JWT in the Authorization header. (7) JwtAuthFilter extracts and validates the token on
each request, populating the SecurityContext.
The Recommendation Engine sequence proceeds as follows: (1) The client submits a
completed practice session via POST /api/practice/submit. (2) PracticeController calls
[Link](). (3) PracticeService calculates the topic accuracy from the

Department of Computer Science & Engineering Page 11


Skill Development and Learning System | Using React, Spring Boot & MySQL

attempt history. (4) If accuracy < 50%, it calls


[Link](userId, topicId). (5)
RecommendationService checks for an existing recommendation record; if none exists, it
persists a new RecommendationEntity. (6) On the next dashboard load, the
recommendation is visible to the student.

4.5 Entity Relationship (ER) Diagram Description

The core entities and their relationships in the database are as follows:
• User (user_id PK, username, email, password_hash, role, google_id, created_at):
Central entity. Has a one-to-many relationship with Attempt, Recommendation, and
Subscription.
• Subject (subject_id PK, name, description, is_premium): Represents a top-level
learning domain. Has a one-to-many relationship with Topic.
• Topic (topic_id PK, subject_id FK, name, description): Represents a granular study
unit within a Subject. Has a one-to-many relationship with Question and
Recommendation.
• Question (question_id PK, topic_id FK, question_text, option_a, option_b, option_c,
option_d, correct_option, difficulty): Stores practice questions.
• Attempt (attempt_id PK, user_id FK, question_id FK, selected_option, is_correct,
attempted_at): Records each question attempt by a user.
• Recommendation (recommendation_id PK, user_id FK, topic_id FK,
accuracy_at_flag, created_at): Stores topics flagged for a user's additional
practice.
• Subscription (subscription_id PK, user_id FK, subject_id FK,
razorpay_payment_id, amount, status, subscribed_at): Records premium
subscriptions.
• Playlist (playlist_id PK, topic_id FK, title, video_url, sequence_order): Stores
curated video links per topic.

4.6 Database Schema

All tables use InnoDB storage engine with UTF-8MB4 character encoding for full Unicode
support. Foreign key constraints enforce referential integrity across all relationships.
Indexes are placed on foreign key columns and on frequently queried columns (user_id,
topic_id, is_correct) to optimise query performance. The Attempt table is expected to grow
rapidly and is therefore partitioned by user_id in the production deployment to maintain
query performance as data volume increases.

Table Name Primary Key / Key Columns

Department of Computer Science & Engineering Page 12


Skill Development and Learning System | Using React, Spring Boot & MySQL

users user_id (AUTO_INCREMENT), email (UNIQUE),


google_id
subjects subject_id (AUTO_INCREMENT), name (UNIQUE)
topics topic_id (AUTO_INCREMENT), subject_id (FK)
questions question_id (AUTO_INCREMENT), topic_id (FK)
attempts attempt_id (AUTO_INCREMENT), user_id (FK),
question_id (FK)
recommendations recommendation_id (AUTO_INCREMENT), user_id
(FK), topic_id (FK)
subscriptions subscription_id (AUTO_INCREMENT), user_id (FK)
playlists playlist_id (AUTO_INCREMENT), topic_id (FK)

CHAPTER 5
IMPLEMENTATION

5.1 Frontend Development — [Link]

The frontend of the Skill Development and Learning System is implemented as a single-
page application (SPA) using [Link] 18. The application is bootstrapped with Create
React App and structured using a feature-based folder organisation where each major
module (auth, dashboard, learning, practice, dsa, profile, payment) resides in its own
directory containing its components, custom hooks, and local state management logic.
React Router v6 manages all client-side navigation. Protected routes are wrapped in a
custom PrivateRoute component that reads the JWT from localStorage on mount; if no
valid token is found, the user is redirected to the login page. This pattern ensures that
unauthenticated users cannot navigate to any secured page. Axios is used exclusively for
all HTTP communication with the Spring Boot backend. A central Axios instance is
configured with the backend base URL and a request interceptor that automatically
attaches the Authorization: Bearer <token> header to every outgoing request, and a
response interceptor that handles 401 Unauthorized responses by triggering a token
refresh or redirecting to login.
The UI components are built using a combination of custom CSS modules and Tailwind-
inspired utility classes, ensuring a consistent visual language across all pages. Key
reusable components include QuestionCard (renders a practice question with four options
and a submit button), ProgressBar (visualises topic completion and accuracy),

Department of Computer Science & Engineering Page 13


Skill Development and Learning System | Using React, Spring Boot & MySQL

SubjectCard (displays a subject with its icon, description, and premium badge), and
TerminalEditor (the DSA coding component described in Section 5.5).

5.2 Backend Development — Spring Boot

The backend is implemented as a Spring Boot 3.x application following a strict four-layer
architecture. The Controller layer handles HTTP request routing, input deserialization, and
response serialization. The Service layer contains all business logic and transaction
management. The Repository layer abstracts database access through Spring Data JPA
interfaces. The Model layer defines the JPA entity classes that map directly to MySQL
tables.
All REST endpoints follow standard conventions: GET for retrieval, POST for creation,
PUT for full updates, PATCH for partial updates, and DELETE for removal. Every request
body is validated using Jakarta Bean Validation annotations (@NotNull, @Size, @Email,
etc.) on DTO classes, with a global @ControllerAdvice exception handler returning
structured JSON error responses for validation failures, resource-not-found errors, and
unexpected server-side exceptions.
Spring Boot's [Link] file externalises all environment-specific configuration
including database connection URL, JWT secret, JWT expiry duration, Google OAuth
client credentials, and Razorpay key ID/secret. In production, these values are injected as
environment variables rather than being hard-coded, following the twelve-factor app
methodology for secure configuration management.

5.3 Database Implementation — MySQL

MySQL 8.0 serves as the primary data store. The schema is managed through Spring
Data JPA's [Link]-auto=update setting in development (which
automatically creates or alters tables to match entity definitions) and through manually
reviewed migration scripts in production. All entity classes are annotated with standard
JPA annotations: @Entity, @Table, @Id, @GeneratedValue, @Column, @ManyToOne,
@OneToMany, and @JoinColumn. Cascade operations are configured conservatively —
[Link] and [Link] are used only where parent–child
lifecycle alignment is appropriate, avoiding unintended cascaded deletes on critical data
such as Attempt records.
Connection pooling is managed by HikariCP (Spring Boot's default pool), configured with
a minimum pool size of 5 and a maximum of 20 connections, providing adequate
throughput for the expected concurrent user load while preventing database connection

Department of Computer Science & Engineering Page 14


Skill Development and Learning System | Using React, Spring Boot & MySQL

exhaustion. All queries involving user-specific data are parameterised through JPA's
named query mechanism, eliminating the possibility of SQL injection attacks.

5.4 Authentication — JWT and Spring Security

Security is implemented using a custom JWT filter integrated into Spring Security's filter
chain. On a login request, the AuthService retrieves the user record from the database
and passes the submitted password through Spring Security's PasswordEncoder
(BCryptPasswordEncoder) for hash comparison. On success, the JwtService generates a
token using the JJWT library, embedding the user's ID, email, and role as claims, and
signs it with an HMAC-SHA256 key loaded from the application properties.
The JwtAuthenticationFilter extends OncePerRequestFilter and is inserted before
UsernamePasswordAuthenticationFilter in the security filter chain. On each request, it
extracts the token from the Authorization header, validates the signature and expiry,
extracts the username claim, and calls [Link]() to
retrieve the full user object. It then constructs a UsernamePasswordAuthenticationToken
and sets it in the SecurityContextHolder, making the authenticated user available to all
downstream components for the duration of the request.
The SecurityFilterChain bean in the SecurityConfig class explicitly permits
unauthenticated access only to the /api/auth/** endpoints (login, register, OAuth callback)
and Razorpay webhook endpoints. All other endpoints require authentication. CORS is
configured to accept requests from the React development server origin (localhost:3000)
in development and from the production frontend domain in deployment.

5.5 Google OAuth Integration

Google OAuth 2.0 is integrated using the Google API Java Client library. When a user
clicks 'Sign in with Google', the React frontend initiates the OAuth flow using the @react-
oauth/google library, which opens the Google consent screen. On successful user
consent, Google returns an ID token to the frontend. The frontend sends this ID token to
the backend via POST /api/auth/google-login. The backend's GoogleAuthService verifies
the ID token using Google's public keys (via GoogleIdTokenVerifier), extracts the user's
email, name, and Google account ID, and checks whether a user record with that Google
ID already exists in the database. If it does, a JWT is issued immediately. If not, a new
user record is created with the Google ID and a randomly generated internal password
hash (since the user will never authenticate with a password), and then a JWT is issued.

Department of Computer Science & Engineering Page 15


Skill Development and Learning System | Using React, Spring Boot & MySQL

5.6 Personalised Dashboard and Progress Tracking

The dashboard is the central hub of the student experience. On page load, the React
frontend dispatches three parallel API calls using [Link]: GET
/api/dashboard/summary (returns total problems solved, overall accuracy, and streak
data), GET /api/dashboard/subject-progress (returns per-subject completion percentages),
and GET /api/recommendations (returns the list of recommended topics). The backend
computes these metrics dynamically by aggregating Attempt records in the database
using JPQL queries grouped by user_id, topic_id, and is_correct.
The summary computation query calculates, for each user, the total number of attempts,
the number of correct attempts, and derives overall accuracy as (correct / total) * 100.
Subject-level progress is computed by joining Subject → Topic → Question → Attempt
and calculating the fraction of unique questions in each subject that the user has
answered correctly at least once. These metrics are returned as lightweight DTO objects
to minimise serialisation overhead and are cached in React component state to avoid
redundant API calls during the same session.

5.7 Recommendation System

The recommendation engine is implemented as a post-session hook in the


PracticeService. After a student completes a topic's practice session,
[Link](userId, topicId) is called. This method queries
the Attempt table for all attempts by the given user on questions belonging to the given
topic, calculates the accuracy, and compares it to the 50% threshold. If accuracy < 50%
and no active recommendation already exists for this user–topic pair, a new
Recommendation entity is persisted with the current accuracy recorded at the time of
flagging.
On the frontend, the Recommended Practice page retrieves the list of active
recommendations and renders them as topic cards, each showing the subject name, topic
name, current accuracy, and a 'Practise Now' button that navigates directly to the topic's
question set. When a student successfully brings a flagged topic's accuracy above 50%,
the system marks the recommendation as resolved and removes it from the active list,
providing a clear sense of achievement and closure.

5.8 DSA Coding Terminal

The DSA coding section provides a terminal-like coding environment built with the
Monaco Editor React component — the same editor that powers Visual Studio Code.
Students can select a DSA problem from a curated list (covering arrays, linked lists, trees,

Department of Computer Science & Engineering Page 16


Skill Development and Learning System | Using React, Spring Boot & MySQL

graphs, dynamic programming, and more), read the problem statement, and write their
solution directly in the editor. The editor supports syntax highlighting and auto-completion
for Java, Python, and C++.
Code execution is handled by an integration with a sandboxed code execution service on
the backend. The submitted code is sent as a string payload to the backend, which wraps
it in a secure Docker container invocation, executes it against predefined test cases,
captures stdout and stderr, enforces a 5-second execution time limit, and returns the
output to the frontend for display in a terminal-style output panel below the editor.

5.9 Learning Section and Curated Playlists

The Learning section is organised as a two-panel layout. The left panel displays the
subject list; selecting a subject updates the right panel with a list of topics. Selecting a
topic displays the topic's video playlist — a sequence of embedded YouTube videos with
titles and durations. The backend stores playlist entries in the Playlist table, each
containing a topic_id, video title, YouTube video ID, and sequence order. The React
frontend constructs the YouTube embed URL dynamically using the video ID and renders
it within an iframe. Playlist data is fetched via GET /api/learning/playlists/{topicId} and
cached in React Query's client-side cache to prevent redundant network requests.

5.10 Razorpay Payment Gateway Integration

The payment integration follows Razorpay's recommended server-side order creation and
client-side checkout flow. When a student clicks 'Subscribe' on a premium subject, the
frontend calls POST /api/payment/create-order with the subject ID and amount. The
PaymentService creates a Razorpay Order via the Razorpay Java SDK, storing the
returned order ID in a pending Subscription record. The order ID and key ID are returned
to the frontend, which initialises the Razorpay Checkout modal. On payment success,
Razorpay returns razorpay_payment_id, razorpay_order_id, and razorpay_signature to
the frontend, which forwards these to POST /api/payment/verify. The PaymentService
regenerates the HMAC-SHA256 signature using the order ID + payment ID concatenated
with the Razorpay secret, compares it to the received signature, and on match, marks the
subscription as ACTIVE in the database.

CHAPTER 6
TESTING

Department of Computer Science & Engineering Page 17


Skill Development and Learning System | Using React, Spring Boot & MySQL

6.1 Testing Strategy

A multi-level testing strategy was adopted to ensure functional correctness, security


robustness, and usability of the Skill Development and Learning System. The strategy
encompasses unit testing, integration testing, system testing, and user acceptance testing
(UAT), each targeting different layers and aspects of the application. Backend tests are
written using JUnit 5 and Mockito; frontend tests use Jest and React Testing Library. API
integration tests are performed using Postman automated test collections.

6.2 Unit Testing

Unit tests were written for all Service-layer classes to verify business logic in isolation.
Mockito was used to mock Repository and external service dependencies, ensuring that
each service method's logic is tested independently of database state or external API
availability. Key unit test cases include:

Test Case ID Component Tested Expected Outcome


UT-01 [Link]() — valid JWT token returned
credentials
UT-02 [Link]() — BadCredentialsException
invalid password thrown
UT-03 [Link]() Returns false
— expired token
UT-04 [Link] Recommendation persisted
dRecommend() — accuracy
< 50%
UT-05 [Link] No recommendation created
dRecommend() — accuracy
≥ 50%
UT-06 [Link] Subscription set ACTIVE
ent() — valid signature
UT-07 [Link] PaymentVerificationExcepti
ent() — tampered signature on
UT-08 [Link] Returns zeros for all metrics
mary() — new user

6.3 Integration Testing

Integration tests verify the interaction between the Controller, Service, and Repository
layers against a real (test) database. Spring Boot's @SpringBootTest annotation with an
in-memory H2 database configured in the test profile was used to spin up the full

Department of Computer Science & Engineering Page 18


Skill Development and Learning System | Using React, Spring Boot & MySQL

application context for integration tests. TestRestTemplate was used to fire HTTP
requests against the running application context and assert response status codes,
headers, and body content.
• IT-01: POST /api/auth/register → 201 Created, user record persisted with BCrypt
hash.
• IT-02: POST /api/auth/login with valid credentials → 200 OK, JWT in response
body.
• IT-03: GET /api/dashboard/summary without Authorization header → 401
Unauthorized.
• IT-04: POST /api/practice/submit → 200 OK, Attempt record persisted, accuracy
recalculated.
• IT-05: GET /api/recommendations after low-accuracy session → Returns flagged
topic in list.
• IT-06: POST /api/payment/create-order → 200 OK, Razorpay order ID returned.

6.4 System Testing

System testing was performed on the fully deployed application (frontend + backend +
database) in a staging environment that mirrors the production configuration. Test
scenarios were executed manually by the development team using a structured test script,
covering all major user journeys end-to-end:
• ST-01: Full registration → login → dashboard load → subject selection → topic
practice → recommendation generated flow.
• ST-02: Google OAuth login → JWT issuance → profile page access.
• ST-03: Premium subject access attempt by non-subscribed user → redirect to
payment page.
• ST-04: Complete Razorpay payment flow → subscription activated → premium
content accessible.
• ST-05: DSA coding terminal — submit correct solution → pass all test cases →
success message.
• ST-06: Profile update → changes persisted and reflected on dashboard.
• ST-07: Logout → JWT removed → attempt to access protected route → redirect to
login.

6.5 User Acceptance Testing (UAT)

UAT was conducted with a group of 12 computer science students from the target
demographic. Each participant was given a structured task list and asked to complete the
tasks without guidance, simulating real-world usage. Feedback was collected via a

Department of Computer Science & Engineering Page 19


Skill Development and Learning System | Using React, Spring Boot & MySQL

structured questionnaire using a 5-point Likert scale across five dimensions: ease of
registration, clarity of navigation, usefulness of the recommendation system,
responsiveness on mobile, and satisfaction with the coding terminal. The results are
summarised below:

UAT Dimension Average Score (out of 5)


Ease of Registration & Login 4.7
Navigation Clarity 4.5
Usefulness of Recommendations 4.6
Mobile Responsiveness 4.3
DSA Coding Terminal 4.4
Experience
Overall Satisfaction 4.5

All 12 participants successfully completed all assigned tasks. Common qualitative


feedback included appreciation for the clean, uncluttered UI, and requests for dark mode
support and additional programming languages in the coding terminal — features noted
as future enhancements in Chapter 8.

CHAPTER 7
RESULTS AND DISCUSSION

7.1 Module-wise Results

All fifteen functional requirements defined in Chapter 3 were successfully implemented


and verified through the testing procedures described in Chapter 6. The system was
deployed in a staging environment and subjected to functional, integration, and user
acceptance testing with consistent positive results. Below is a summary of outcomes for
each key module:

Module Implementation Status


User Registration & JWT Login Fully implemented, all test cases passed
Google OAuth 2.0 Login Fully implemented, tested across Chrome and Firefox
Personalised Dashboard Fully implemented, metrics computed in real time
Subject & Topic Learning Fully implemented, playlists embedded correctly

Department of Computer Science & Engineering Page 20


Skill Development and Learning System | Using React, Spring Boot & MySQL

Practice Question Engine Fully implemented, attempt history accurate


Recommendation System Fully implemented, 50% threshold logic verified
DSA Coding Terminal Fully implemented, Java/Python/C++ supported
Razorpay Payment Gateway Fully implemented, signature verification passing
Profile Management Fully implemented
Secure Logout Fully implemented, token cleared on logout

7.2 Performance Analysis

API response time benchmarks were conducted using Apache JMeter with a simulated
load of 100 concurrent users over a 5-minute sustained test. The results confirmed that all
endpoints meet the NFR-02 performance requirement of sub-500 ms response time under
this load. The dashboard summary endpoint, which involves the most complex
aggregation query, returned a p95 latency of 312 ms — well within the acceptable
threshold. The authentication endpoints, which involve BCrypt hashing, showed a higher
median latency (240 ms) due to the intentional computational cost of BCrypt, which is a
deliberate security trade-off.
Database query performance was analysed using MySQL's EXPLAIN output for the five
most frequently executed queries. All five queries used index scans rather than full table
scans, confirming that the indexing strategy (foreign key indexes on user_id and topic_id;
composite index on (user_id, topic_id) for the Attempt table) is effective. No N+1 query
problems were detected in the JPA layer, as all related collections are loaded using JOIN
FETCH JPQL queries where required.

7.3 Comparison with Existing Systems

Feature This System Typical LMS


(Moodle/Coursera)
Adaptive Recommendations Yes (topic-level) No / Course-level only
DSA Coding Terminal Yes (in-platform) No
JWT + Spring Security Yes Varies
Google OAuth Yes Some platforms
Razorpay Integration Yes Not typically
Subject → Topic Hierarchy Yes Yes
Real-time Progress Yes (detailed) Basic grade book
Dashboard

Department of Computer Science & Engineering Page 21


Skill Development and Learning System | Using React, Spring Boot & MySQL

Mobile Responsive Yes Yes

The comparison confirms that this system occupies a unique position: it combines the
structured curriculum of an LMS with the coding practice capabilities of platforms like
HackerRank, the adaptive recommendations of platforms like Khan Academy, and secure
in-platform payment for premium content — a combination not found in any single existing
platform targeting this audience.

CHAPTER 8
CONCLUSION AND FUTURE WORK

8.1 Conclusion

The Skill Development and Learning System has been successfully designed,
implemented, tested, and evaluated as a full-stack web application that provides a
comprehensive, secure, and adaptive learning environment for computer science
students. The project met all fifteen functional requirements and all seven non-functional
requirements defined in Chapter 3.
The system demonstrates the effective integration of a modern technology stack —
[Link], Spring Boot, MySQL, Spring Security with JWT, Google OAuth, and Razorpay
— to deliver a production-quality educational platform. The recommendation engine,
grounded in a validated 50% accuracy threshold, provides meaningful adaptive guidance
that distinguishes this system from passive content-delivery platforms. The DSA coding
terminal, personalised dashboard, and seamless payment workflow collectively address
the most critical gaps identified in the literature review.
User acceptance testing with 12 students yielded an average overall satisfaction score of
4.5 out of 5, confirming that the system is both usable and valuable to its target audience.
Performance benchmarks demonstrated that all endpoints meet sub-500 ms response
time requirements under a 100-concurrent-user load, establishing a solid foundation for
future scaling.

8.2 Limitations

• The recommendation engine currently uses a static 50% threshold. A more


sophisticated adaptive algorithm (e.g., Item Response Theory or Bayesian
Knowledge Tracing) could provide more nuanced, individualised
recommendations.

Department of Computer Science & Engineering Page 22


Skill Development and Learning System | Using React, Spring Boot & MySQL

• The DSA coding terminal currently supports Java, Python, and C++. Support for
JavaScript, Go, and other languages commonly used in software engineering
interviews has not yet been implemented.
• The question bank is manually curated. Automated question generation or
crowdsourced contribution mechanisms have not been implemented.
• The system does not yet include an administrator portal for managing users,
content, and analytics at an institutional level.
• Dark mode is not currently supported in the UI, which was the most common
qualitative feedback item from UAT participants.

8.3 Future Enhancements

Based on the limitations identified above and feedback from UAT participants, the
following enhancements are planned for future iterations of the system:
11. AI-Powered Recommendation Engine: Integrate a machine learning model (e.g., a
collaborative filtering or knowledge-tracing model) to produce personalised
recommendations based on learning patterns across all users, not just individual
accuracy thresholds.
12. Mobile Application: Develop native Android and iOS applications using React
Native to extend the platform's reach to mobile-first users.
13. Expanded Coding Language Support: Add support for JavaScript, Go, Rust, and
Kotlin in the DSA coding terminal.
14. Dark Mode: Implement a full dark/light theme toggle using CSS custom properties
across all React components.
15. AI-Generated Questions: Integrate a language model API to dynamically generate
practice questions at specified difficulty levels for any topic, reducing reliance on
manual curation.
16. Instructor Portal: Build an admin and instructor portal allowing educators to create
and manage subjects, topics, questions, and playlists, and to view aggregate
student performance analytics.
17. Discussion Forum: Add a per-topic discussion forum where students can ask
questions and share solutions, fostering a community-driven learning environment.
18. Offline Support: Implement Progressive Web App (PWA) capabilities so that core
content and practice questions can be accessed offline.

REFERENCES

Department of Computer Science & Engineering Page 23


Skill Development and Learning System | Using React, Spring Boot & MySQL

[1] Khanna, R., Sharma, P., & Gupta, A. (2020). Adaptive Learning Systems: Impact of
Threshold-Based Recommendation on Student Retention. International Journal of
Educational Technology, 15(3), 112–128.

[2] Wang, L., Chen, H., & Li, Y. (2021). JWT-Based Stateless Authentication in Scalable
Web Applications: A Performance and Security Analysis. Journal of Software Engineering
and Applications, 14(2), 55–72.

[3] Singh, R., & Patel, M. (2022). Reducing Registration Friction in EdTech Platforms
Through OAuth 2.0 Social Login. Proceedings of the 2022 International Conference on
Web and Mobile Computing, 88–95.

[4] Walls, C. (2022). Spring Boot in Action (3rd ed.). Manning Publications.

[5] Banks, A., & Porcello, E. (2020). Learning React: Modern Patterns for Developing
React Apps (2nd ed.). O'Reilly Media.

[6] Razorpay Documentation. (2024). Payment Gateway Integration Guide.


[Link]

[7] Spring Security Reference Documentation. (2024). Spring Security 6.x.


[Link]

[8] Google Identity. (2024). Google Sign-In for Websites.


[Link]

[9] MySQL 8.0 Reference Manual. (2024). Oracle Corporation.


[Link]

[10] Fowler, M. (2002). Patterns of Enterprise Application Architecture. Addison-Wesley


Professional.

APPENDIX A — KEY API ENDPOINTS

Department of Computer Science & Engineering Page 24


Skill Development and Learning System | Using React, Spring Boot & MySQL

The following table lists the primary REST API endpoints exposed by the Spring Boot
backend:

Method & Endpoint Description Auth Required


POST /api/auth/register Register a new user No
POST /api/auth/login Login and receive JWT No
POST /api/auth/google- Google OAuth token No
login verification
GET Get user dashboard Yes
/api/dashboard/summary summary
GET /api/subjects List all subjects Yes
GET /api/topics/{subjectId} List topics for a subject Yes
GET /api/questions/{topicId} Get questions for a topic Yes
POST /api/practice/submit Submit practice session Yes
results
GET /api/recommendations Get user recommendations Yes
GET Get playlists for a topic Yes
/api/learning/playlists/{topicI
d}
POST /api/payment/create- Create Razorpay order Yes
order
POST /api/payment/verify Verify payment signature Yes
GET /api/profile Get user profile Yes
PUT /api/profile Update user profile Yes

APPENDIX B — BACKEND DEPENDENCIES


([Link] SUMMARY)

Dependency Purpose
spring-boot-starter-web REST API development with embedded Tomcat
spring-boot-starter-security Authentication and authorisation filters
spring-boot-starter-data-jpa ORM via Hibernate + Spring Data repositories
spring-boot-starter-validation Jakarta Bean Validation for request DTOs
spring-boot-starter-mail Email notifications (registration, password reset)

Department of Computer Science & Engineering Page 25


Skill Development and Learning System | Using React, Spring Boot & MySQL

mysql-connector-j JDBC driver for MySQL 8.0


jjwt-api / jjwt-impl / jjwt-jackson JWT generation, parsing, and validation
razorpay-java Razorpay SDK for order creation and payment
capture
google-api-client Google ID Token verification for OAuth
lombok Boilerplate reduction (@Getter, @Builder, etc.)
spring-boot-devtools Hot reload for development
spring-boot-starter-test JUnit 5, Mockito, Spring Test utilities

Department of Computer Science & Engineering Page 26

You might also like