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>()));
 }
Exemplo n.º 2
0
        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);
        }