Ejemplo n.º 1
0
        public async Task <bool> ImportWeatherData(string url, string apiKey, int cityId)
        {
            var result = false;
            int?externalId;

            using (var context = new EuropeWeatherEntities())
            {
                externalId =
                    await
                    context.Cities.Where(c => c.ExternalId.HasValue && c.CityId == cityId)
                    .Select(c => c.ExternalId)
                    .FirstOrDefaultAsync();
            }

            if (!externalId.HasValue)
            {
                return(false);
            }

            var api = new CurrentWeather();

            var apiData = api.GetCurrentWeather(url, externalId.Value, apiKey);

            if (apiData == null)
            {
                return(true);                 //no data received and no error
            }
            using (var context = new EuropeWeatherEntities())
            {
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        var mapper      = new ApiDataToWeatherDataMapper(context);
                        var weatherData = mapper.To(apiData);
                        context.WeatherDataConditions.AddRange(weatherData);
                        context.SaveChanges();
                        transaction.Commit();
                        result = true;
                    }
                    catch (Exception)
                    {
                        //TODO: Log error
                        transaction.Rollback();
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public async Task <bool> ImportWeatherData(string url, string apiKey)
        {
            int[] ids;
            var   result = false;

            using (var context = new EuropeWeatherEntities())
            {
                ids = await context.Cities.Where(c => c.ExternalId.HasValue).Select(c => c.ExternalId.Value).ToArrayAsync();
            }

            var api     = new CurrentWeather();
            var apiData = api.GetCurrentWeather(url, ids, apiKey);

            if (apiData == null || apiData.Count == 0)
            {
                return(true);                                       //no results but no error
            }
            using (var context = new EuropeWeatherEntities())
            {
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        var mapper = new ApiDataToWeatherDataMapper(context);
                        foreach (var conditions in apiData.List.Select(weatherData => mapper.To(weatherData)))
                        {
                            context.WeatherDataConditions.AddRange(conditions);
                        }
                        context.SaveChanges();
                        transaction.Commit();
                        result = true;
                    }
                    catch (Exception)
                    {
                        //TODO: Log error
                        transaction.Rollback();
                    }
                }
            }

            return(result);
        }