Learnify is a Java-based e-learning platform developed as a multi-stage software engineering project. It models users, courses, enrollments, assessments, grading, certificates, reporting, and notifications while demonstrating object-oriented design, GoF design patterns, layered architecture, service-oriented design, and RESTful APIs.
The repository combines all project deliverables into one portfolio-ready Maven monorepo rather than treating each academic submission as a separate application.
- Implements 20 design-pattern cases across creational, structural, and behavioral families.
- Uses layered/MVC-style separation with controllers, domain objects, data access, services, and views.
- Includes a Spring Boot REST API for users, courses, enrollments, and a composite registration workflow.
- Documents the API with OpenAPI 3.0 and includes a Postman collection plus validation screenshots.
- Preserves architecture models, UML diagrams, and reports from all five project deliverables.
- Runs entirely with synthetic, in-memory data for safe and reproducible demonstrations.
flowchart LR
D1[Deliverable 1<br/>Creational Patterns]
D2[Deliverable 2<br/>Structural Patterns]
D3[Deliverable 3<br/>Behavioral Patterns]
D4[Deliverable 4<br/>Software Architecture]
D5[Deliverable 5<br/>Spring Boot REST API]
D1 --> D2 --> D3 --> D4 --> D5
flowchart TB
Client[Console / API Client / Postman]
Presentation[Views and REST Controllers]
Application[Controllers and Services]
Patterns[Pattern Workflows]
Domain[Domain Model]
Persistence[DAO / Repository Layer]
Store[(In-Memory Data Stores)]
Events[Singleton Event Hub]
Subscribers[Notification / Audit / Analytics]
Client --> Presentation
Presentation --> Application
Application --> Patterns
Application --> Domain
Patterns --> Domain
Application --> Persistence
Persistence --> Store
Patterns --> Events
Events --> Subscribers
A Java 17 console application that integrates the first three deliverables into one runnable demonstration.
Implemented pattern families:
| Family | Implementations |
|---|---|
| Creational | Singleton database/session, Factory Method user creation, Abstract Factory role UI/report exporters |
| Structural | Bridge notifications/pages, Adapter legacy services, Flyweight course styles, Decorator pages/report exports |
| Behavioral | Template Method reports/grading, Mediator registration/enrollment UI, Strategy recommendations/enrollment policy, Observer event hub, Iterator course catalog |
Run it with:
cd patterns-demo
mvn clean compile exec:javaA Spring Boot API that exposes reusable Learnify services through JSON endpoints.
| Resource | Main operations |
|---|---|
| Users | Create, list, retrieve, update, and delete learners, instructors, and admins |
| Courses | Create, list, retrieve, update, and delete course records |
| Enrollments | Create, list, retrieve, update, and delete learner-course relationships |
| Workflow | Register a learner and enroll them in a course through one coordinated request |
Run it with:
cd rest-api
mvn spring-boot:runThe service starts at http://localhost:8080.
Requirements:
- Java 17+
- Maven 3.9+
Build and test both modules:
mvn clean verifyRun the design-pattern demonstration:
mvn -pl patterns-demo compile exec:javaRun the REST API:
mvn -pl rest-api spring-boot:runThe seeded demo data creates an instructor and published courses at startup. To register a new learner and enroll them into course 1:
curl -X POST http://localhost:8080/api/workflows/register-and-enroll \
-H "Content-Type: application/json" \
-d '{
"name": "Sara Learner",
"email": "sara.learner@example.com",
"password": "learn123",
"level": "Intermediate",
"gpa": 3.5,
"courseId": 1
}'- Deliverable map
- Design-pattern UML diagrams
- Software architecture model
- Academic reports
- Architecture diagrams
- Java 17
- Spring Boot 3
- Maven
- REST APIs and JSON
- OpenAPI 3.0
- Postman
- JUnit 5
- UML / StarUML
- GitHub Actions
This is an educational architecture and design-pattern project, not a production LMS. It uses in-memory data stores and does not yet include authentication, authorization, a database, a browser frontend, or production password storage. See SECURITY.md for the most important hardening steps.
Learnify was developed as a team project for C-SW311 Software Design and Development by Ahmed Elkhateeb and Ahmed Sherif. The repository consolidates the staged deliverables into a single public portfolio structure while retaining the original reports and design artifacts.
Released under the MIT License.