MCPcopy Index your code
hub / github.com/Lithemba352/AI-Personalized-Learning

github.com/Lithemba352/AI-Personalized-Learning @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
143 symbols 306 edges 56 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

SmartLearn: AI-Powered Personalized Learning Platform

Description

An AI-driven platform that personalizes learning experiences by adapting to individual student needs, tracking progress, and providing actionable insights.

Language and Design Decisions

Java was selected for this project because it aligns well with object-oriented principles and offers robust support for implementing creational design patterns. I personally chose Java because I am more comfortable using it, which made it easier to focus on applying the patterns correctly.

All six major creational patterns were applied using only the classes present in the UML Class Diagram, ensuring a clean, pattern-focused structure. The patterns were separated into individual packages under creational_patterns/ for clarity and maintainability. Unit testing was done using JUnit 5, and validation was added to the builder pattern to avoid incomplete object construction.

Abstraction Mechanism: Factory Pattern

For the storage abstraction, the Factory Pattern was chosen over full Dependency Injection (DI).

The RepositoryFactory located inside the /factories directory handles the creation of different repository implementations based on the selected storage type (e.g., In-Memory, FileSystem, or Database). This approach provides a simple, centralized way to switch storage mechanisms without modifying business logic.

The Factory pattern was selected because: - It keeps the system lightweight and simple. - It avoids unnecessary complexity for a project of this size. - It easily supports future storage expansions (like adding database repositories). - It maintains separation of concerns by decoupling object creation from usage.

In larger, enterprise systems, a full DI framework (e.g., Spring) would be more appropriate, but for this project scope, a Factory offers clean, sufficient abstraction.

Justification of generic repository interface

Why use a generic a generic Repository interface

I created a reusable interface for basic CRUD (create, read, update, delete) operations. This interface makes it easier to work with different data types and test without relying on a specific database.

Running Tests Locally

cd AI_Personalised_Learning_Project mvn clean test - if you would like to view test coverage run :mvn jacoco:report

CI/CD Pipeline Overview

The project uses GitHub Actions for Continuous Integration and Continuous Deployment:

Continuous Integration (CI)

On every push or pull request, the workflow: - Checks out the repository code. - Sets up Java 17 using Temurin. - Caches Maven dependencies to speed up builds. - Runs mvn clean verify to compile, test, and verify the project. - Pull Requests are blocked if tests fail. This ensures only passing code can be merged into main.

Continuous Deployment (CD)

When code is merged into the main branch: - The project is built using Maven to produce a .jar file. - The .jar file is uploaded as a release artifact using the upload-artifact GitHub Action. - This artifact can then be used for deployment or manual download. - This setup ensures reliable, test-verified builds are available on each main release.

Getting Started

Prerequisites

  • Java 17 (Temurin)
  • Maven
  • Git

Setup

git clone https://github.com/your-username/AI_Personalised_Learning_Project.git
cd AI_Personalised_Learning_Project
mvn clean install

🪪 License

This project is licensed under the MIT License. See the LICENSE file for more information.

Links

Extension points exported contracts — how you extend this code

Repository (Interface)
(no doc) [6 implementers]
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/Repository.java
UserRepository (Interface)
(no doc) [6 implementers]
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/UserRepository.java
ReportRepository (Interface)
(no doc) [2 implementers]
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/ReportRepository.java
LearningProgressRepository (Interface)
(no doc) [2 implementers]
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/LearningProgressRepository.java
RecommendationRepository (Interface)
(no doc) [2 implementers]
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/RecommendationRepository.java

Core symbols most depended-on inside this repo

save
called by 6
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/Repository.java
getInstance
called by 6
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/singleton/LearningProgress.java
status
called by 5
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/builder/Enrollment.java
build
called by 5
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/builder/Enrollment.java
getEmail
called by 3
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/abstractfactory/User.java
getPassword
called by 3
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/abstractfactory/User.java
getStatus
called by 3
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/factorymethod/Course.java
enrollmentId
called by 3
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/builder/Enrollment.java

Shape

Method 104
Class 30
Interface 8
Enum 1

Languages

Java100%

Modules by API surface

AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/builder/Enrollment.java14 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/factorymethod/Course.java9 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/prototype/Recommendation.java8 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/abstractfactory/User.java8 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/creational_patterns/simplefactory/Report.java6 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/services/UserService.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/inmemory/InMemoryReportRepository.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/inmemory/InMemoryRecommendationRepository.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/inmemory/InMemoryLearningProgressRepository.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/filesystem/FileSystemReportRepository.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/filesystem/FileSystemRecommendationRepository.java5 symbols
AI_Personalised_Learning_Project/src/main/java/aipersonalisedlearning/repository/filesystem/FileSystemLearningProgressRepository.java5 symbols

For agents

$ claude mcp add AI-Personalized-Learning \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact