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.