Courses

Глобальне меню → Courses

Суть

Внутрішня школа (stack-academy). Курси → модулі → уроки → відповіді. У кожному курсі юзер може виступати Mentor або Trainee.

Use cases

Director створює курси і призначає Mentors; Mentor додає та перевіряє прогрес своїх Trainees і оновлює контент уроків; Trainee проходить призначений курс після найму або переходу на нову роль.

Доступи

Конкретна StackRole не визначає UI напряму — все залежить від призначення на курсі. Зводиться до 3 типів доступу:

  • Directordirector (завжди повний доступ)
  • Mentors: hr, topManager, client_manager, supervisor
  • Trainees: client_manager, supervisor, operator
  • recruiter — НЕ має доступу academy UI; має тільки інформацію про участь оператора в курсах через картку кандидата

client_manager і supervisor можуть бути Mentor або Trainee, але тільки щось одне в одному курсі; client_manager — навіть на тому ж курсі одночасно.

#МожливістьDirectorMentorTrainee
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/uploadAvatarupload аватара курсу

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 — ім’я Mentor
  • Current lesson — назва поточного уроку
  • Last activity — дата останньої активності
  • StatusIn 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 у рядку → перевести в FinishedFinished назад заборонено)

Endpoints:

EndpointЩо робить
trainee/getAllсписок Trainee курсу (бек фільтрує по Mentor для не-director)
mentor/getByCourseMentors курсу (для Add trainee → вибір Mentor)
trainee/getFreeвільні Trainee (для Add trainee → вибір Trainee)
course/addTraineeдодати Trainee в курс
trainee/changeStatusперевести Trainee в Finished

5. Прогрес Trainee

Список усіх уроків Trainee. Відкривається з рядка в #4.

Колонки:

  • Module
  • Lesson
  • Sent for review — коли надіслано на перевірку
  • Checked — коли перевірено
  • StatusIn progress / Finished (editable dropdown)

Жовтий рядок = On moderation.

Дії:

  • зміна Status у рядку → ручний override (FinishedIn 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 модуля — назва, Hidden toggle
  • delete модуля (каскадно з уроками і відповідями)
  • + Lesson всередині модуля
  • клік на урок → перегляд контенту (#7); звідти кнопка Edit → редагування (#8)
  • drag&drop модулів — змінити порядок
  • drag&drop уроків у модулі — змінити порядок
  • перетягнути урок в інший модуль
  • Import lesson — модалка зі списком курсів → модулів → уроків, копіює обраний урок у поточний модуль
  • Hidden toggle над списком — фільтр прихованих

Дії в 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/updateModulePositionsreorder модулів
module/updateLessonPositionsreorder уроків у модулі
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 на наступний доступний
  • З тестом — відповідь на питання + SubmitOn 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 — прийняти відповіді → урок переходить у Finished
  • Reject — відхилити → відповідь видаляється, Trainee має перездати чисто (re-take)

Endpoints:

EndpointЩо робить
answer/checkAnswersперевірка з прапором `isCorrectly:true

Загальні нюанси

  • Каскади. Видалення курсу → модулі + уроки + відповіді. Видалення модуля → уроки + відповіді. Видалення уроку → відповіді.
  • Прогресія для Trainee. Уроки після поточного приховані до здачі. Не-тестові уроки (media / text / image) автоматично переходять у Finished після Submit; тестові — в On moderation до перевірки Mentor.
  • Mentor Role в settings — довідкова прив’язка курсу до ролі учасників, не плутати з роллю поточного юзера.

Зв’язки