Перейти к основному содержимому

Data mapping — identity

Источники

  • исходный сервис идентификации и личного кабинета;
  • частичные привязки в Laravel-сайте (профили, формы);
  • Мир Олимп (отдельная база логинов, частично пересекается).

Mapping сущностей

Исходная сущностьЦелевая сущностьПравило
source_users.idusers.id (UUID)новый UUID, исходный id хранится в metadata.source_id
source_users.emailuser_emails.email (CITEXT, lowercase)нормализация
source_users.phoneuser_phones.phone (E.164)нормализация, удаление спецсимволов
source_users.password_hashuser_credentials.password_hashесли совместимый алгоритм — переносится; иначе принудительный reset
source_users.is_blockedusers.status = 'blocked'+ blocked_at, blocked_reason если есть
source_users.created_atusers.created_atсохраняется
исходные сессииuser_sessionsсессии не переносятся; пользователи перелогиниваются
исходные кастомные ролиroles + user_role_assignmentsmapping исходной роли → каноническая роль
исходная family tablefamily_groups + user_family_groupsесли есть
старые школы/центрыorganization_references + organizationsнормализовать название, страну/регион/населённый пункт; рабочую organization создавать только при наличии сценария
старые участники/преподаватели организацийorganization_membershipsтолько official organization contour; учебное назначение преподавателя переносится в LMS mapping
старые ученики официальных организацийorganization_studentsесли есть подтверждённая организация; не является Learning Workspace roster
старые ученики олимпиадcompetition_participant + optional organization_student_idcompetitions хранит участие; identity ref ставится только при official organization match
старые дубли школorganization_duplicate_status / organization_mergesавтоматической склейки нет; формируется merge plan
Мир Олимп userusers или связь как external auth methodесли есть совпадение по email/phone

Маппинг ролей

Исходная рольЦелевая роль
adminadmin
supportsupport
managermanager
teacherбез глобальной роли; identity-owned educator_profile + scoped permissions
external_teacheridentity-owned educator_profile и/или external_teacher_profile в competitions
parentfamily_adult
studentstudent_profile и optional linked user; если семьи нет — personal user или manual review
clientбез отдельной роли — это crm_account

Сценарии

  • пользователь с одним email → один user;
  • пользователи Мира Олимп сопоставляются по email; при дубле — manual review;
  • исходные пароли не совместимые → must_change_password = true;
  • семья без адаптера → одна family_group с одним adult.
  • школа/центр без подтверждённого владельца → organization.status = unclaimed;
  • спорное соответствие школы → organization.status = disputed или merge plan на ручную проверку;
  • полный тёзка ученика в одной организации → отдельный organization_student с duplicate_note;
  • старые списки «мои ученики / мои группы» не пишутся в identity; они передаются в LMS data mapping.

Стратегия

  • read-only mirror через ETL;
  • backfill партиями по дате создания;
  • dual-write через auth-bridge для исходных сервисов;
  • read switch постепенно по сервисам.

Риски и контроль

  • дубли по email — лог + ручная сверка;
  • утрата старых сессий → пользователи перелогиниваются (коммуницируется заранее);
  • расхождение в ролях — запасной audit с до/после.
  • склейка организаций выполняется только после impact preview;
  • ученики организации не смешиваются с family student_profile без отдельного claim/link flow.
  • organization_student не используется как общий учебный roster и не создаётся из каждой олимпиадной регистрации.

Связанные документы