private async Task SaveTrades(IReadOnlyCollection <Trade> trades) { foreach (var trade in trades) { try { await _tradeRepository.InsertAsync(trade); } catch (Exception e) { _log.Error(e, $"Error on saving trade {trade.ToJson()}"); } } }
public async Task <Trade> InsertAsync(Trade trade) { // Enrich payload Enrich(trade); // Store var result = await _repo.InsertAsync(trade); if (result) { return(trade); } return(null); }
public async Task Test_Post_NewTrade() { //Arrange var trade = new Trade { Symbol = "REL", NoOfShares = 12, Price = 98.76m, PortfolioId = 1, Action = "Buy" }; //Act await _tradeRepository.InsertAsync(trade); var result = await _tradeRepository.Query().ToListAsync(); // Assert Assert.True(result.Count > 0); }
public async Task <IActionResult> Post([FromRoute] Guid portfolioId, [FromBody] TradeViewModel trade) { var portfolio = await _portfolioRepository.Query() .Where(x => x.Id.Equals(portfolioId)).FirstOrDefaultAsync(); var share = await _shareRepository.Query() .Where(x => x.Symbol.Equals(trade.Symbol)).FirstOrDefaultAsync(); var newTrade = new Trade() { Portfolio = portfolio, Share = share, Action = trade.Action, Quantity = trade.Quantity, SinglePrice = share.CurrentPrice }; await _tradeRepository.InsertAsync(newTrade); return(Created($"trades/{newTrade.Id}", newTrade)); }
public async Task <IActionResult> Submit(TradeInputViewModel viewModel) { if (!viewModel.IsChecked) { return(TradeInput(new TradeInputViewModel { Result = "Warning" })); } if (!int.TryParse(viewModel.BuyerId, out var buyerId) || !int.TryParse(viewModel.SellerId, out var sellerId) || buyerId < 0 || sellerId < 0) { return(Error("IDs must be non-negative integers.")); } if (buyerId == sellerId) { return(Error("Buyer ID and Seller ID must be different.")); } if (!int.TryParse(viewModel.Quantity, out var quantity) || quantity < 1) { return(Error("Quantity must be an integer of at least 1.")); } if (!int.TryParse(viewModel.Price, out var price) || price < 1) { return(Error("Price must be an integer of at least 1.")); } var buyer = await _traderRepository.GetAsync(buyerId); if (buyer == null) { return(Error("Buyer does not exist.")); } var seller = await _traderRepository.GetAsync(sellerId); if (seller == null) { return(Error("Seller does not exist.")); } var buyerTeamId = buyer.TeamId; var sellerTeamId = seller.TeamId; if (buyerTeamId == sellerTeamId) { return(Error("Buyer and Seller must be on different teams.")); } var symbol = viewModel.Symbol; var marketPrice = (await _securityRepository.GetAsync(symbol)).Price; await _tradeRepository.InsertAsync(new Trade { BuyerId = buyerId, SellerId = sellerId, Symbol = symbol, Quantity = quantity, Price = price, MarketPrice = marketPrice, Flagged = Math.Abs((float)(price - marketPrice) / marketPrice) > Constants.FlagThreshold, BrokerId = HttpContext.Session.GetString("Username") }); return(TradeInput(new TradeInputViewModel { Result = "Success" })); }
public Task RegisterAsync(Trade trade) { return(_tradeRepository.InsertAsync(trade)); }