aboutsummaryrefslogtreecommitdiffstats
path: root/routes/bitcoin/broadcast.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2021-01-15 15:31:46 -0800
committerAdam Soltys <[email protected]>2021-01-15 15:31:46 -0800
commitd01159ce9eee956dca32fd69525c0edd5aae9477 (patch)
treee6a4d4a928daffb5bcedbc3411a0dfded6ff422f /routes/bitcoin/broadcast.js
parentd03dad4d85ccd107068719c4b68cbd6a255864f6 (diff)
downloadcoinos-server-d01159ce9eee956dca32fd69525c0edd5aae9477.tar.gz
coinos-server-d01159ce9eee956dca32fd69525c0edd5aae9477.zip
add more transactions and locks
Diffstat (limited to 'routes/bitcoin/broadcast.js')
-rw-r--r--routes/bitcoin/broadcast.js56
1 files changed, 35 insertions, 21 deletions
diff --git a/routes/bitcoin/broadcast.js b/routes/bitcoin/broadcast.js
index 77b487de..a32e9067 100644
--- a/routes/bitcoin/broadcast.js
+++ b/routes/bitcoin/broadcast.js
@@ -4,29 +4,43 @@ module.exports = ah(async (req, res) => {
let hash = await bc.sendRawTransaction(req.body.tx);
if (user) {
- let { account } = user;
- let payment = await db.Payment.create({
- ...req.body.payment,
- hash,
- amount: -req.body.payment.amount,
- tip: 0,
- account_id: account.id,
- user_id: user.id,
- rate: app.get("rates")[user.currency],
- currency: user.currency,
- confirmed: true,
- received: false,
- network: "bitcoin",
- });
+ await db.transaction(async transaction => {
+ let account = await db.Account.findOne({
+ where: {
+ id: user.account_id
+ },
+ lock: transaction.LOCK.UPDATE,
+ transaction
+ });
+ let payment = await db.Payment.create(
+ {
+ ...req.body.payment,
+ hash,
+ amount: -req.body.payment.amount,
+ tip: 0,
+ account_id: account.id,
+ user_id: user.id,
+ rate: app.get("rates")[user.currency],
+ currency: user.currency,
+ confirmed: true,
+ received: false,
+ network: "bitcoin"
+ },
+ { transaction }
+ );
- account.balance += payment.amount - payment.fee;
- await account.save();
+ await account.increment(
+ { balance: payment.amount - payment.fee },
+ { transaction }
+ );
+ await account.reload({ transaction });
- payment = payment.get({ plain: true });
- payment.account = account.get({ plain: true });
- emit(user.username, "payment", payment);
- emit(user.username, "account", payment.account);
- res.send(payment);
+ payment = payment.get({ plain: true });
+ payment.account = account.get({ plain: true });
+ emit(user.username, "payment", payment);
+ emit(user.username, "account", payment.account);
+ res.send(payment);
+ });
} else {
res.send(result);
}