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

Интеграции олимпиад

Зачем нужно

Интеграции фиксируют, какие соседние домены нужны олимпиадам и где проходят границы владения данными.

Канонические cross-domain контракты

Кто использует

  • architecture;
  • engineering;
  • product;
  • competitions team;
  • QA.

Сценарии

  • участник входит через общий аккаунт;
  • организация добавляет учеников через identity organization context;
  • организация смотрит результаты своих учеников по permissions в organization scope;
  • внешний преподаватель подтверждает роль;
  • олимпиада получает content/source refs из банка заданий;
  • олимпиада запускает выполнение через LMS activity runtime или temporary compatible adapter;
  • публичная страница показывает сезон и результаты;
  • CRM отправляет коммуникации;
  • management получает аналитику по участию.

Данные

  • user identity;
  • organization, organization student and membership context;
  • teacher relation;
  • task-bank source refs;
  • LMS activity/attempt refs;
  • temporary adapter activity snapshot for competitions-first MVP;
  • participant;
  • result;
  • publication status;
  • analytics event.

Правила

  • Олимпиада не должна становиться владельцем пользователя, организации, organization student, задачи или платежа.
  • competition_participant может ссылаться на organization_student_id, но остается competitions-owned сущностью.
  • competition_participant хранит identity_organization_id, organization_membership_id и organization_student_snapshot только как external context/snapshot.
  • Temporary LMS-compatible adapter допустим только как временный launch slice до готовности LMS activity runtime.
  • Task-bank не является runtime прохождения Олимпиады.
  • Соседний домен остаётся источником истины для своих сущностей.
  • Интеграционные события должны быть идемпотентными.
  • Публичные данные отдаются только после разрешения на публикацию.

API

Нужны контракты чтения пользователей и ролей, получения заданий, передачи публичных статусов, отправки событий участия и результатов.

Серверная часть

Серверная часть олимпиад хранит ссылки на внешние сущности, локальные snapshots только для воспроизводимости тура и аудит интеграционного обмена.

Интеграции

  • identity — вход, роли, семейные связи и внешние преподаватели;
  • CRM — контакты, коммуникации и обращения;
  • task-bank — задания, версии, source refs, answer schema as service-only content/check source;
  • LMS — activity runtime, attempts, responses, score by item, тренировочный контур;
  • storefront — публичная публикация;
  • management — аналитика и планирование.

Безопасность

Интеграции не должны раскрывать результаты до публикации, чужие персональные данные и задания закрытых туров.

Нестандартные случаи

  • внешний сервис недоступен во время регистрации;
  • задача в task-bank изменилась после lock activity binding;
  • LMS activity runtime недоступен во время старта тура;
  • пользователь изменил ФИО после выдачи сертификата;
  • публикация результата отменена;
  • повторно пришло событие регистрации.

Готовность

  • у каждой внешней сущности указан владелец;
  • олимпиада хранит ссылки и необходимые snapshots;
  • события можно повторить без дублей;
  • публичные и закрытые данные разделены.