course

Course

src/modules/course/schemas/course.schemas.ts · колекція academy_courses

Головна сутність academy. Курс групує модулі, Mentors і Trainee.

Поля

  • name — назва курсу
  • avatar — URL аватара (зберігається через file-service — проксі на stack)
  • role: StackRoles — на яку роль курс розрахований. Визначає звідки беруться кандидати в Mentors і Trainee (через RMQ-запит у stack).
  • mentors[]: {mentorId, allowEdit} — Mentors курсу. allowEdit дає право редагувати модулі/уроки/контент.
  • trainees[]: {mentorId, traineeId, currentLesson, status} — Trainee з прив’язкою до Mentor, поточним уроком і статусом (In progress / Finished).
  • modulePositions: string[] — впорядкований список ID модулів (порядок у UI).

Нюанси

  • allowEdit критичний. Будь-яка write-операція не-director-ом перевіряє mentors.find(m => m.mentorId === user.id)?.allowEdit. Без allowEdit:true → помилка.
  • Каскади на видалення:
    • Курс → модулі + уроки + відповіді + сам курс
    • Видалення Mentor з курсу → його Trainee автоматично знімаються (courseRepository.deleteTraineesWithoutMentors)
    • User dropped через RMQ (AcademyDropUsers) → пройдуться по всіх курсах і знімаються
  • modulePositions — окремий масив порядку, не вкладеність. Зміна тригерить перерахунок currentLesson усіх Trainee через updateCurrentLessonForAll.
  • currentLesson — кешований у MentorTraineeLink, оновлюється автоматично після створення/видалення/переміщення уроків і модулів, після setAnswers/checkAnswers.