public async Task Get10ProductFromControllerLessThan1Second()
        {
            int count = 10;

            await InitializeDataAsync(count);

            var productsController = new ProductsController(_productRepository, _logger, _mapper);
            var requestModel       = new GetProductsRequestModel();

            requestModel.Id        = "123";
            requestModel.Timestamp = DateTime.UtcNow;
            requestModel.Products  = new List <ProductModel>();
            for (int i = 0; i < count; i++)
            {
                var data = _dataRow[i].Split(',');
                requestModel.Products.Add(new ProductModel
                {
                    Id = long.Parse(data[0])
                });
            }
            Stopwatch  sw     = Stopwatch.StartNew();
            JsonResult result = await productsController.GetProducts(requestModel);

            sw.Stop();
            GetProductsResponseModel responseModel = ((GetProductsResponseModel)result.Data);

            Console.WriteLine(responseModel.Id + " == " + requestModel.Id);
            Assert.IsTrue(responseModel.Id == requestModel.Id);

            Console.WriteLine(responseModel.Products.Count + " == " + requestModel.Products.Count);
            Assert.IsTrue(responseModel.Products.Count == requestModel.Products.Count);

            Console.WriteLine(sw.Elapsed.TotalSeconds + " < " + 1);
            Assert.IsTrue(sw.Elapsed.TotalSeconds < 1);
        }
        public async Task <IActionResult> GetAsync([FromQuery(Name = "currencyCode")] string currencyCode, CancellationToken token)
        {
            if (string.IsNullOrEmpty(currencyCode))
            {
                currencyCode = DefaultCurrencyCode;
            }

            var productResponseModels = ProductRespository
                                        .GetProducts()
                                        .Select(product => new ProductResponseModel {
                Product = product
            })
                                        .ToList();

            foreach (var model in productResponseModels)
            {
                var product = model.Product;

                model.ConvertedPrice = product.Price * await _exchangeRateGetter.GetExchangeRateAsync(
                    product.CurrencyCode,
                    currencyCode,
                    token);
            }

            var responseModel = new GetProductsResponseModel
            {
                Data = productResponseModels
            };

            return(Ok(responseModel));
        }