OxL Справочник OxL
РусскийEnglish

bank-saga

Перевод между счетами (§11.3): Bank.debit списывает, Bank.credit зачисляет; если зачисление не удалось, списание отменяется компенсацией undo. Счета — шардированные акторы Account, методы Bank помечены @idempotent, потому что каждый шаг саги получает ключ идемпотентности.

sh
oxl run examples/bank-saga
oxl test examples/bank-saga

Вывод oxl run:

oxl
1 -> 2, 30: ok, target balance 30
1 -> 99, 50: account 99 is blocked, debit compensated
1 -> 2, 500: insufficient funds (70)
balance of 1: 70

На что смотреть: тип результата саги i64 | Insufficient | Blocked | CompensationFailed | NetError разбирается одним match; cluster bank { role all { serves Bank; hosts Account; journal; runs sagas } }: сага требует роль с журналом и runs sagas; три теста проверяют успех, компенсацию и отказ до зачисления. Продолжение — оформление заказа в shop (склад и платежи там внешние сервисы, подменяемые mock).

Файлы проекта · Скачать (zip)