Exemplo n.º 1
0
        /// <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);
            }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 7
0
        public async Task <IActionResult> Index(string searchString)
        {
            WeatherForecastResult weatherForecastResult = await _weatherService.GetWeatherForecasts(searchString);

            return(View(weatherForecastResult));
        }