From 8f2506eeca8ed92373396e6b1b6ecb7b5b0d5ba3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 5 Nov 2021 00:08:15 +0100 Subject: [PATCH] ordered transaction commit --- .../graphql/resolver/TransactionResolver.ts | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 7327f4925..78ab728e8 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -412,27 +412,14 @@ export class TransactionResolver { throw new Error('error loading saved transaction: ' + error) }) - // update state balance - const senderStateBalance = await updateStateBalance( - senderUser, - -centAmount, - transaction.received, - queryRunner, - ) - const recipiantStateBalance = await updateStateBalance( - recipiantUser, - centAmount, - transaction.received, - queryRunner, - ) - - // update user transactions + // Insert Transaction: sender - amount const senderUserTransactionBalance = await addUserTransaction( senderUser, transaction, -centAmount, queryRunner, ) + // Insert Transaction: recipient + amount const recipiantUserTransactionBalance = await addUserTransaction( recipiantUser, transaction, @@ -440,6 +427,21 @@ export class TransactionResolver { queryRunner, ) + // Update Balance: sender - amount + const senderStateBalance = await updateStateBalance( + senderUser, + -centAmount, + transaction.received, + queryRunner, + ) + // Update Balance: recipiant + amount + const recipiantStateBalance = await updateStateBalance( + recipiantUser, + centAmount, + transaction.received, + queryRunner, + ) + if (senderStateBalance.amount !== senderUserTransactionBalance.balance) { throw new Error('db data corrupted, sender') }