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 курсу.
- Після змін — викликає updateCurrentLessonForAll щоб переоцінити