public async Task <ValidationResult> PostBuyRequest(BuyRequestInput request, string jwtToken) { return(await PolicyHelper.ThreeRetriesAsync().ExecuteAsync(() => _stockTraderBroker.BaseAddress .AppendPathSegment(_stockTraderBroker.StockTraderBrokerPath.BuyRequest) .WithOAuthBearerToken(jwtToken).PostJsonAsync(request).ReceiveJson <ValidationResult>())); }
public async Task <ActionResult <ValidationResult> > PostPlaceBid(PlaceBidInput placeBidInput) { var(jwtToken, accountId) = RequestHelper.GetJwtFromHeader(Request); var validateStock = _publicShareOwnerControlClient.ValidateStock(placeBidInput.StockId, jwtToken); var tobinTaxRate = _tobinTaxerClient.GetTobinTaxRate(); Task.WaitAll(validateStock, tobinTaxRate); var reserveAmount = placeBidInput.Price * placeBidInput.AmountOfShares * (1 + tobinTaxRate.Result); var reservationRequest = new ReservationRequest { Amount = reserveAmount, AccountId = accountId }; var reservationResult = await _bankClient.Reserve(reservationRequest, jwtToken); if (!reservationResult.Valid) { return new ValidationResult { Valid = false, ErrorMessage = reservationResult.ErrorMessage } } ; var buyRequestInput = new BuyRequestInput { AccountId = accountId, AmountOfShares = placeBidInput.AmountOfShares, Price = placeBidInput.Price, ReserveId = reservationResult.ReservationId, StockId = placeBidInput.StockId, TimeOut = placeBidInput.TimeOut }; var validationResult = await _stockTraderBrokerClient.PostBuyRequest(buyRequestInput, jwtToken); return(validationResult.Valid ? new ValidationResult { Valid = true, ErrorMessage = string.Empty } : validationResult); }