예제 #1
0
        public async Task <WeatherViewModel> Handle(CityCurrentWeatherQuery request, CancellationToken cancellationToken)
        {
            var apiWeatherDataString = await _router.SendRequest(HttpMethod.Get, $"weather?q={request.CityName}&units={_units}", cancellationToken);

            WeatherContainerDTO weatherApiData = JsonConvert.DeserializeObject <WeatherContainerDTO>(apiWeatherDataString);

            return(Mapper.Map <Weather, WeatherViewModel>(Weather.SuppliedFrom(weatherApiData)));
        }
예제 #2
0
        public static Weather SuppliedFrom(WeatherContainerDTO apiWeatherData)
        {
            if (apiWeatherData.Cod != 0 && apiWeatherData.Cod != 200)
            {
                throw new ApiException(apiWeatherData.Message, HttpStatusCode.BadRequest);
            }

            var temp      = apiWeatherData.Main?.Temp;
            var humidity  = apiWeatherData.Main?.Humidity;
            var windSpeed = apiWeatherData.Wind?.Speed;
            var weather   = apiWeatherData.Weather.Any() ? apiWeatherData.Weather[0] : null;

            return(new Weather(apiWeatherData.Name != null ? apiWeatherData.Name : string.Empty,
                               weather != null ? weather.Main : string.Empty,
                               weather != null ? weather.Description : string.Empty,
                               weather != null ? weather.Icon : string.Empty,
                               temp != null ? Convert.ToDecimal(temp.Value) : 0,
                               humidity != null ? Convert.ToInt32(humidity.Value) : 0,
                               windSpeed != null ? Convert.ToDecimal(windSpeed.Value) : 0,
                               Convert.ToDateTime(apiWeatherData.Dt_txt)));
        }