public async Task <CurrencyRateQuery[]> GetAsync(CurrencyRateQueryDto queryDto) { if (queryDto.ApiKey is null) { throw new NullApiKeyException(); } if (!await apiKeyService.IsApiKeyValidAsync(queryDto.ApiKey)) { throw new InvalidApiKeyException(queryDto.ApiKey); } return(queryDto.CurrencyCodes .SelectMany(currencyPair => { var source = currencyPair.Key; var target = currencyPair.Value; var startDate = queryDto.StartDate == default ? DateTime.Today : queryDto.StartDate; var endDate = queryDto.EndDate == default ? DateTime.Today : queryDto.EndDate; return DateHelper.EachDay(startDate.GetRecentWorkDay(), endDate).Select(date => new CurrencyRateQuery(source, target, date)); }) .ToArray()); }