public IResponse MarketSell(User user, Stock stock, int quantity) { var holdings = _holdingsProvider.GetHolding(user, stock); if (holdings < quantity) { return new SellOrderFailedResponse { Reason = SellOrderFailedResponse.FailureReason.InsufficientHoldings } } ; var fills = GetOrderFills(OrderType.Market, OrderDirection.Sell, stock, quantity); if (fills.Any()) { ExecuteSell(user, fills); } var unfilled = quantity - fills.Sum(x => x.Quantity); if (unfilled > 0) { _ordersProvider.AddSellOrder(user, stock, unfilled); } return(new BuyOrderResponse { Filled = fills, Unfilled = unfilled }); }
public void GetHoldingsTest() { _provider.CreateUser(_user); var actual = _provider.GetHolding(_user, _stock); Assert.AreEqual(0, actual); }
public IHttpActionResult GetHolding([FromBody] Stock stock) { var reply = _accounts.GetUser(Request.Headers); if (reply.FailureReason != GetUserResponse.Reason.None) { return(BadRequest("Invalid User")); } var stockHeld = _holdingsProvider.GetHolding(reply.User, stock); return(Ok(stockHeld)); }