| | 1 | == SouceVersionControlOrganizationRevised |
| | 2 | За Контрола на верзиите на изворниот код користевме Github. Работевме на еден branch. |
| | 3 | |
| | 4 | == Структура == |
| | 5 | roadmap_finki/ |
| | 6 | ├── app/ # PHP/Laravel код |
| | 7 | ├── resources/ # Frontend (Blade templates) |
| | 8 | ├── database/ # Миграции и seeders |
| | 9 | ├── routes/ # Рутирање |
| | 10 | ├── bootstrap/ # Иницијализација |
| | 11 | ├── config/ # Конфигурација |
| | 12 | ├── storage/ # Датотеки и логови |
| | 13 | ├── tests/ # Тестирање |
| | 14 | ├── public/ # Јавни датотеки (CSS, JS, слики) |
| | 15 | └── vendor/ # Зависности (Composer) |
| | 16 | |
| | 17 | == Модели == |
| | 18 | Models/ |
| | 19 | ├── User.php # Кориснички профил |
| | 20 | │ ├── relationships: |
| | 21 | │ │ └── progress() # HasMany → UserProgress |
| | 22 | │ └── methods: |
| | 23 | │ └── role(), isAdmin() |
| | 24 | │ |
| | 25 | ├── UserProgress.php # Напредок на корисник (завршени/во прогрес предмети) |
| | 26 | │ ├── fillable: |
| | 27 | │ │ ├── user_id |
| | 28 | │ │ ├── subject_id |
| | 29 | │ │ ├── study_program_id |
| | 30 | │ │ ├── career_path_id |
| | 31 | │ │ ├── status # 'completed' | 'in_progress' |
| | 32 | │ │ └── completed_at |
| | 33 | │ └── relationships: |
| | 34 | │ ├── user() # BelongsTo |
| | 35 | │ ├── subject() # BelongsTo |
| | 36 | │ ├── studyProgram() # BelongsTo |
| | 37 | │ └── careerPath() # BelongsTo |
| | 38 | │ |
| | 39 | ├── Subject.php # Предмет/Курс |
| | 40 | │ ├── attributes: |
| | 41 | │ │ ├── code # Уникален код (F23L3W004) |
| | 42 | │ │ ├── name # Англиско име |
| | 43 | │ │ ├── name_mk # Македонско име |
| | 44 | │ │ ├── year # 1-4 година |
| | 45 | │ │ ├── semester_type # 'winter' | 'summer' |
| | 46 | │ │ ├── subject_type # 'mandatory' | 'elective' |
| | 47 | │ │ ├── credits # ECTS кредити |
| | 48 | │ │ └── description, instructors, hours |
| | 49 | │ ├── relationships: |
| | 50 | │ │ ├── prerequisites() # BelongsToMany (self-referencing) |
| | 51 | │ │ ├── requiredBy() # BelongsToMany (inverse) |
| | 52 | │ │ ├── studyPrograms() # BelongsToMany |
| | 53 | │ │ ├── careerPaths() # BelongsToMany |
| | 54 | │ │ └── userProgress() # HasMany |
| | 55 | │ └── methods: |
| | 56 | │ ├── getSemesterTypeFromCode() # Извлече W/S од код |
| | 57 | │ ├── hasPrerequisitesMet() # Проверка на предуслови |
| | 58 | │ └── getDisplayName() # "CODE - NAME" |
| | 59 | │ |
| | 60 | ├── StudyProgram.php # Студиска програма (Computer Science 4-year) |
| | 61 | │ ├── attributes: |
| | 62 | │ │ ├── name_mk # Македонско име |
| | 63 | │ │ ├── name_en # Англиско име |
| | 64 | │ │ ├── code # Уникален код |
| | 65 | │ │ ├── duration_years # 1-6 години |
| | 66 | │ │ └── cycle # 'first' | 'second' |
| | 67 | │ ├── relationships: |
| | 68 | │ │ ├── subjects() # BelongsToMany |
| | 69 | │ │ │ └── pivot: order, type, year, semester_type |
| | 70 | │ │ └── userProgress() # HasMany |
| | 71 | │ └── methods: |
| | 72 | │ ├── getMandatorySubjects() # Само задолжителни |
| | 73 | │ ├── getElectiveSubjects() # Само изборни |
| | 74 | │ └── getDisplayName() # "NAME (N години)" |
| | 75 | │ |
| | 76 | └── CareerPath.php # Каријерна патека (Full Stack, Data Science, итн.) |
| | 77 | ├── attributes: |
| | 78 | │ ├── name # Име на патека |
| | 79 | │ └── description |
| | 80 | ├── relationships: |
| | 81 | │ └── subjects() # BelongsToMany |
| | 82 | │ └── pivot: career_path_subject |
| | 83 | └── methods: |
| | 84 | └── getIcon() # Икона за приказ |
| | 85 | |
| | 86 | |
| | 87 | == Табели во база == |
| | 88 | users |
| | 89 | ├── id, name, email, password |
| | 90 | ├── role (enum: 'admin', 'user') |
| | 91 | ├── created_at, updated_at |
| | 92 | └── → hasMany(user_progress) |
| | 93 | |
| | 94 | user_progress |
| | 95 | ├── id, user_id (FK), subject_id (FK) |
| | 96 | ├── study_program_id (FK), career_path_id (FK, nullable) |
| | 97 | ├── status (enum: 'completed', 'in_progress') |
| | 98 | ├── completed_at (timestamp, nullable) |
| | 99 | └── → belongsTo(user, subject, study_program, career_path) |
| | 100 | |
| | 101 | subjects |
| | 102 | ├── id, code (unique), name, name_mk |
| | 103 | ├── year (1-4), semester_type, subject_type |
| | 104 | ├── credits, description, instructions, hours |
| | 105 | └── → belongsToMany(subject_prerequisites) |
| | 106 | → belongsToMany(study_programs, career_paths) |
| | 107 | → hasMany(user_progress) |
| | 108 | |
| | 109 | subject_prerequisites |
| | 110 | ├── subject_id (FK) → pivot table |
| | 111 | └── prerequisite_id (FK) |
| | 112 | |
| | 113 | study_programs |
| | 114 | ├── id, code (unique), name_mk, name_en |
| | 115 | ├── duration_years, cycle, description_mk, description_en |
| | 116 | └── → belongsToMany(subjects) |
| | 117 | → hasMany(user_progress) |
| | 118 | |
| | 119 | study_program_subject (Pivot Table) |
| | 120 | ├── id, study_program_id (FK), subject_id (FK) |
| | 121 | ├── type (mandatory/elective) |
| | 122 | ├── year, semester_type |
| | 123 | ├── order, timestamps |
| | 124 | |
| | 125 | career_paths |
| | 126 | ├── id, name, description |
| | 127 | └── → belongsToMany(subjects) |
| | 128 | |
| | 129 | career_path_subject (Pivot Table) |
| | 130 | ├── career_path_id (FK) |
| | 131 | └── subject_id (FK) |
| | 132 | |
| | 133 | |
| | 134 | == Контролери == |
| | 135 | |
| | 136 | Controllers/ |
| | 137 | ├── RoadmapController.php # Главна логика за roadmap генерирање |
| | 138 | │ ├── create() # Приказ на форма за создание |
| | 139 | │ ├── store() # Зачувување на избори и генерирање |
| | 140 | │ ├── show() # Приказ на зачуван roadmap |
| | 141 | │ ├── getSubjectsByProgram() # AJAX - предмети по програма |
| | 142 | │ ├── generateRoadmap() # Приватна: сортирана листа |
| | 143 | │ └── generateSemesterRoadmap() # Приватна: по години/семестри |
| | 144 | │ |
| | 145 | ├── SubjectController.php # CRUD за предметите (Admin) |
| | 146 | │ ├── index() # Листа со пребарување |
| | 147 | │ ├── create() # Форма за создание |
| | 148 | │ ├── store() # Зачувување на предмет |
| | 149 | │ ├── show() # Преглед |
| | 150 | │ ├── edit() # Форма за уредување |
| | 151 | │ ├── update() # Ажурирање |
| | 152 | │ └── destroy() # Бришење |
| | 153 | │ |
| | 154 | ├── StudyProgramController.php # CRUD за студиски програми (Admin) |
| | 155 | │ ├── index() # Листа со пребарување |
| | 156 | │ ├── create() # Форма за создание |
| | 157 | │ ├── store() # Зачувување со предметите |
| | 158 | │ ├── show() # Преглед со детали |
| | 159 | │ ├── edit() # Форма за уредување |
| | 160 | │ ├── update() # Ажурирање со предметите |
| | 161 | │ └── destroy() # Бришење |
| | 162 | │ |
| | 163 | ├── ProfileController.php # Корисничкиот профил |
| | 164 | │ ├── edit() |
| | 165 | │ ├── update() |
| | 166 | │ └── destroy() |
| | 167 | │ |
| | 168 | └── (Others: AuthController, DashboardController, итн.) |
| | 169 | |
| | 170 | == Middleware == |
| | 171 | |
| | 172 | Middleware/ |
| | 173 | ├── Authenticate.php # Логирана проверка |
| | 174 | ├── Admin.php # Админ верификација |
| | 175 | └── (Others) |
| | 176 | |
| | 177 | == Requests == |
| | 178 | |
| | 179 | |
| | 180 | Requests/ |
| | 181 | ├── StoreSubjectRequest.php # Валидација за Subject create/update |
| | 182 | ├── StudyProgramRequest.php # Валидација за StudyProgram |
| | 183 | └── (Others) |
| | 184 | |
| | 185 | == Views == |
| | 186 | |
| | 187 | views/roadmap/ |
| | 188 | ├── create.blade.php # Форма за создание на roadmap |
| | 189 | │ ├── Step 1: Избор програма и каријерна патека |
| | 190 | │ ├── AJAX: Динамичко вчитување на предмети |
| | 191 | │ ├── Step 2: Избор завршени/во прогрес предмети |
| | 192 | │ ├── Пребарување предмети |
| | 193 | │ ├── Организирани по години |
| | 194 | │ └── JavaScript за обработка |
| | 195 | │ |
| | 196 | └── show.blade.php # Приказ на генериран roadmap |
| | 197 | ├── Header: Програма и патека |
| | 198 | ├── Progress Summary: 4 картички |
| | 199 | ├── ECTS Progress Bar: Визуелен напредок |
| | 200 | ├── Semester-by-Semester Roadmap: |
| | 201 | │ ├── За секоја година: |
| | 202 | │ │ ├── Зимски семестар |
| | 203 | │ │ └─ Летен семестар |
| | 204 | │ └── За секој предмет: готово/блокирано |
| | 205 | ├── Препорачани следни чекори: |
| | 206 | │ ├─ Готови за запишување (зелено) |
| | 207 | │ └─ Блокирани (црвено) |
| | 208 | ├── Завршени предмети |
| | 209 | └─ Во прогрес предмети |
| | 210 | |
| | 211 | |
| | 212 | |
| | 213 | == Рути во апликацијата == |
| | 214 | |
| | 215 | |
| | 216 | routes/ |
| | 217 | ├── web.php # Главни рути |
| | 218 | │ ├── GET / → Welcome |
| | 219 | │ ├── GET /dashboard → Dashboard |
| | 220 | │ ├── GET /roadmap/create → RoadmapController@create |
| | 221 | │ ├── POST /roadmap → RoadmapController@store |
| | 222 | │ ├── GET /roadmap → RoadmapController@show |
| | 223 | │ ├── GET /api/study-program/{id}/subjects → RoadmapController@getSubjectsByProgram |
| | 224 | │ ├── resource /subjects → SubjectController (админ) |
| | 225 | │ ├── resource /study-programs → StudyProgramController (админ) |
| | 226 | │ └── (Others: profile, auth) |
| | 227 | │ |
| | 228 | ├── auth.php # Автентицирани рути |
| | 229 | │ ├── Регистрирање |
| | 230 | │ ├── Логирање |
| | 231 | │ ├── Password reset |
| | 232 | │ └── Email verification |
| | 233 | │ |
| | 234 | |