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.