Skip to content

feat(CoursesService): extract CourseMentor model - #701

Open
AndyBarnv wants to merge 6 commits into
InteIIigeNET:masterfrom
AndyBarnv:feature/extract-mentor-model
Open

AndyBarnv wants to merge 6 commits into
InteIIigeNET:masterfrom
AndyBarnv:feature/extract-mentor-model

Conversation

@AndyBarnv

Copy link
Copy Markdown

Что сделано

Вынесены преподаватели курса из строки Course.MentorIds (где ID шли через /) в отдельную доменную сущность CourseMentor (таблица CourseMentors, составной ПК UserId + CourseId).


Принципиальные решения

  • Оптимизация БД: Запросы ментора переведены с тяжелого LIKE по строке на эффективный EXISTS по индексируемому UserId (FK на контекст курса).
  • Сохранение обратной совместимости:
    • Контракт API полностью сохранён: CourseDTO.MentorIds (string[]) не менялся. Гейтвей и фронтенд работают без правок.
    • События RabbitMQ (NewCourseMateEvent, LecturerAccept/RejectToCourseEvent) продолжают слать string. Сборка string.Join("/", ...) происходит под капотом CoursesService, подписчики (например, NotificationService) не затронуты.
  • Миграции:
    • AddCourseMentorTable — backfill-миграция, которая переносит исторические значения MentorIds в новую таблицу (с помощью STRING_SPLIT по /).
    • DropMentorIds — удаляет легаси-колонку после успешного переноса данных.

Замечания для деплоя

Важно: Миграции применяются вручную через dotnet ef database update.
Порядок выполнения: AddCourseMentorTable -> DropMentorIds.


Связанные задачи

Closes #567

@DedSec256
DedSec256 self-requested a review October 27, 2026 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants