/// <summary> /// Get WeatherForecasts for a specific city /// </summary> /// <param name="city"></param> /// <returns></returns> public async Task <WeatherForecastResult> GetWeatherForecasts(string city) { try { WeatherForecastResult result = new WeatherForecastResult(); List <WeatherForecast> weatherForecasts = new List <WeatherForecast>(); if (!string.IsNullOrWhiteSpace(city)) { var weatherInfoDetails = await _metaWeatherClient.GetWeatherInfoDetails(city); if (weatherInfoDetails != null && weatherInfoDetails.consolidated_weather != null) { foreach (var weatherInfoDetail in weatherInfoDetails.consolidated_weather.Take(5)) { weatherForecasts.Add(new WeatherForecast { Date = Convert.ToDateTime(weatherInfoDetail.applicable_date).ToString("d", CultureInfo.CreateSpecificCulture("en-US")) , Summary = weatherInfoDetail.weather_state_name , TemperatureC = weatherInfoDetail.the_temp }); } } return(new WeatherForecastResult(city, weatherForecasts)); } return(new WeatherForecastResult()); } catch (Exception ex) { return(new WeatherForecastResult("There was an error retrieving weather info.")); } }
public void Should_return_weather_forecasts_form_weather_source_when_cache_does_not_contain_city() { var result = new WeatherForecastResult { Status = Status.Success, WeatherForecast = new List <WeatherInfo>() }; weatherSource.GetWeatherFor(query.City, query.DaysCount) .Returns(result); var weatherForecastResult = watherController.WeatherForecasts(query).Result; weatherForecastResult.Should().BeEquivalentTo(result); }
public void Should_update_cache_when_response_successful() { var forecasts = new[] { new WeatherInfo() }; var result = new WeatherForecastResult { Status = Status.Success, WeatherForecast = forecasts }; weatherSource.GetWeatherFor(query.City, query.DaysCount) .Returns(result); var _ = watherController.WeatherForecasts(query).Result; cache.Received().UpdateCache(query.City, forecasts); }
public async Task <WeatherForecastResult> WeatherForecasts([FromQuery] WeatherQuery weatherQuery) { if (cache.TryGetForecasts(weatherQuery.City, out var cachedForecasts)) { return(WeatherForecastResult.Successfull(cachedForecasts)); } var weatherForecastResult = await weatherSource.GetWeatherFor(weatherQuery.City, weatherQuery.DaysCount); if (weatherForecastResult.Status == Status.Success) { cache.UpdateCache(weatherQuery.City, weatherForecastResult.WeatherForecast); } return(weatherForecastResult); }
public WeatherForecastResult Get2_0() { var rng = new Random(); var result = new WeatherForecastResult { ApiVersion = HttpContext.GetRequestedApiVersion().ToString(), WeatherForecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index).ToShortDateString(), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray() }; return(result); }
public async Task <WeatherForecastResult> GetWeatherFor(string city, int daysCount) { var urlParameters = $"?q={city}&appid={apiKey}"; var(statusCode, jsonResponse) = await restClient.GetData(URL, urlParameters); if (statusCode == HttpStatusCode.OK) { var weatherForecast = parser.Parse(jsonResponse) .GroupBy(x => x.Date) .Select(x => x.First()) .Take(daysCount) .ToArray(); return(WeatherForecastResult.Successfull(weatherForecast)); } return(statusCode == HttpStatusCode.NotFound ? WeatherForecastResult.NotFound : WeatherForecastResult.UnknownError); }
public async Task <IActionResult> Index(string searchString) { WeatherForecastResult weatherForecastResult = await _weatherService.GetWeatherForecasts(searchString); return(View(weatherForecastResult)); }