mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
sendCoins and listTransactions are now properly working
This commit is contained in:
parent
0a1bcac450
commit
70c70f45d4
@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user