Courses
Глобальне меню → Courses
Суть
Внутрішня школа (stack-academy). Курси → модулі → уроки → відповіді. У кожному курсі юзер може виступати Mentor або Trainee.
Use cases
Director створює курси і призначає Mentors; Mentor додає та перевіряє прогрес своїх Trainees і оновлює контент уроків; Trainee проходить призначений курс після найму або переходу на нову роль.
Доступи
Конкретна StackRole не визначає UI напряму — все залежить від призначення на курсі. Зводиться до 3 типів доступу:
- Director —
director(завжди повний доступ) - Mentors:
hr,topManager,client_manager,supervisor - Trainees:
client_manager,supervisor,operator recruiter— НЕ має доступу academy UI; має тільки інформацію про участь оператора в курсах через картку кандидата
client_manager і supervisor можуть бути Mentor або Trainee, але тільки щось одне в одному курсі; client_manager — навіть на тому ж курсі одночасно.
| # | Можливість | Director | Mentor | Trainee |
|---|---|---|---|---|
| 1 | Список курсів | всі | де є учасником | де є учасником |
| 2 | Створення курсу | ✓ | — | — |
| 3 | Редагування курсу | ✓ | — | — |
| 4 | Список Trainees курсу | всі | своїх Trainees | — |
| 5 | Прогрес Trainee | ✓ | своїх Trainees | — |
| 6 | Структура курсу | перегляд та редагування | перегляд (з allowEdit — редагування) | доступних / завершених |
| 7 | Перегляд контенту уроку | ✓ | ✓ | доступних / завершених |
| 8 | Редагування уроку | ✓ | з allowEdit | — |
| 9 | Здача уроку (Submit) | — | — | ✓ |
| 10 | Перегляд відповідей | — | своїх Trainees | свої завершені |
| 11 | Перевірка відповідей Trainee (check screen) | — | своїх Trainees | — |
Деталі по можливостях
1. Список курсів
Стартова сторінка розділу. Сітка карток курсів, які бачить користувач.
Що на картці:
- назва курсу
- аватар (або плейсхолдер
No Image) - для Mentor-картки —
Trainees: N; для Trainee-картки —Status: In progress / Finished - посилання
Settings(тільки Director) - badge
MENTOR/TRAINEE(тільки на Mentor-картках, показує роль на цьому курсі)
Скоупинг:
- Director — всі курси
- Mentor — де він Mentor або Trainee
- Trainee — тільки де він Trainee
Дії:
+ Course(тільки Director) → створення курсу (#2)- клік на назву → структура курсу (#6)
- клік на
Trainees: N→ список Trainees (#4) - клік на
Settings→ редагування курсу (#3)
Endpoints:
| Endpoint | Що робить |
|---|---|
| course/getAll | список курсів (бек фільтрує за роллю користувача) |
2. Створення курсу
Відкривається кнопкою + Course зі списку курсів. Форма з даними нового курсу.
General Info:
Name*— обов’язковеMentor Role(dropdown:Teamlead/TOP-manager/Client-manager/Hr-manager) — визначає який тип юзерів може бути Mentor в цьому курсіAdd a new avatar— вибір файлу черезFileReader
Mentors таблиця:
Potential Mentors— список кандидатів (фільтрується заMentor Role)- toggle Mentor в курс
- toggle
allowEditдля нього (дозволяє редагувати модулі і уроки) - search по імені
Дії:
- зміна
Mentor Role→ перезавантажує кандидатів CREATE→ зберегти курс; якщо обрано аватар — окремий upload одразу після створенняReturn→ назад до списку курсів
Endpoints:
| Endpoint | Що робить |
|---|---|
| mentor/getFree | список вільних кандидатів за Mentor Role |
| course/update | створити (або оновити) курс |
| course/uploadAvatar | upload аватара курсу |
3. Редагування курсу
Той самий екран що створення з заповненими даними. Відкривається з посилання Settings на картці.
Що можна змінити:
Name- аватар
- склад Mentors (toggle)
allowEditдля кожного Mentor
Дії:
UPDATE→ зберегти зміниDelete course(з confirm) → каскадне видалення: курс + модулі + уроки + відповідіReturn→ назад до списку
Endpoints:
| Endpoint | Що робить |
|---|---|
| course/getById | завантажує курс для редагування |
| course/update | зберігає зміни |
| course/delete | каскадне видалення курсу |
4. Список Trainees курсу
Таблиця Trainee курсу. Відкривається з посилання Trainees на картці. Director бачить усіх; Mentor — тільки своїх (mentorId === user.id).
Колонки:
Trainee— ім’яMentor— ім’я MentorCurrent lesson— назва поточного урокуLast activity— дата останньої активностіStatus—In progress/Finished(editable dropdown у рядку)Edit— клік відкриває прогрес Trainee (#5)
Сортування: Trainee з Never activity — вгорі списку.
Локальні фільтри:
Search trainees— по імені- dropdown Mentor (default
All mentors) - dropdown статусу
Дії:
Add trainee— спочатку вибір Mentor зі списку Mentors курсу, потім вибір вільного Trainee,Save- зміна
Statusу рядку → перевести вFinished(зFinishedназад заборонено)
Endpoints:
| Endpoint | Що робить |
|---|---|
| trainee/getAll | список Trainee курсу (бек фільтрує по Mentor для не-director) |
| mentor/getByCourse | Mentors курсу (для Add trainee → вибір Mentor) |
| trainee/getFree | вільні Trainee (для Add trainee → вибір Trainee) |
| course/addTrainee | додати Trainee в курс |
| trainee/changeStatus | перевести Trainee в Finished |
5. Прогрес Trainee
Список усіх уроків Trainee. Відкривається з рядка в #4.
Колонки:
ModuleLessonSent for review— коли надіслано на перевіркуChecked— коли перевіреноStatus—In progress/Finished(editable dropdown)
Жовтий рядок = On moderation.
Дії:
- зміна
Statusу рядку → ручний override (Finished↔In progress) - клік на lesson title (з
answeredDate) → check screen (#11) — тільки Mentor
Endpoints:
| Endpoint | Що робить |
|---|---|
| lesson/getByTrainee | уроки Trainee з прогресом |
| lesson/changeStatus | ручна зміна статусу уроку |
6. Структура курсу
Дерево модулів і уроків — central screen для роботи з контентом курсу.
Скоупинг режимів:
- Director / Mentor з
allowEdit— повний CRUD (модулі, уроки, тести) - Mentor без
allowEdit— та сама структура, але view-only (видно іhidden) - Trainee — view-only progressive: тільки
isHidden:false, наступні уроки приховані до здачі поточного
Дії в edit-режимі:
+ Module— створити модуль (в кінець)- edit модуля — назва,
Hiddentoggle - delete модуля (каскадно з уроками і відповідями)
+ Lessonвсередині модуля- клік на урок → перегляд контенту (#7); звідти кнопка
Edit→ редагування (#8) - drag&drop модулів — змінити порядок
- drag&drop уроків у модулі — змінити порядок
- перетягнути урок в інший модуль
Import lesson— модалка зі списком курсів → модулів → уроків, копіює обраний урок у поточний модульHiddentoggle над списком — фільтр прихованих
Дії в Trainee-режимі:
Search lessons— пошук по назві уроку- клік на доступний урок → перегляд контенту (#7) і можливість здати (#9)
- клік на завершений урок → перегляд контенту + своїх відповідей (#10)
Endpoints:
| Endpoint | Що робить |
|---|---|
| course/getMentorContent | дерево для Director / Mentor (з прихованими) |
| course/getTraineeContent | дерево для Trainee (з прогресією, без прихованих) |
| mentor/getEditingAccess | перевірка allowEdit для не-director |
| module/create | новий модуль |
| module/update | оновити модуль (назва, Hidden) |
| module/delete | видалити модуль (каскадно) |
| lesson/create | новий урок у модулі |
| course/updateModulePositions | reorder модулів |
| module/updateLessonPositions | reorder уроків у модулі |
| lesson/changeModuleInLesson | перенести урок у інший модуль |
| lesson/lessonsToImport | список уроків для імпорту |
| lesson/copy | копіювання (імпорт) уроку |
7. Перегляд контенту уроку
Звідки: клік на урок у дереві (#6)
Read-only перегляд уроку у правій частині modules screen — текст, картинки, відео, тестові питання. Однаково для всіх ролей.
Додатково:
- Director / Mentor (з
allowEdit) — біля уроку кнопкаEdit→ переходить на сторінку редагування (#8) на повний екран - Trainee на завершеному уроці — підвантажуються свої відповіді (#10)
Endpoints:
| Endpoint | Що робить |
|---|---|
| lesson/getById | контент уроку |
| answer/getById | відповіді Trainee (тільки для completed) |
8. Редагування уроку
Звідки: кнопка
Editу #7 (тільки Director і Mentor зallowEdit)
Окрема сторінка редагування уроку на повний екран.
Поля:
Name— назва урокуHidden(Yes/No) — приховати від Trainee- TinyMCE для контенту — текст, форматування, картинки, відео, посилання
- блок тестів — питання (тип
One of the list), варіанти відповідей, картинки до питання і опцій
Дії:
UPDATE→ зберегти всі зміни урокуDelete lesson(з confirm) → каскадне видалення уроку + відповідейReturn→ назад до структури курсу
Endpoints:
| Endpoint | Що робить |
|---|---|
| lesson/update | зберігає зміни уроку |
| lesson/delete | каскадне видалення уроку |
9. Здача уроку
Звідки: доступний урок у #6 Trainee-режимі
Trainee натискає Submit після проходження уроку.
Поведінка по типу уроку:
- Без тесту (
media/text/image) — checkboxВиконано+Submit→ одразуFinished, перерахунокcurrentLessonна наступний доступний - З тестом — відповідь на питання +
Submit→On moderation, чекає перевірки Mentor (#11)
Кнопка Next lesson після Submit веде до наступного доступного уроку.
Endpoints:
| Endpoint | Що робить |
|---|---|
| answer/setAnswers | створює Answer для пари (lessonId, traineeId), повторна здача того ж уроку заборонена |
10. Перегляд відповідей
Раніше надані відповіді на завершений урок.
Звідки відкривається:
- Trainee — клік на завершений урок у структурі курсу (#6), відображається разом з контентом уроку (#7)
- Mentor — через прогрес Trainee (#5), клік на назву уроку → check screen (#11) показує і відповіді, і контент
Endpoints:
| Endpoint | Що робить |
|---|---|
| lesson/getById | контент уроку |
| answer/getById | збережені відповіді |
11. Перевірка відповідей Trainee
Звідки: з #5 кліком на урок зі статусом
On moderation
Окремий екран — check screen, де Mentor перевіряє тестові відповіді Trainee.
Що видно:
- контент уроку (питання, опції)
- відповіді Trainee
Дії:
Confirm— прийняти відповіді → урок переходить уFinishedReject— відхилити → відповідь видаляється, Trainee має перездати чисто (re-take)
Endpoints:
| Endpoint | Що робить |
|---|---|
| answer/checkAnswers | перевірка з прапором `isCorrectly:true |
Загальні нюанси
- Каскади. Видалення курсу → модулі + уроки + відповіді. Видалення модуля → уроки + відповіді. Видалення уроку → відповіді.
- Прогресія для Trainee. Уроки після поточного приховані до здачі. Не-тестові уроки (
media/text/image) автоматично переходять уFinishedпісляSubmit; тестові — вOn moderationдо перевірки Mentor. Mentor Roleв settings — довідкова прив’язка курсу до ролі учасників, не плутати з роллю поточного юзера.
Зв’язки
- Бек огляд: stack-academy документація · Swagger UI