typescript - Unngå kappløpsforhold i TypeORM


Jeg jobber med en kodebase som bruker TypeORM, og vi har en tabell der vi lagrer en brukers balansinformasjon.

Slik ser koden vår omtrent ut:

async updateAccountInfo(account: Account, tx: Transaction) {
  if (tx.type == 'credit') {
    account.balance = account.balance + amount
  }
  else if (tx.type == 'debit') {
    account.balance = account.balance - amount
  }

  await this.accountRepo.save(account)
}

Problemet er at vi begynner å få kappløpsforhold når transaksjoner kommer samtidig, og vi ender opp med å få feil saldo (det er mye mer som koden gjør, som å oppdatere hovedboken osv., men jeg kan ikke legge det ut her og tror ikke det er relevant for spørsmålet).

Er det mulig å skrive om dette slik at jeg kan bruke databasen (MySQL) i stedet for for å gjøre beregningen, slik at jeg forhåpentligvis kan unngå konkurransesituasjonen, men også uten å måtte bruke spørringsbyggeren.

dvs. på sequelize, kan det hende du kan gjøre noe som

account.udpate({ 
  balance: Sequelize.literal(`balance + ${amount}`), 
  where: { id: account.id } 
})

Når det gjelder typeORM, er jeg derimot ikke sikker på hvordan jeg skal gjøre dette, og jeg kunne ikke finne noe om det i dokumentasjonen. Enhver hjelp ville vært flott.