course-service

CourseService

src/modules/course/course.service.ts

Бізнес-логіка курсів: списки, CRUD, додавання Trainee, перетягування модулів, content для Mentor/Trainee.

Перелік ендпоінтів і ролі — у Swagger. Тут — тільки бізнес-нюанси.

Нюанси

  • getAll — скоупинг: director отримує ВСІ курси; інша роль — тільки курси де він записаний як Mentor або Trainee (різні методи репозиторію — getAllCourses / getCoursesByUserId).
  • createUpdate:
    • Без courseId → новий документ.
    • При оновленні зі зміною avatar старий файл видаляється через file-service.
    • При видаленні Mentor з курсу — його Trainee автоматично знімаються (courseRepository.deleteTraineesWithoutMentors).
  • deleteCourse — каскад: lessons + modules + answers + сам курс.
  • addTrainee:
    • Mentor має бути в курсі. Trainee не може бути двічі.
    • currentLesson = перший урок першого модуля з modulePositions. Якщо курс порожній → null.
    • Виклик updateCurrentLesson для коректної переоцінки.
  • getMentorContent / getTraineeContent — дерево курсу під відповідного користувача. Mentor бачить усе (включно з isHidden); Trainee — тільки доступні уроки.
  • updateModulePositions:
    • Після змін — викликає updateCurrentLessonForAll щоб переоцінити currentLesson усіх Trainee курсу.