sendCoins and listTransactions are now properly working

This commit is contained in:
Ulf Gebhardt 2022-02-23 23:23:51 +01:00
parent 0a1bcac450
commit 70c70f45d4
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9

View File

@ -48,7 +48,7 @@ async function updateStateBalance(
balance.modified = received balance.modified = received
} else { } else {
const decayedBalance = calculateDecay(balance.amount, balance.recordDate, received).balance const decayedBalance = calculateDecay(balance.amount, balance.recordDate, received).balance
balance.amount = Number(decayedBalance) + centAmount balance.amount = decayedBalance + centAmount
balance.modified = new Date() balance.modified = new Date()
} }
if (balance.amount <= 0) { if (balance.amount <= 0) {
@ -64,7 +64,7 @@ async function calculateNewBalance(
userId: number, userId: number,
transactionDate: Date, transactionDate: Date,
centAmount: number, centAmount: number,
): Promise<BigInt> { ): Promise<number> {
let newBalance = centAmount let newBalance = centAmount
const transactionRepository = getCustomRepository(TransactionRepository) const transactionRepository = getCustomRepository(TransactionRepository)
const lastUserTransaction = await transactionRepository.findLastForUser(userId) const lastUserTransaction = await transactionRepository.findLastForUser(userId)
@ -82,7 +82,7 @@ async function calculateNewBalance(
throw new Error('error new balance <= 0') throw new Error('error new balance <= 0')
} }
return BigInt(newBalance) return newBalance
} }
@Resolver() @Resolver()
@ -309,11 +309,8 @@ export class TransactionResolver {
transactionSend.amount = BigInt(centAmount) transactionSend.amount = BigInt(centAmount)
transactionSend.received = receivedCallDate transactionSend.received = receivedCallDate
transactionSend.transactionId = randomInt(99999) transactionSend.transactionId = randomInt(99999)
transactionSend.balance = await calculateNewBalance( const sendBalance = await calculateNewBalance(senderUser.id, receivedCallDate, -centAmount)
senderUser.id, transactionSend.balance = BigInt(Math.trunc(sendBalance))
receivedCallDate,
-centAmount,
)
transactionSend.balanceDate = receivedCallDate transactionSend.balanceDate = receivedCallDate
transactionSend.sendSenderFinalBalance = transactionSend.balance transactionSend.sendSenderFinalBalance = transactionSend.balance
await queryRunner.manager.insert(dbTransaction, transactionSend) await queryRunner.manager.insert(dbTransaction, transactionSend)
@ -327,11 +324,12 @@ export class TransactionResolver {
transactionReceive.amount = BigInt(centAmount) transactionReceive.amount = BigInt(centAmount)
transactionReceive.received = receivedCallDate transactionReceive.received = receivedCallDate
transactionReceive.transactionId = randomInt(99999) transactionReceive.transactionId = randomInt(99999)
transactionReceive.balance = await calculateNewBalance( const receiveBalance = await calculateNewBalance(
senderUser.id, recipientUser.id,
receivedCallDate, receivedCallDate,
centAmount, centAmount,
) )
transactionReceive.balance = BigInt(Math.trunc(receiveBalance))
transactionReceive.balanceDate = receivedCallDate transactionReceive.balanceDate = receivedCallDate
transactionReceive.sendSenderFinalBalance = transactionSend.balance transactionReceive.sendSenderFinalBalance = transactionSend.balance
await queryRunner.manager.insert(dbTransaction, transactionReceive) await queryRunner.manager.insert(dbTransaction, transactionReceive)
@ -345,23 +343,28 @@ export class TransactionResolver {
) )
// Update Balance: recipiant + amount // Update Balance: recipiant + amount
const recipiantStateBalance = await updateStateBalance( const recipientStateBalance = await updateStateBalance(
recipientUser, recipientUser,
centAmount, centAmount,
receivedCallDate, receivedCallDate,
queryRunner, 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') throw new Error('db data corrupted, sender')
} }
if (recipiantStateBalance.amount !== Number(transactionReceive.balance)) { if (recipientStateBalance.amount !== receiveBalance) {
throw new Error('db data corrupted, recipiant') // 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() await queryRunner.commitTransaction()
} catch (e) { } catch (e) {
await queryRunner.rollbackTransaction() await queryRunner.rollbackTransaction()
throw new Error(`Transaction was not successful: ${e}`)
} finally { } finally {
await queryRunner.release() await queryRunner.release()
} }