Ejemplo n.º 1
0
        /// <summary>
        /// Сохраняет температуры наружного воздуха в указанную территорию.
        /// </summary>
        /// <param name="records"></param>
        /// <param name="territory"></param>
        /// <param name="missingOnly"></param>
        /// <returns></returns>
        public async Task Save(List <TemperatureRecord> records, Territory territory, bool missingOnly)
        {
            if (territory == null)
            {
                throw new ArgumentNullException(nameof(territory));
            }

            var weatherClient = new WeatherClient(_baseUri.ToString(), _httpClient);

            IDictionary <DateTimeOffset, TerritoryOutdoorTemperature> existingTemperature = null;

            if (missingOnly)
            {
                // Если импортируются только отсутствующие данные, получаем существующую температуру наружного воздуха.

                existingTemperature = (await weatherClient.GetAsync(territory.Id))
                                      .ToDictionary(x => x.Date);
            }

            var outdoorTemp = new List <TerritoryOutdoorTemperature>();

            foreach (var record in records)
            {
                if (!missingOnly || !existingTemperature.ContainsKey(record.Date))
                {
                    outdoorTemp.Add(new TerritoryOutdoorTemperature
                    {
                        Date  = record.Date,
                        Value = record.Temperature
                    });
                }
            }

            if (outdoorTemp.Count <= 0)
            {
                Console.WriteLine("Нет данных для сохранения.");
            }
            else
            {
                await weatherClient.SetAsync(territory.Id, outdoorTemp);
            }
        }