Beispiel #1
0
 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()}");
         }
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #4
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));
        }
Beispiel #5
0
        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"
            }));
        }
Beispiel #6
0
 public Task RegisterAsync(Trade trade)
 {
     return(_tradeRepository.InsertAsync(trade));
 }