public void AddAmount(IDbConnection con, IDbTransaction tx, string poolId, string coin, string address, decimal amount, string usage) { logger.LogInvoke(); var now = DateTime.UtcNow; // record balance change var query = "INSERT INTO balance_changes(poolid, coin, address, amount, usage, created) " + "VALUES(@poolid, @coin, @address, @amount, @usage, @created)"; var balanceChange = new Entities.BalanceChange { PoolId = poolId, Coin = coin.ToString(), Created = now, Address = address, Amount = amount, Usage = usage, }; con.Execute(query, balanceChange, tx); // update balance query = "SELECT * FROM balances WHERE poolid = @poolId AND coin = @coin AND address = @address"; var balance = con.Query <Entities.Balance>(query, new { poolId, coin = coin.ToString(), address }, tx) .FirstOrDefault(); if (balance == null) { balance = new Entities.Balance { PoolId = poolId, Coin = coin.ToString(), Created = now, Address = address, Amount = amount, Updated = now }; query = "INSERT INTO balances(poolid, coin, address, amount, created, updated) " + "VALUES(@poolid, @coin, @address, @amount, @created, @updated)"; con.Execute(query, balance, tx); } else { query = "UPDATE balances SET amount = amount + @amount, updated = now() at time zone 'utc' " + "WHERE poolid = @poolId AND coin = @coin AND address = @address"; con.Execute(query, new { poolId, address, coin = coin.ToString().ToUpper(), amount }, tx); } }
public async Task <int> AddAmountAsync(IDbConnection con, IDbTransaction tx, string poolId, string address, decimal amount, string usage, params string[] tags) { logger.LogInvoke(); var now = DateTime.UtcNow; // record balance change var query = "INSERT INTO balance_changes(poolid, address, amount, usage, tags, created) " + "VALUES(@poolid, @address, @amount, @usage, @tags, @created)"; var balanceChange = new Entities.BalanceChange { PoolId = poolId, Created = now, Address = address, Amount = amount, Usage = usage, Tags = tags }; await con.ExecuteAsync(query, balanceChange, tx); // update balance query = "SELECT * FROM balances WHERE poolid = @poolId AND address = @address"; var balance = (await con.QueryAsync <Entities.Balance>(query, new { poolId, address }, tx)) .FirstOrDefault(); if (balance == null) { balance = new Entities.Balance { PoolId = poolId, Created = now, Address = address, Amount = amount, Updated = now }; query = "INSERT INTO balances(poolid, address, amount, created, updated) " + "VALUES(@poolid, @address, @amount, @created, @updated)"; return(await con.ExecuteAsync(query, balance, tx)); } else { query = "UPDATE balances SET amount = amount + @amount, updated = now() at time zone 'utc' " + "WHERE poolid = @poolId AND address = @address"; return(await con.ExecuteAsync(query, new { poolId, address, amount }, tx)); } }