insert transactionLinkId in transaction made by redeemed link, update transaction link within commit transaction

This commit is contained in:
Moriz Wahl 2022-03-11 16:29:54 +01:00
parent 06d45c1e51
commit e79a583ee2
2 changed files with 21 additions and 8 deletions

View File

@ -156,14 +156,13 @@ export class TransactionLinkResolver {
throw new Error('Transaction Link already redeemed.')
}
await executeTransaction(transactionLink.amount, transactionLink.memo, linkedUser, user)
// TODO: Rollback transaction when updating links fails
transactionLink.redeemedAt = now
transactionLink.redeemedBy = user.id
transactionLink.save().catch(() => {
throw new Error('Could not update transaction link.')
})
await executeTransaction(
transactionLink.amount,
transactionLink.memo,
linkedUser,
user,
transactionLink,
)
return true
}

View File

@ -23,6 +23,7 @@ import { TransactionLinkRepository } from '@repository/TransactionLink'
import { User as dbUser } from '@entity/User'
import { Transaction as dbTransaction } from '@entity/Transaction'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
import { apiPost } from '@/apis/HttpRequest'
import { TransactionTypeId } from '@enum/TransactionTypeId'
@ -39,6 +40,7 @@ export const executeTransaction = async (
memo: string,
sender: dbUser,
recipient: dbUser,
transactionLink?: dbTransactionLink | null,
): Promise<boolean> => {
if (sender.id === recipient.id) {
throw new Error('Sender and Recipient are the same.')
@ -67,6 +69,7 @@ export const executeTransaction = async (
transactionSend.decay = sendBalance.decay.decay
transactionSend.decayStart = sendBalance.decay.start
transactionSend.previous = sendBalance.lastTransactionId
transactionSend.transactionLinkId = transactionLink ? transactionLink.id : null
await queryRunner.manager.insert(dbTransaction, transactionSend)
const transactionReceive = new dbTransaction()
@ -82,12 +85,23 @@ export const executeTransaction = async (
transactionReceive.decayStart = receiveBalance ? receiveBalance.decay.start : null
transactionReceive.previous = receiveBalance ? receiveBalance.lastTransactionId : null
transactionReceive.linkedTransactionId = transactionSend.id
transactionReceive.transactionLinkId = transactionLink ? transactionLink.id : null
await queryRunner.manager.insert(dbTransaction, transactionReceive)
// Save linked transaction id for send
transactionSend.linkedTransactionId = transactionReceive.id
await queryRunner.manager.update(dbTransaction, { id: transactionSend.id }, transactionSend)
if (transactionLink) {
transactionLink.redeemedAt = receivedCallDate
transactionLink.redeemedBy = recipient.id
await queryRunner.manager.update(
dbTransactionLink,
{ id: transactionLink.id },
transactionLink,
)
}
await queryRunner.commitTransaction()
} catch (e) {
await queryRunner.rollbackTransaction()