Архитектура транзакций
Архитектура транзакций в FirstWork представляет собой самостоятельную подсистему, обеспечивающую фиксацию всех денежных операций, связанных со сделками, комиссиями, возвратами и движением средств между пользователями. Транзакции являются единственным источником правды о финансовых операциях и служат связующим звеном между балансами пользователей, сделками и общей прибылью проекта. Все операции с деньгами проходят через таблицу транзакций, что позволяет гарантировать целостность данных и корректность финансового учёта.
Каждая транзакция отражает конкретное действие, связанное с движением средств. При создании сделки фиксируются две транзакции: списание средств у покупателя и начисление суммы исполнителю с учётом комиссии. Эти транзакции создаются в момент оформления покупки и привязываются к уникальному идентификатору заказа. Комиссия проекта также отражается в транзакциях, что позволяет точно отслеживать прибыль системы. Все транзакции имеют типы, которые определяют их назначение, например списание, начисление, возврат или комиссия. Это позволяет системе корректно интерпретировать каждую операцию и формировать отчётность.
Транзакции тесно связаны со стадиями сделки. При подтверждении выполнения сделки транзакции обновляются таким образом, чтобы отразить окончательное распределение средств между участниками. Если сделка завершается успешно, транзакции фиксируют начисление исполнителю и комиссию проекта. Если сделка отменяется или переходит в спор, транзакции корректируются в соответствии с новым распределением средств. При возврате средств после завершения сделки транзакции обновляются повторно, что позволяет корректно отразить перераспределение денег между пользователями и проектом. Таким образом, транзакции являются динамическим отражением состояния сделки и обеспечивают финансовую прозрачность.
Все операции с транзакциями выполняются внутри транзакций базы данных. Это гарантирует, что изменения балансов, стадий сделки и записей в таблице транзакций происходят атомарно. Если любое действие не может быть выполнено, вся операция откатывается. Такой подход исключает ситуации, когда баланс пользователя изменён, а транзакция не создана, или наоборот. Блокировка строк сделки через select for update предотвращает параллельные изменения и защищает от повторных действий. Это особенно важно при подтверждении сделки, отмене, возврате или открытии спора, когда несколько пользователей могут пытаться выполнить действия одновременно.
Транзакции также связаны с системой комиссий. Комиссия рассчитывается при создании сделки и при её завершении. В момент подтверждения сделки комиссия фиксируется как отдельная транзакция, а её сумма добавляется в общую прибыль проекта. При возврате средств комиссия корректируется, и прибыль проекта уменьшается на соответствующую величину. Это обеспечивает точный учёт доходов и расходов проекта и позволяет формировать корректную финансовую статистику.
Архитектура транзакций обеспечивает строгую последовательность действий, прозрачность финансовых операций и защиту от ошибок. Она гарантирует, что любое движение средств фиксируется, любое изменение баланса подтверждено транзакцией, а любое действие в сделке имеет финансовое отражение. Благодаря этому система остаётся устойчивой, предсказуемой и безопасной, а финансовые данные всегда остаются согласованными и непротиворечивыми.