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.