diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 79692aa8c..51ac0aca7 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -48,7 +48,7 @@ async function updateStateBalance( balance.modified = received } else { const decayedBalance = calculateDecay(balance.amount, balance.recordDate, received).balance - balance.amount = Number(decayedBalance) + centAmount + balance.amount = decayedBalance + centAmount balance.modified = new Date() } if (balance.amount <= 0) { @@ -64,7 +64,7 @@ async function calculateNewBalance( userId: number, transactionDate: Date, centAmount: number, -): Promise { +): Promise { let newBalance = centAmount const transactionRepository = getCustomRepository(TransactionRepository) const lastUserTransaction = await transactionRepository.findLastForUser(userId) @@ -82,7 +82,7 @@ async function calculateNewBalance( throw new Error('error new balance <= 0') } - return BigInt(newBalance) + return newBalance } @Resolver() @@ -309,11 +309,8 @@ export class TransactionResolver { transactionSend.amount = BigInt(centAmount) transactionSend.received = receivedCallDate transactionSend.transactionId = randomInt(99999) - transactionSend.balance = await calculateNewBalance( - senderUser.id, - receivedCallDate, - -centAmount, - ) + const sendBalance = await calculateNewBalance(senderUser.id, receivedCallDate, -centAmount) + transactionSend.balance = BigInt(Math.trunc(sendBalance)) transactionSend.balanceDate = receivedCallDate transactionSend.sendSenderFinalBalance = transactionSend.balance await queryRunner.manager.insert(dbTransaction, transactionSend) @@ -327,11 +324,12 @@ export class TransactionResolver { transactionReceive.amount = BigInt(centAmount) transactionReceive.received = receivedCallDate transactionReceive.transactionId = randomInt(99999) - transactionReceive.balance = await calculateNewBalance( - senderUser.id, + const receiveBalance = await calculateNewBalance( + recipientUser.id, receivedCallDate, centAmount, ) + transactionReceive.balance = BigInt(Math.trunc(receiveBalance)) transactionReceive.balanceDate = receivedCallDate transactionReceive.sendSenderFinalBalance = transactionSend.balance await queryRunner.manager.insert(dbTransaction, transactionReceive) @@ -345,23 +343,28 @@ export class TransactionResolver { ) // Update Balance: recipiant + amount - const recipiantStateBalance = await updateStateBalance( + const recipientStateBalance = await updateStateBalance( recipientUser, centAmount, receivedCallDate, queryRunner, ) - if (senderStateBalance.amount !== Number(transactionSend.balance)) { + if (senderStateBalance.amount !== sendBalance) { + // eslint-disable-next-line no-console + console.log('db data corrupted, sender', senderStateBalance.amount, sendBalance) throw new Error('db data corrupted, sender') } - if (recipiantStateBalance.amount !== Number(transactionReceive.balance)) { - throw new Error('db data corrupted, recipiant') + if (recipientStateBalance.amount !== receiveBalance) { + // eslint-disable-next-line no-console + console.log('db data corrupted, sender', recipientStateBalance.amount, receiveBalance) + throw new Error('db data corrupted, recipient') } await queryRunner.commitTransaction() } catch (e) { await queryRunner.rollbackTransaction() + throw new Error(`Transaction was not successful: ${e}`) } finally { await queryRunner.release() }