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 ExecuteBalanceUpdate() { var dailyInterest = ANNUAL_INTEREST_RATE / 365; var accounts = await _context.Accounts.ToListAsync(); foreach (var acc in accounts) { if (_context.Balances.Where(b => b.Timestamp == DateTime.Today).Any()) { continue; } Entities.Balance nb = new Entities.Balance() { AccountId = acc.AccountId, Timestamp = DateTime.Today, Amount = acc.Balance }; _context.Balances.Add(nb); acc.Balance += acc.Balance * dailyInterest; } await _context.SaveChangesAsync(); }
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)); } }
public void AddAmount(IDbConnection con, IDbTransaction tx, string poolId, CoinType coin, string address, decimal amount) { var 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(); var now = DateTime.UtcNow; 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 { balance.Updated = now; balance.Amount += amount; query = "UPDATE balances SET amount = @amount, updated = @updated " + "WHERE poolid = @poolId AND coin = @coin AND address = @address"; con.Execute(query, balance, tx); } }
/// <summary> /// Get Balances for account /// </summary> /// <param name="asset">String of asset</param> /// <param name="pair">String of trading pair</param> /// <returns>Collection of Balance objects</returns> public List <Entities.Balance> GetBalance(string asset, string pair) { int i = 0; if (_thisExchange == Exchange.BINANCE) { var account = _bianceRepo.GetBalance().Result; if (account == null || account.balances == null) { return(new List <Entities.Balance>()); } return(account.balances.Where(b => b.asset.Equals(asset) || b.asset.Equals(pair)).ToList()); } else if (_thisExchange == Exchange.GDAX) { var accountList = _gdaxRepo.GetBalance().Result.ToArray(); var balances = new List <Entities.Balance>(); for (i = 0; i < accountList.Count(); i++) { if (accountList[i].Currency.Equals(asset) || accountList[i].Currency.Equals(pair)) { var balance = new Entities.Balance { asset = accountList[i].Currency, free = accountList[i].Available, locked = accountList[i].Hold }; balances.Add(balance); } } return(balances); } else if (_thisExchange == Exchange.KUCOIN) { var accountList = _kuRepo.GetBalance().Result; while (accountList == null && i < 3) { accountList = _kuRepo.GetBalance().Result; i++; } var balances = new List <Entities.Balance>(); if (accountList == null) { return(balances); } accountList = accountList.ToArray(); for (i = 0; i < accountList.Count(); i++) { if (accountList[i].coinType.ToString().Equals(asset) || accountList[i].coinType.ToString().Equals(pair)) { var balance = new Entities.Balance { asset = accountList[i].coinType.ToString(), free = accountList[i].balance, locked = accountList[i].freezeBalance }; balances.Add(balance); } } return(balances); } else { return(null); } }