private static CurrencyExchangeRateResult.DateAndRate[] CreateDatesAndRates( CurrencyExchangeRateRequest request) { var random = new Random(request.BaseCurrencyCode.GetHashCode()); var dateCounter = request.StartDate; var dateAndRates = new List <CurrencyExchangeRateResult.DateAndRate>(); var nextRate = CreateInitialRate(random); while (dateCounter <= request.EndDate) { if (!IsWeekend(dateCounter)) { dateAndRates.Add(new CurrencyExchangeRateResult.DateAndRate() { Date = dateCounter, Rate = nextRate }); nextRate = nextRate + CreateVariance(random); } dateCounter = dateCounter.AddDays(1); } return(dateAndRates.ToArray()); }
public async Task <IActionResult> Get([FromRoute] CurrencyExchangeRateRequest request, [FromRoute, SwaggerParameter(Required = false)] float value = 1, [FromQuery, SwaggerParameter(Required = false)] DateTime?day = null, CancellationToken token = default) { try { var currencies = await _currencyService.GetCurrenciesByIsoCode(request.Source.IsoCodeValue, request.Target.IsoCodeValue, token : token) .ConfigureAwait(false); if (currencies.Values.Any(x => x == null)) { return(NotFoundObjectResult(nameof(CurrencyService), "currency code don't exist")); } var exchangeRate = await _exchangeService.GetExchangeRateAsync(currencies["source"], currencies["target"], day, token) .ConfigureAwait(false); return(exchangeRate == null?NotFoundObjectResult(nameof(ExchangeService), "exchange rate don't exist") : OkObjectResult(value * exchangeRate.Rate)); } catch (Exception e) { return(LogAndError500Response(nameof(CurrencyExchangeRatesController), e)); } }
private static CurrencyExchangeRateResult CreateValidResult( CurrencyExchangeRateResult.DateAndRate[] andRates, CurrencyExchangeRateRequest request) { return(new CurrencyExchangeRateResult() { BaseCurrencyCode = request.BaseCurrencyCode, StartDate = request.StartDate, EndDate = request.EndDate, Rates = andRates, HasError = false, }); }
private static CurrencyExchangeRateResult CreateResultWithError( string errorMessage, CurrencyExchangeRateRequest request) { return(new CurrencyExchangeRateResult() { BaseCurrencyCode = request.BaseCurrencyCode, StartDate = request.StartDate, EndDate = request.EndDate, HasError = true, ErrorMessage = errorMessage }); }
private CurrencyExchangeRateResult CreateResult( CurrencyExchangeRateRequest request) { var validCodes = GetValidCodes(); if (validCodes.Any(c => c == request.BaseCurrencyCode)) { var dateAndRates = CreateDatesAndRates(request); return(CreateValidResult( dateAndRates, request)); } return(CreateResultWithError( "Could not find rates for given currency code.", request)); }
public async Task <IActionResult> Post([FromRoute] CurrencyExchangeRateRequest request, [FromBody] CurrencyExchangeRateModel model, CancellationToken token = default) { try { var currencies = await _currencyService.GetCurrenciesByIsoCode(request.Source.IsoCodeValue, request.Target.IsoCodeValue, token : token) .ConfigureAwait(false); if (currencies.Values.Any(x => x == null)) { return(NotFoundObjectResult(nameof(CurrencyService), "currency code don't exist")); } var currencyExchangeRate = model.ToEntity(currencies); await _repository.InsertAsync(currencyExchangeRate, token : token).ConfigureAwait(false); return(CreateObjectResult(currencyExchangeRate.ToModel())); } catch (Exception e) { return(LogAndError500Response(nameof(CurrencyExchangeRatesController), e)); } }