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

ADR-030. Граница entitlement (crm) и attendance (lms)

Контекст

Право доступа к курсу или занятию выдаётся коммерческой логикой (оплата, подписка, абонемент), а потребляется учебной логикой (участие в занятии, открытие урока, выполнение активности). Раньше эти стороны путались между catalog/products и delivery.

Решение

  • crm_entitlement (право доступа) принадлежит crm;
  • crm_entitlement_consumption_log (факт списания) принадлежит crm;
  • attendance (факт присутствия на учебном занятии) принадлежит lms;
  • LMS, регистрируя attendance или открывая контент, инициирует событие lms.entitlement.consumed;
  • CRM подписан на это событие и пишет crm_entitlement_consumption_log, обновляя баланс crm_entitlement.

Альтернативы

АльтернативаПочему отвергнута
attendance принадлежит crmЭто учебный факт, не финансовый
entitlement принадлежит lmsПраво доступа — коммерческая логика, привязанная к покупке и подписке
Делёж attendance между двумя доменамиНарушает правило одного владельца

Последствия

  • CRM не пишет в БД lms;
  • LMS не управляет балансом абонементов;
  • факт списания всегда трассируется через событие;
  • идемпотентность списания обеспечивается idempotencyKey события.

Связи

  • relates: ADR-014 (продукт ≠ группа);
  • relates: ADR-010 (attendance ≠ mastery);
  • интеграции: crm--lms, lms--crm.