Skip to content

Instantly share code, notes, and snippets.

@UserAd
Created November 26, 2009 11:24
Show Gist options
  • Save UserAd/243407 to your computer and use it in GitHub Desktop.
Save UserAd/243407 to your computer and use it in GitHub Desktop.
1. Налог должен вычислятся автоматически в зависимости от того, какого типа транзакция
2. Должна быть система подтранзакций.
3. Создание подтранзакций полностью автоматическое и срабатывает во время сохранения транзакции (after_create)
4. Guardian(Защита переключения состояния) работает только у основной транзакции и проверяет сумму у всех транзакций, чтоб небыло проблем с различными состояниями транзакций
5. Для любой транзакции верхнего уровня есть метод подсчета всей суммы с налогами и без налогов.
6. Реферральские определяются из источника (пользователя от которого уходит платеж) и приемника (пользователя которому уходит платеж)
7. В каждой транзакции на момент ее подготовки (забора средств со счета) запоминается баланс всех сторон (нужно для поиска багов)
а) Типы транзакций:
1. Перевод денег системой MONEY_TACTION
2. Перевод денег администратором ADMIN_TACTION
3. Плата за активацию [x] [*] ACTIVATION
4. Плата за месячный платеж [x] [*] MONTH_PAYMENT
5. Плата за переадресацию PSTN_PAYMENT
6. Налог * TAX
7. Реферральские ** REFFERAL
* [x] - обозначение облагаемых налогом транзакций
** [*] - передача части средств от продажи, покупки номера рефоводу (налог2)
b) Система подтранзакций
Каждая транзакция может представлять из себя дерево, например
[Активация]
[Налог]
[Реферральские1]
[Реферральские2]
Логика работы транзакций
Все транзакции имеют ряд состояний с возможными переходами:
1. Создана (если не будет никакой обработки, то недействительна)
2. Зарезервирована (забраны деньги, если возможно)
3. Проведена (деньги отправлены получчателю)
4. Отменена (деньги вернули отправителю)
Т.е возможны следующие цепочки: 1->2->3 и 1->2->4
При заборе средств если у пользователя недостаточно денег, то состояние транзакции не изменяется.
TODO: провести дополнительный нагрузочный тест
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment