wiki:SouceVersionControlOrganizationRevised

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:
  • Methods:
    • role() - Returns user role
    • isAdmin() - Checks admin privileges

UserProgress.php

Tracks student progress through subjects (completed/in-progress).

  • Fillable Attributes:
    • user_id - Foreign key to users table
    • subject_id - Foreign key to subjects table
    • study_program_id - Foreign key to study programs
    • career_path_id - Foreign key to career paths (nullable)
    • status - Enum: 'completed' | 'in_progress'
    • completed_at - Timestamp (nullable)
  • Relationships:

Subject.php

Represents academic subjects/courses.

  • Attributes:
    • code - Unique identifier (e.g., F23L3W004)
    • name - English name
    • name_mk - Macedonian name
    • year - Academic year (1-4)
    • semester_type - Enum: 'winter' | 'summer'
    • subject_type - Enum: 'mandatory' | 'elective'
    • credits - ECTS credits
    • description, instructors, hours - Additional metadata
  • Relationships:
  • Methods:
    • getSemesterTypeFromCode() - Extracts W/S from subject code
    • hasPrerequisitesMet() - Validates prerequisite completion
    • getDisplayName() - Returns formatted "CODE - NAME"

StudyProgram.php

Represents academic study programs (e.g., Computer Science 4-year).

  • Attributes:
    • name_mk - Macedonian name
    • name_en - English name
    • code - Unique identifier
    • duration_years - Program duration (1-6 years)
    • cycle - Enum: 'first' | 'second'
  • Relationships:
  • Methods:
    • getMandatorySubjects() - Returns only mandatory subjects
    • getElectiveSubjects() - Returns only elective subjects
    • getDisplayName() - Returns formatted "NAME (N years)"

CareerPath.php

Represents career specialization paths (e.g., Full Stack, Data Science).

  • Attributes:
    • name - Career path name
    • description - Detailed description
  • Relationships:
    • subjects() - BelongsToMany Subject
      • Pivot table: career_path_subject
  • 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 form
  • store() - Save user selections and generate roadmap
  • show() - Display generated roadmap
  • getSubjectsByProgram() - AJAX endpoint for dynamic subject loading
  • generateRoadmap() - Private: Generate sorted subject list
  • generateSemesterRoadmap() - Private: Organize subjects by year/semester

SubjectController.php

Standard resource controller for subject management (Admin only).

  • index() - List subjects with search functionality
  • create() - Display subject creation form
  • store() - Save new subject
  • show() - Display subject details
  • edit() - Display subject edit form
  • update() - Update existing subject
  • destroy() - Delete subject

StudyProgramController.php

Standard resource controller for study program management (Admin only).

  • index() - List programs with search functionality
  • create() - Display program creation form
  • store() - Save new program with subjects
  • show() - Display program details
  • edit() - Display program edit form
  • update() - Update existing program with subjects
  • destroy() - Delete program

ProfileController.php

Manages user profile operations.

  • edit() - Display profile edit form
  • update() - Update profile information
  • destroy() - Delete user account

Middleware

  • Authenticate.php - Verifies user authentication
  • Admin.php - Verifies admin privileges for protected routes

Request Validation


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

  1. Prerequisite Tracking - Automatic validation of subject prerequisites
  2. Progress Visualization - Visual representation of academic progress
  3. Career Path Integration - Tailored recommendations based on career goals
  4. ECTS Credit Tracking - Monitor credit completion toward degree requirements
  5. Semester Planning - Organized view of subjects by semester
  6. Admin Dashboard - Full CRUD operations for subjects and programs
  7. 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.

Last modified 8 days ago Last modified on 01/07/26 19:17:58
Note: See TracWiki for help on using the wiki.