| Version 2 (modified by , 8 days ago) ( diff ) |
|---|
Roadmap FINKI Documentation
Version Control
- Repository: GitHub
- Branching Strategy: Single branch development
- Project Root:
roadmap_finki/
Project Structure
roadmap_finki/ ├── app/ # PHP/Laravel application code ├── resources/ # Frontend (Blade templates) ├── database/ # Database migrations and seeders ├── routes/ # Application routing ├── bootstrap/ # Application initialization ├── config/ # Configuration files ├── storage/ # File storage and logs ├── tests/ # Test suite ├── public/ # Public assets (CSS, JS, images) └── vendor/ # Composer dependencies
Data Models
User.php
Manages user profiles and authentication.
- Relationships:
progress()- HasMany → UserProgress
- Methods:
role()- Returns user roleisAdmin()- Checks admin privileges
UserProgress.php
Tracks student progress through subjects (completed/in-progress).
- Fillable Attributes:
user_id- Foreign key to users tablesubject_id- Foreign key to subjects tablestudy_program_id- Foreign key to study programscareer_path_id- Foreign key to career paths (nullable)status- Enum:'completed'|'in_progress'completed_at- Timestamp (nullable)
- Relationships:
user()- BelongsTo Usersubject()- BelongsTo SubjectstudyProgram()- BelongsTo StudyProgramcareerPath()- BelongsTo CareerPath
Subject.php
Represents academic subjects/courses.
- Attributes:
code- Unique identifier (e.g., F23L3W004)name- English namename_mk- Macedonian nameyear- Academic year (1-4)semester_type- Enum:'winter'|'summer'subject_type- Enum:'mandatory'|'elective'credits- ECTS creditsdescription,instructors,hours- Additional metadata
- Relationships:
prerequisites()- BelongsToMany (self-referencing)requiredBy()- BelongsToMany (inverse prerequisites)studyPrograms()- BelongsToMany StudyProgramcareerPaths()- BelongsToMany CareerPathuserProgress()- HasMany UserProgress
- Methods:
getSemesterTypeFromCode()- Extracts W/S from subject codehasPrerequisitesMet()- Validates prerequisite completiongetDisplayName()- Returns formatted "CODE - NAME"
StudyProgram.php
Represents academic study programs (e.g., Computer Science 4-year).
- Attributes:
name_mk- Macedonian namename_en- English namecode- Unique identifierduration_years- Program duration (1-6 years)cycle- Enum:'first'|'second'
- Relationships:
subjects()- BelongsToMany Subject- Pivot fields:
order,type,year,semester_type
- Pivot fields:
userProgress()- HasMany UserProgress
- Methods:
getMandatorySubjects()- Returns only mandatory subjectsgetElectiveSubjects()- Returns only elective subjectsgetDisplayName()- Returns formatted "NAME (N years)"
CareerPath.php
Represents career specialization paths (e.g., Full Stack, Data Science).
- Attributes:
name- Career path namedescription- Detailed description
- Relationships:
subjects()- BelongsToMany Subject- Pivot table:
career_path_subject
- Pivot table:
- Methods:
getIcon()- Returns icon for display
Database Schema
Core Tables
users
├── id (PK) ├── name ├── email ├── password ├── role (enum: 'admin', 'user') ├── created_at ├── updated_at └── → hasMany(user_progress)
subjects
├── id (PK)
├── code (unique)
├── name
├── name_mk
├── year (1-4)
├── semester_type (winter/summer)
├── subject_type (mandatory/elective)
├── credits
├── description
├── instructors
├── hours
└── → belongsToMany(subject_prerequisites, study_programs, career_paths)
→ hasMany(user_progress)
study_programs
├── id (PK)
├── code (unique)
├── name_mk
├── name_en
├── duration_years
├── cycle (first/second)
├── description_mk
├── description_en
└── → belongsToMany(subjects)
→ hasMany(user_progress)
career_paths
├── id (PK) ├── name ├── description └── → belongsToMany(subjects)
user_progress
├── id (PK) ├── user_id (FK → users) ├── subject_id (FK → subjects) ├── study_program_id (FK → study_programs) ├── career_path_id (FK → career_paths, nullable) ├── status (enum: 'completed', 'in_progress') ├── completed_at (timestamp, nullable) └── → belongsTo(user, subject, study_program, career_path)
Pivot Tables
subject_prerequisites
Self-referencing table for subject dependencies.
├── subject_id (FK → subjects) └── prerequisite_id (FK → subjects)
study_program_subject
Links study programs to subjects with additional metadata.
├── id (PK) ├── study_program_id (FK → study_programs) ├── subject_id (FK → subjects) ├── type (mandatory/elective) ├── year ├── semester_type ├── order └── timestamps
career_path_subject
Links career paths to relevant subjects.
├── career_path_id (FK → career_paths) └── subject_id (FK → subjects)
Controllers
RoadmapController.php
Primary controller for roadmap generation logic.
create()- Display roadmap creation formstore()- Save user selections and generate roadmapshow()- Display generated roadmapgetSubjectsByProgram()- AJAX endpoint for dynamic subject loadinggenerateRoadmap()- Private: Generate sorted subject listgenerateSemesterRoadmap()- Private: Organize subjects by year/semester
SubjectController.php
Standard resource controller for subject management (Admin only).
index()- List subjects with search functionalitycreate()- Display subject creation formstore()- Save new subjectshow()- Display subject detailsedit()- Display subject edit formupdate()- Update existing subjectdestroy()- Delete subject
StudyProgramController.php
Standard resource controller for study program management (Admin only).
index()- List programs with search functionalitycreate()- Display program creation formstore()- Save new program with subjectsshow()- Display program detailsedit()- Display program edit formupdate()- Update existing program with subjectsdestroy()- Delete program
ProfileController.php
Manages user profile operations.
edit()- Display profile edit formupdate()- Update profile informationdestroy()- Delete user account
Middleware
- Authenticate.php - Verifies user authentication
- Admin.php - Verifies admin privileges for protected routes
Request Validation
- StoreSubjectRequest.php - Validation rules for subject creation and updates
- StudyProgramRequest.php - Validation rules for study program operations
Views
roadmap/create.blade.php
Two-step roadmap creation form.
Step 1: Program and Career Path Selection
- Select study program from dropdown
- Select career path (optional)
- AJAX dynamic loading of subjects based on selection
Step 2: Progress Selection
- Mark completed subjects
- Mark in-progress subjects
- Search/filter subjects
- Subjects organized by academic year
- JavaScript for form handling and validation
roadmap/show.blade.php
Displays generated personalized roadmap.
Components:
- Header - Selected program and career path
- Progress Summary - Four summary cards with statistics
- ECTS Progress Bar - Visual progress indicator
- Semester-by-Semester Roadmap
- Organized by academic year
- Winter and summer semesters
- Subject status indicators (completed/blocked/available)
- Recommended Next Steps
- Available subjects (green) - prerequisites met
- Blocked subjects (red) - prerequisites not met
- Completed Subjects List
- In-Progress Subjects List
Application Routes
web.php
Main application routes.
GET / → Welcome page
GET /dashboard → User dashboard
GET /roadmap/create → RoadmapController@create
POST /roadmap → RoadmapController@store
GET /roadmap → RoadmapController@show
GET /api/study-program/{id}/subjects → RoadmapController@getSubjectsByProgram
Admin Routes (require admin middleware):
resource /subjects → SubjectController resource /study-programs → StudyProgramController
User Routes:
resource /profile → ProfileController
auth.php
Authentication routes.
- User registration
- User login/logout
- Password reset
- Email verification
Key Features
- Prerequisite Tracking - Automatic validation of subject prerequisites
- Progress Visualization - Visual representation of academic progress
- Career Path Integration - Tailored recommendations based on career goals
- ECTS Credit Tracking - Monitor credit completion toward degree requirements
- Semester Planning - Organized view of subjects by semester
- Admin Dashboard - Full CRUD operations for subjects and programs
- AJAX Integration - Dynamic form updates without page refresh
Technical Stack
- Backend: PHP with Laravel framework
- Frontend: Blade templating engine
- Database: Relational database (MySQL/PostgreSQL)
- JavaScript: For dynamic interactions and AJAX
- CSS: For styling and responsive design
Access Control
- Public Access: Welcome page, registration, login
- Authenticated Users: Dashboard, roadmap creation/viewing, profile management
- Admin Users: All user features plus subject/program management
For more information, please contact the development team or refer to the project repository.
