public IPocketDTO GetPocket(int id) { IPocketDTO dto = new PocketDTO(); try { using (MySqlConnection conn = new MySqlConnection(_connection)) { conn.Open(); using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM result WHERE RoundId=@Id", conn)) { cmd.Parameters.AddWithValue("@Id", id); MySqlDataReader reader = cmd.ExecuteReader(); { while (reader.Read()) { dto.Id = id; dto.ToColorNumber = reader.SafeGetInt(1); dto.ToNumber = reader.SafeGetInt(2); dto.RoundId = reader.SafeGetInt(3); } } } } return(dto); } catch (MySqlException ex) { throw new Exception(ex.Message, ex); } }
public async Task <GetWalletResponse> Handle(GetWalletRequest query, CancellationToken cancellationToken) { Wallet wallet = await _context.Wallets .Where(x => x.WalletID == query.WalletID) .Include(a => a.Blockchain) .Include(a => a.Pockets).ThenInclude(b => b.Currency) .Include(a => a.Pockets).ThenInclude(b => b.Transactions) .Include(a => a.Owner).ThenInclude(b => b.Provider) .SingleOrDefaultAsync(cancellationToken); if (wallet == null) { throw new NotFoundException(nameof(Wallet), query.WalletID); } var result = new GetWalletResponse { WalletID = wallet.WalletID, OwnerID = wallet.OwnerID, BlockchainID = wallet.BlockchainID, Name = wallet.Name, Address = wallet.Address, ProviderType = wallet.ProviderType, IsSynchronized = wallet.IsSynchronized, BlockchainName = wallet.Blockchain.Name, OwnerProviderName = wallet.Owner.Provider.Name }; #region Process Main Pocket var mainPocket = wallet.Pockets.Single(x => x.IsMain); PocketDTO mainPocketDTO = new PocketDTO { PocketID = mainPocket.PocketID, WalletID = mainPocket.WalletID, CurrencyID = mainPocket.CurrencyID, CurrencyType = mainPocket.CurrencyType, Address = mainPocket.Address, Balance = mainPocket.Transactions.Sum(x => x.Amount), CurrencySymbol = mainPocket.Currency.Symbol, CurrencyName = mainPocket.Currency.Name, Transactions = new List <TransactionDTO>() }; result.MainPocket = mainPocketDTO; foreach (var transaction in mainPocket.Transactions) { if (transaction.TransactionType != TransactionType.BuyOUTNonWithholding && transaction.TransactionType != TransactionType.SellINNonWithholding) { TransactionDTO transactionDTO = new TransactionDTO { TransactionID = transaction.TransactionID, PocketID = transaction.PocketID, TransactionHash = transaction.TransactionHash, PairWalletName = transaction.PairWalletName, PairWalletAddress = transaction.PairWalletAddress, Amount = transaction.Amount, UnitPriceInUSD = transaction.UnitPriceInUSD, TransactionType = transaction.TransactionType, TransactionDateTime = transaction.TransactionDateTime, TransactionTypeDisplayText = transaction.TransactionTypeDisplayText, TradeID = null, InternalTransferID = null }; if (transaction.TransactionType == TransactionType.InternalTransferOUT) { InternalTransfer internalTransfer = await _context.InternalTransfers .Where(x => x.FromTransactionID == transaction.TransactionID) .SingleOrDefaultAsync(cancellationToken); if (internalTransfer != null) { transactionDTO.InternalTransferID = internalTransfer.InternalTransferID; } } else if (transaction.TransactionType == TransactionType.InternalTransferIN) { InternalTransfer internalTransfer = await _context.InternalTransfers .Where(x => x.ToTransactionID == transaction.TransactionID) .SingleOrDefaultAsync(cancellationToken); if (internalTransfer != null) { transactionDTO.InternalTransferID = internalTransfer.InternalTransferID; } } else if (transaction.TransactionType == TransactionType.BuyIN) { Trade tradeBuy = await _context.Trades .Where(x => x.FromTransactionID == transaction.TransactionID) .Include(a => a.ToTransaction) .ThenInclude(b => b.Pocket) .ThenInclude(c => c.Currency) .SingleOrDefaultAsync(cancellationToken); if (tradeBuy != null) { transactionDTO.TradeID = tradeBuy.TradeID; } } else if (transaction.TransactionType == TransactionType.BuyOUT) { Trade tradeBuy = await _context.Trades .Where(x => x.ToTransactionID == transaction.TransactionID) .Include(a => a.FromTransaction) .ThenInclude(b => b.Pocket) .ThenInclude(c => c.Currency) .SingleOrDefaultAsync(cancellationToken); if (tradeBuy != null) { transactionDTO.TradeID = tradeBuy.TradeID; } } else if (transaction.TransactionType == TransactionType.SellOUT) { Trade tradeSell = await _context.Trades .Where(x => x.FromTransactionID == transaction.TransactionID) .Include(a => a.ToTransaction) .ThenInclude(b => b.Pocket) .ThenInclude(c => c.Currency) .SingleOrDefaultAsync(cancellationToken); if (tradeSell != null) { transactionDTO.TradeID = tradeSell.TradeID; } } else if (transaction.TransactionType == TransactionType.SellIN) { Trade tradeSell = await _context.Trades .Where(x => x.ToTransactionID == transaction.TransactionID) .Include(a => a.FromTransaction) .ThenInclude(b => b.Pocket) .ThenInclude(c => c.Currency) .SingleOrDefaultAsync(cancellationToken); if (tradeSell != null) { transactionDTO.TradeID = tradeSell.TradeID; } } mainPocketDTO.Transactions.Add(transactionDTO); } } #endregion #region Process Token Pockets foreach (Pocket pocket in wallet.Pockets.Where(x => !x.IsMain)) { PocketDTO tokenPocketDTO = new PocketDTO { PocketID = pocket.PocketID, WalletID = pocket.WalletID, CurrencyID = pocket.CurrencyID, CurrencyType = pocket.CurrencyType, Address = pocket.Address, Balance = pocket.Transactions.Sum(x => x.Amount), CurrencySymbol = pocket.Currency.Symbol, CurrencyName = pocket.Currency.Name }; foreach (Transaction transaction in pocket.Transactions) { tokenPocketDTO.Transactions.Add(new TransactionDTO { TransactionID = transaction.TransactionID, PocketID = transaction.PocketID, TransactionHash = transaction.TransactionHash, PairWalletName = transaction.PairWalletName, PairWalletAddress = transaction.PairWalletAddress, Amount = transaction.Amount, UnitPriceInUSD = transaction.UnitPriceInUSD, TransactionType = transaction.TransactionType, TransactionDateTime = transaction.TransactionDateTime, TransactionTypeDisplayText = transaction.TransactionTypeDisplayText, TradeID = null, InternalTransferID = null }); } result.TokenPockets.Add(tokenPocketDTO); } ; #endregion result.IsSuccessful = true; return(result); }